author | lana |
Thu, 11 Oct 2012 16:59:50 -0700 | |
changeset 14032 | 1a8b3b760f60 |
parent 13982 | 47b91529e614 (current diff) |
parent 14031 | 9c7cee73b12d (diff) |
child 14033 | b0ce391a86b9 |
jdk/src/share/classes/sun/util/xml/XMLUtils.java | file | annotate | diff | comparison | revisions | |
jdk/src/share/test/pack200/pack.conf | file | annotate | diff | comparison | revisions |
--- a/jdk/make/java/java/FILES_java.gmk Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/make/java/java/FILES_java.gmk Thu Oct 11 16:59:50 2012 -0700 @@ -213,6 +213,7 @@ sun/util/locale/provider/DateFormatSymbolsProviderImpl.java \ sun/util/locale/provider/DecimalFormatSymbolsProviderImpl.java \ sun/util/locale/provider/DictionaryBasedBreakIterator.java \ + sun/util/locale/provider/FallbackLocaleProviderAdapter.java \ sun/util/locale/provider/HostLocaleProviderAdapter.java \ sun/util/locale/provider/HostLocaleProviderAdapterImpl.java \ sun/util/locale/provider/JRELocaleConstants.java \ @@ -235,6 +236,7 @@ java/util/Observer.java \ java/util/Properties.java \ java/util/InvalidPropertiesFormatException.java \ + sun/util/spi/XmlPropertiesProvider.java \ java/util/PropertyPermission.java \ java/util/PropertyResourceBundle.java \ java/util/Random.java \
--- a/jdk/make/java/nio/mapfile-bsd Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/make/java/nio/mapfile-bsd Thu Oct 11 16:59:50 2012 -0700 @@ -108,6 +108,7 @@ Java_sun_nio_ch_Net_setInterface6; Java_sun_nio_ch_Net_getInterface6; Java_sun_nio_ch_Net_shutdown; + Java_sun_nio_ch_Net_poll; Java_sun_nio_ch_PollArrayWrapper_interrupt; Java_sun_nio_ch_PollArrayWrapper_poll0; Java_sun_nio_ch_ServerSocketChannelImpl_accept0;
--- a/jdk/make/java/nio/mapfile-linux Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/make/java/nio/mapfile-linux Thu Oct 11 16:59:50 2012 -0700 @@ -116,6 +116,7 @@ Java_sun_nio_ch_Net_setInterface6; Java_sun_nio_ch_Net_getInterface6; Java_sun_nio_ch_Net_shutdown; + Java_sun_nio_ch_Net_poll; Java_sun_nio_ch_PollArrayWrapper_interrupt; Java_sun_nio_ch_PollArrayWrapper_poll0; Java_sun_nio_ch_ServerSocketChannelImpl_accept0;
--- a/jdk/make/java/nio/mapfile-solaris Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/make/java/nio/mapfile-solaris Thu Oct 11 16:59:50 2012 -0700 @@ -104,6 +104,7 @@ Java_sun_nio_ch_Net_setInterface6; Java_sun_nio_ch_Net_getInterface6; Java_sun_nio_ch_Net_shutdown; + Java_sun_nio_ch_Net_poll; Java_sun_nio_ch_PollArrayWrapper_interrupt; Java_sun_nio_ch_PollArrayWrapper_poll0; Java_sun_nio_ch_ServerSocketChannelImpl_accept0;
--- a/jdk/make/javax/crypto/Makefile Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/make/javax/crypto/Makefile Thu Oct 11 16:59:50 2012 -0700 @@ -158,7 +158,12 @@ # ifdef OPENJDK -all: build-jar install-jar build-policy install-limited +ifdef UNLIMITED_CRYPTO +POLICY = install-unlimited +else +POLICY = install-limited +endif +all: build-jar install-jar build-policy $(POLICY) else # OPENJDK ifeq ($(strip $(FILES_java)),) all:
--- a/jdk/make/sun/osxapp/Makefile Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/make/sun/osxapp/Makefile Thu Oct 11 16:59:50 2012 -0700 @@ -28,6 +28,11 @@ PRODUCT = sun include $(BUILDDIR)/common/Defs.gmk +GEN_DIR=$(GENSRCDIR)/sun/osxapp +ICON_DATA = $(GEN_DIR)/AWTIconData.h + +CLASSES_INIT += $(ICON_DATA) + # # Files # @@ -63,6 +68,7 @@ -framework QuartzCore CPPFLAGS += \ + -I$(GEN_DIR) \ $(call NativeSrcDirList,-I,/native/sun/osxapp) @@ -70,6 +76,34 @@ CPPFLAGS += -DINTERNAL_BUILD endif -clean clobber:: +TEMPDIR_CLASSES = $(TEMPDIR)/classes + +$(TEMPDIR_CLASSES)/sun/osxapp/ToBin.class: ToBin.java + @$(prep-target) + $(BOOT_JAVAC_CMD) -d $(TEMPDIR_CLASSES) $< + +ifdef OPENJDK + ICONS_PATH_PREFIX=$(PLATFORM_SRC_MACOS) +else + ICONS_PATH_PREFIX=$(CLOSED_SRC)/macosx +endif + +generated.clean: + $(RM) -r $(GEN_DIR)/*.h -.PHONY: +ICONPATH=$(ICONS_PATH_PREFIX)/native/sun/osxapp/resource/icons +ICON = $(ICONPATH)/JavaApp.icns + +$(GEN_DIR)/AWTIconData.h: $(TEMPDIR_CLASSES)/sun/osxapp/ToBin.class $(ICON) + $(prep-target) + $(RM) $(ICON_DATA) + $(ECHO) "static unsigned char sAWTIconData[] = { " >> $(ICON_DATA); \ + $(CAT) $(ICON) | \ + $(BOOT_JAVA_CMD) -cp $(TEMPDIR_CLASSES) -Djava.awt.headless=true \ + sun.osxapp.ToBin >> $(ICON_DATA); \ + $(ECHO) "};" >> $(ICON_DATA); + + +clean clobber:: generated.clean + +.PHONY: generated.clean
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/make/sun/osxapp/ToBin.java Thu Oct 11 16:59:50 2012 -0700 @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.osxapp; + +import java.io.*; + +public class ToBin { + public static void main(String[] args) throws Exception { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + int nRead; + byte[] data = new byte[4096]; + + while ((nRead = System.in.read(data, 0, data.length)) != -1) { + baos.write(data, 0, nRead); + } + + baos.flush(); + + byte[] buf = baos.toByteArray(); + for (int i = 0; i < buf.length; i++) { + System.out.print(String.format("0x%1$02X", buf[i]) + ", "); + if (i % 20 == 0) { + System.out.println(); + } + } + } +}
--- a/jdk/make/sun/util/Makefile Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/make/sun/util/Makefile Thu Oct 11 16:59:50 2012 -0700 @@ -41,3 +41,20 @@ # include $(BUILDDIR)/common/Classes.gmk +# +# Rules for XML properties provider configuration file +# +SERVICEDIR = $(CLASSBINDIR)/META-INF/services +FILES_copy = $(SERVICEDIR)/sun.util.spi.XmlPropertiesProvider + +copy-files: $(FILES_copy) + +$(SERVICEDIR)/%: $(SHARE_SRC)/classes/sun/util/xml/META-INF/services/% + $(install-file) + +build: copy-files + +clean:: + $(RM) $(FILES_copy) + +
--- a/jdk/src/macosx/classes/sun/lwawt/LWCanvasPeer.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/macosx/classes/sun/lwawt/LWCanvasPeer.java Thu Oct 11 16:59:50 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,26 +26,27 @@ package sun.lwawt; +import java.awt.AWTException; import java.awt.BufferCapabilities; -import java.awt.Canvas; import java.awt.Component; +import java.awt.Dimension; import java.awt.GraphicsConfiguration; import java.awt.Image; import java.awt.peer.CanvasPeer; import javax.swing.JComponent; -final class LWCanvasPeer extends LWComponentPeer<Component, JComponent> - implements CanvasPeer { +class LWCanvasPeer<T extends Component, D extends JComponent> + extends LWComponentPeer<T, D> implements CanvasPeer { - LWCanvasPeer(final Canvas target, PlatformComponent platformComponent) { + LWCanvasPeer(final T target, final PlatformComponent platformComponent) { super(target, platformComponent); } - // ---- PEER METHODS ---- // @Override - public void createBuffers(int numBuffers, BufferCapabilities caps) { + public void createBuffers(int numBuffers, BufferCapabilities caps) + throws AWTException { // TODO } @@ -67,10 +68,20 @@ } @Override - public GraphicsConfiguration getAppropriateGraphicsConfiguration( + public final GraphicsConfiguration getAppropriateGraphicsConfiguration( GraphicsConfiguration gc) { // TODO return gc; } + + @Override + public final Dimension getPreferredSize() { + return getMinimumSize(); + } + + @Override + public final Dimension getMinimumSize() { + return getBounds().getSize(); + } }
--- a/jdk/src/macosx/classes/sun/lwawt/LWCheckboxPeer.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/macosx/classes/sun/lwawt/LWCheckboxPeer.java Thu Oct 11 16:59:50 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -186,6 +186,11 @@ } @Override + public Dimension getPreferredSize() { + return getCurrentButton().getPreferredSize(); + } + + @Override @Transient public Dimension getMinimumSize() { return getCurrentButton().getMinimumSize();
--- a/jdk/src/macosx/classes/sun/lwawt/LWComponentPeer.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/macosx/classes/sun/lwawt/LWComponentPeer.java Thu Oct 11 16:59:50 2012 -0700 @@ -123,7 +123,7 @@ // private volatile boolean paintPending; private volatile boolean isLayouting; - private D delegate = null; + private final D delegate; private Container delegateContainer; private Component delegateDropTarget; private final Object dropTargetLock = new Object(); @@ -133,6 +133,11 @@ private final PlatformComponent platformComponent; + /** + * Character with reasonable value between the minimum width and maximum. + */ + static final char WIDE_CHAR = '0'; + private final class DelegateContainer extends Container { { enableEvents(0xFFFFFFFF); @@ -267,9 +272,7 @@ } protected final D getDelegate() { - synchronized (getStateLock()) { - return delegate; - } + return delegate; } protected Component getDelegateFocusOwner() { @@ -698,26 +701,23 @@ } @Override - public FontMetrics getFontMetrics(Font f) { + public FontMetrics getFontMetrics(final Font f) { // Borrow the metrics from the top-level window // return getWindowPeer().getFontMetrics(f); // Obtain the metrics from the offscreen window where this peer is // mostly drawn to. // TODO: check for "use platform metrics" settings - Graphics g = getWindowPeer().getGraphics(); - try { - if (g != null) { + final Graphics g = getOnscreenGraphics(); + if (g != null) { + try { return g.getFontMetrics(f); - } else { - synchronized (getDelegateLock()) { - return delegateContainer.getFontMetrics(f); - } - } - } finally { - if (g != null) { + } finally { g.dispose(); } } + synchronized (getDelegateLock()) { + return delegateContainer.getFontMetrics(f); + } } @Override @@ -847,31 +847,46 @@ } /** - * Should be overridden in subclasses to forward the request - * to the Swing helper component, if required. + * Determines the preferred size of the component. By default forwards the + * request to the Swing helper component. Should be overridden in subclasses + * if required. */ @Override public Dimension getPreferredSize() { - // It looks like a default implementation for all toolkits - return getMinimumSize(); + final Dimension size; + synchronized (getDelegateLock()) { + size = getDelegate().getPreferredSize(); + } + return validateSize(size); } - /* - * Should be overridden in subclasses to forward the request - * to the Swing helper component. + /** + * Determines the minimum size of the component. By default forwards the + * request to the Swing helper component. Should be overridden in subclasses + * if required. */ @Override public Dimension getMinimumSize() { - D delegate = getDelegate(); + final Dimension size; + synchronized (getDelegateLock()) { + size = getDelegate().getMinimumSize(); + } + return validateSize(size); + } - if (delegate == null) { - // Is it a correct default value? - return getBounds().getSize(); - } else { - synchronized (getDelegateLock()) { - return delegate.getMinimumSize(); - } + /** + * In some situations delegates can return empty minimum/preferred size. + * (For example: empty JLabel, etc), but awt components never should be + * empty. In the XPeers or WPeers we use some magic constants, but here we + * try to use something more useful, + */ + private Dimension validateSize(final Dimension size) { + if (size.width == 0 || size.height == 0) { + final FontMetrics fm = getFontMetrics(getFont()); + size.width = fm.charWidth(WIDE_CHAR); + size.height = fm.getHeight(); } + return size; } @Override
--- a/jdk/src/macosx/classes/sun/lwawt/LWContainerPeer.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/macosx/classes/sun/lwawt/LWContainerPeer.java Thu Oct 11 16:59:50 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -41,7 +41,7 @@ import javax.swing.JComponent; abstract class LWContainerPeer<T extends Container, D extends JComponent> - extends LWComponentPeer<T, D> + extends LWCanvasPeer<T, D> implements ContainerPeer { // List of child peers sorted by z-order from bottom-most
--- a/jdk/src/macosx/classes/sun/lwawt/LWLabelPeer.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/macosx/classes/sun/lwawt/LWLabelPeer.java Thu Oct 11 16:59:50 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,37 +26,26 @@ package sun.lwawt; -import java.awt.Dimension; -import java.awt.FontMetrics; import java.awt.Label; import java.awt.peer.LabelPeer; import javax.swing.JLabel; import javax.swing.SwingConstants; -import javax.tools.annotation.GenerateNativeHeader; - /** * Lightweight implementation of {@link LabelPeer}. Delegates most of the work * to the {@link JLabel}. */ -/* No native methods here, but the constants are needed in the supporting JNI code */ -@GenerateNativeHeader final class LWLabelPeer extends LWComponentPeer<Label, JLabel> implements LabelPeer { - private static final int TEXT_XPAD = 5; - private static final int TEXT_YPAD = 1; - LWLabelPeer(final Label target, final PlatformComponent platformComponent) { super(target, platformComponent); } @Override protected JLabel createDelegate() { - final JLabel label = new JLabel(); - label.setVerticalAlignment(SwingConstants.TOP); - return label; + return new JLabel(); } @Override @@ -80,24 +69,6 @@ } } - @Override - public Dimension getMinimumSize() { - int w = TEXT_XPAD; - int h = TEXT_YPAD; - final FontMetrics fm = getFontMetrics(getFont()); - if (fm != null) { - final String text; - synchronized (getDelegateLock()) { - text = getDelegate().getText(); - } - if (text != null) { - w += fm.stringWidth(text); - } - h += fm.getHeight(); - } - return new Dimension(w, h); - } - /** * Converts {@code Label} alignment constant to the {@code JLabel} constant. * If wrong Label alignment provided returns default alignment.
--- a/jdk/src/macosx/classes/sun/lwawt/LWListPeer.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/macosx/classes/sun/lwawt/LWListPeer.java Thu Oct 11 16:59:50 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,10 +32,22 @@ import java.awt.peer.ListPeer; import java.util.Arrays; -final class LWListPeer - extends LWComponentPeer<List, LWListPeer.ScrollableJList> +/** + * Lightweight implementation of {@link ListPeer}. + */ +final class LWListPeer extends LWComponentPeer<List, LWListPeer.ScrollableJList> implements ListPeer { + /** + * The default number of visible rows. + */ + private static final int DEFAULT_VISIBLE_ROWS = 4; // From java.awt.List, + + /** + * This text is used for cell bounds calculation. + */ + private static final String TEXT = "0123456789abcde"; + LWListPeer(final List target, final PlatformComponent platformComponent) { super(target, platformComponent); if (!getTarget().isBackgroundSet()) { @@ -135,6 +147,16 @@ } @Override + public Dimension getPreferredSize() { + return getMinimumSize(); + } + + @Override + public Dimension getMinimumSize() { + return getMinimumSize(DEFAULT_VISIBLE_ROWS); + } + + @Override public Dimension getPreferredSize(final int rows) { return getMinimumSize(rows); } @@ -142,16 +164,26 @@ @Override public Dimension getMinimumSize(final int rows) { synchronized (getDelegateLock()) { - final int margin = 2; - final int space = 1; + final Dimension size = getCellSize(); + size.height *= rows; + // Always take vertical scrollbar into account. + final JScrollBar vbar = getDelegate().getVerticalScrollBar(); + size.width += vbar != null ? vbar.getMinimumSize().width : 0; + // JScrollPane and JList insets + final Insets pi = getDelegate().getInsets(); + final Insets vi = getDelegate().getView().getInsets(); + size.width += pi.left + pi.right + vi.left + vi.right; + size.height += pi.top + pi.bottom + vi.top + vi.bottom; + return size; + } + } - // TODO: count ScrollPane's scrolling elements if any. - final FontMetrics fm = getFontMetrics(getFont()); - final int itemHeight = (fm.getHeight() - fm.getLeading()) + (2 * space); - - return new Dimension(20 + (fm == null ? 10 * 15 : fm.stringWidth("0123456789abcde")), - (fm == null ? 10 : itemHeight) * rows + (2 * margin)); - } + private Dimension getCellSize() { + final JList<String> jList = getDelegate().getView(); + final ListCellRenderer<? super String> cr = jList.getCellRenderer(); + final Component cell = cr.getListCellRendererComponent(jList, TEXT, 0, + false, false); + return cell.getPreferredSize(); } private void revalidate() { @@ -165,10 +197,10 @@ private boolean skipStateChangedEvent; - private DefaultListModel<Object> model = - new DefaultListModel<Object>() { + private final DefaultListModel<String> model = + new DefaultListModel<String>() { @Override - public void add(final int index, final Object element) { + public void add(final int index, final String element) { if (index == -1) { addElement(element); } else { @@ -181,7 +213,7 @@ ScrollableJList() { getViewport().setScrollMode(JViewport.SIMPLE_SCROLL_MODE); - final JList<Object> list = new JListDelegate(); + final JList<String> list = new JListDelegate(); list.addListSelectionListener(this); getViewport().setView(list); @@ -223,11 +255,11 @@ } } - public JList getView() { - return (JList) getViewport().getView(); + public JList<String> getView() { + return (JList<String>) getViewport().getView(); } - public DefaultListModel<Object> getModel() { + public DefaultListModel<String> getModel() { return model; } @@ -254,7 +286,7 @@ } } - private final class JListDelegate extends JList<Object> { + private final class JListDelegate extends JList<String> { JListDelegate() { super(ScrollableJList.this.model); @@ -272,7 +304,7 @@ final int index = locationToIndex(e.getPoint()); if (0 <= index && index < getModel().getSize()) { LWListPeer.this.postEvent(new ActionEvent(getTarget(), ActionEvent.ACTION_PERFORMED, - getModel().getElementAt(index).toString(), e.getWhen(), e.getModifiers())); + getModel().getElementAt(index), e.getWhen(), e.getModifiers())); } } } @@ -281,10 +313,10 @@ protected void processKeyEvent(final KeyEvent e) { super.processKeyEvent(e); if (e.getID() == KeyEvent.KEY_PRESSED && e.getKeyCode() == KeyEvent.VK_ENTER) { - final Object selectedValue = getSelectedValue(); + final String selectedValue = getSelectedValue(); if(selectedValue != null){ LWListPeer.this.postEvent(new ActionEvent(getTarget(), ActionEvent.ACTION_PERFORMED, - selectedValue.toString(), e.getWhen(), e.getModifiers())); + selectedValue, e.getWhen(), e.getModifiers())); } } }
--- a/jdk/src/macosx/classes/sun/lwawt/LWPanelPeer.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/macosx/classes/sun/lwawt/LWPanelPeer.java Thu Oct 11 16:59:50 2012 -0700 @@ -26,7 +26,6 @@ package sun.lwawt; -import java.awt.Dimension; import java.awt.Panel; import java.awt.peer.PanelPeer; @@ -43,9 +42,4 @@ public JPanel createDelegate() { return new JPanel(); } - - @Override - public Dimension getMinimumSize() { - return getBounds().getSize(); - } }
--- a/jdk/src/macosx/classes/sun/lwawt/LWScrollBarPeer.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/macosx/classes/sun/lwawt/LWScrollBarPeer.java Thu Oct 11 16:59:50 2012 -0700 @@ -27,7 +27,6 @@ package sun.lwawt; import java.awt.Adjustable; -import java.awt.Dimension; import java.awt.Scrollbar; import java.awt.event.AdjustmentEvent; import java.awt.event.AdjustmentListener; @@ -93,13 +92,6 @@ } } - @Override - public Dimension getPreferredSize() { - synchronized (getDelegateLock()) { - return getDelegate().getPreferredSize(); - } - } - // Peer also registered as a listener for ComponentDelegate component @Override public void adjustmentValueChanged(final AdjustmentEvent e) {
--- a/jdk/src/macosx/classes/sun/lwawt/LWTextAreaPeer.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/macosx/classes/sun/lwawt/LWTextAreaPeer.java Thu Oct 11 16:59:50 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,6 +29,7 @@ import java.awt.Component; import java.awt.Cursor; import java.awt.Dimension; +import java.awt.Insets; import java.awt.Point; import java.awt.TextArea; import java.awt.event.TextEvent; @@ -41,11 +42,22 @@ import javax.swing.text.Document; import javax.swing.text.JTextComponent; +/** + * Lightweight implementation of {@link TextAreaPeer}. Delegates most of the + * work to the {@link JTextArea} inside JScrollPane. + */ final class LWTextAreaPeer extends LWTextComponentPeer<TextArea, LWTextAreaPeer.ScrollableJTextArea> implements TextAreaPeer { + /** + * The default number of visible columns. + */ private static final int DEFAULT_COLUMNS = 60; + + /** + * The default number of visible rows. + */ private static final int DEFAULT_ROWS = 10; LWTextAreaPeer(final TextArea target, @@ -87,26 +99,41 @@ } @Override + public Dimension getPreferredSize() { + return getMinimumSize(); + } + + @Override public Dimension getMinimumSize() { return getMinimumSize(DEFAULT_ROWS, DEFAULT_COLUMNS); } @Override - public Dimension getMinimumSize(final int rows, final int columns) { - return getPreferredSize(rows, columns); + public Dimension getPreferredSize(final int rows, final int columns) { + return getMinimumSize(rows, columns); } @Override - public Dimension getPreferredSize(final int rows, final int columns) { - final Dimension size = super.getPreferredSize(rows, columns); + public Dimension getMinimumSize(final int rows, final int columns) { + final Dimension size = super.getMinimumSize(rows, columns); synchronized (getDelegateLock()) { - final JScrollBar vbar = getDelegate().getVerticalScrollBar(); - final JScrollBar hbar = getDelegate().getHorizontalScrollBar(); - final int scrollbarW = vbar != null ? vbar.getWidth() : 0; - final int scrollbarH = hbar != null ? hbar.getHeight() : 0; - return new Dimension(size.width + scrollbarW, - size.height + scrollbarH); + // JScrollPane insets + final Insets pi = getDelegate().getInsets(); + size.width += pi.left + pi.right; + size.height += pi.top + pi.bottom; + // Take scrollbars into account. + final int vsbPolicy = getDelegate().getVerticalScrollBarPolicy(); + if (vsbPolicy == ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS) { + final JScrollBar vbar = getDelegate().getVerticalScrollBar(); + size.width += vbar != null ? vbar.getMinimumSize().width : 0; + } + final int hsbPolicy = getDelegate().getHorizontalScrollBarPolicy(); + if (hsbPolicy == ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS) { + final JScrollBar hbar = getDelegate().getHorizontalScrollBar(); + size.height += hbar != null ? hbar.getMinimumSize().height : 0; + } } + return size; } @Override
--- a/jdk/src/macosx/classes/sun/lwawt/LWTextComponentPeer.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/macosx/classes/sun/lwawt/LWTextComponentPeer.java Thu Oct 11 16:59:50 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -48,10 +48,7 @@ extends LWComponentPeer<T, D> implements DocumentListener, TextComponentPeer, InputMethodListener { - /** - * Character with reasonable value between the minimum width and maximum. - */ - protected static final char WIDE_CHAR = 'w'; + private volatile boolean firstChangeSkipped; LWTextComponentPeer(final T target, @@ -95,18 +92,16 @@ */ abstract JTextComponent getTextComponent(); - public Dimension getPreferredSize(final int rows, final int columns) { + public Dimension getMinimumSize(final int rows, final int columns) { final Insets insets; synchronized (getDelegateLock()) { - insets = getDelegate().getInsets(); + insets = getTextComponent().getInsets(); } final int borderHeight = insets.top + insets.bottom; final int borderWidth = insets.left + insets.right; final FontMetrics fm = getFontMetrics(getFont()); - final int charWidth = (fm != null) ? fm.charWidth(WIDE_CHAR) : 10; - final int itemHeight = (fm != null) ? fm.getHeight() : 10; - return new Dimension(columns * charWidth + borderWidth, - rows * itemHeight + borderHeight); + return new Dimension(fm.charWidth(WIDE_CHAR) * columns + borderWidth, + fm.getHeight() * rows + borderHeight); } @Override @@ -187,6 +182,7 @@ } } + //TODO IN XAWT we just return true.. @Override public final boolean isFocusable() { return getTarget().isFocusable();
--- a/jdk/src/macosx/classes/sun/lwawt/LWTextFieldPeer.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/macosx/classes/sun/lwawt/LWTextFieldPeer.java Thu Oct 11 16:59:50 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,16 +37,10 @@ import javax.swing.JPasswordField; import javax.swing.text.JTextComponent; -import javax.tools.annotation.GenerateNativeHeader; - -/* No native methods here, but the constants are needed in the supporting JNI code */ -@GenerateNativeHeader final class LWTextFieldPeer extends LWTextComponentPeer<TextField, JPasswordField> implements TextFieldPeer, ActionListener { - private static final int DEFAULT_COLUMNS = 1; - LWTextFieldPeer(final TextField target, final PlatformComponent platformComponent) { super(target, platformComponent); @@ -83,17 +77,12 @@ @Override public Dimension getPreferredSize(final int columns) { - return getPreferredSize(1, columns); + return getMinimumSize(columns); } @Override public Dimension getMinimumSize(final int columns) { - return getPreferredSize(columns); - } - - @Override - public Dimension getMinimumSize() { - return getMinimumSize(DEFAULT_COLUMNS); + return getMinimumSize(1, columns); } @Override
--- a/jdk/src/macosx/classes/sun/lwawt/LWToolkit.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/macosx/classes/sun/lwawt/LWToolkit.java Thu Oct 11 16:59:50 2012 -0700 @@ -310,7 +310,7 @@ @Override public CanvasPeer createCanvas(Canvas target) { PlatformComponent platformComponent = createPlatformComponent(); - LWCanvasPeer peer = new LWCanvasPeer(target, platformComponent); + LWCanvasPeer<?, ?> peer = new LWCanvasPeer<>(target, platformComponent); targetCreatedPeer(target, peer); peer.initialize(); return peer;
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java Thu Oct 11 16:59:50 2012 -0700 @@ -160,6 +160,9 @@ if(isDeadChar){ testChar = (char) out[2]; + if(testChar == 0){ + return; + } } jkeyCode = out[0];
--- a/jdk/src/macosx/native/apple/security/KeystoreImpl.m Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/macosx/native/apple/security/KeystoreImpl.m Thu Oct 11 16:59:50 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -337,7 +337,6 @@ // Call back to the Java object to create Java objects corresponding to this security object. jlong nativeKeyRef = ptr_to_jlong(privateKeyRef); JNFCallVoidMethod(env, keyStore, jm_createKeyEntry, alias, creationDate, nativeKeyRef, certRefArray, javaCertArray); - break; } } while (searchResult == noErr);
--- a/jdk/src/macosx/native/sun/awt/AWTEvent.m Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/macosx/native/sun/awt/AWTEvent.m Thu Oct 11 16:59:50 2012 -0700 @@ -383,6 +383,7 @@ { TISInputSourceRef currentKeyboard = TISCopyCurrentKeyboardInputSource(); CFDataRef uchr = (CFDataRef)TISGetInputSourceProperty(currentKeyboard, kTISPropertyUnicodeKeyLayoutData); + if (uchr == nil) { return; } const UCKeyboardLayout *keyboardLayout = (const UCKeyboardLayout*)CFDataGetBytePtr(uchr); // Carbon modifiers should be used instead of NSEvent modifiers UInt32 modifierKeyState = (GetCurrentEventKeyModifiers() >> 8) & 0xFF; @@ -563,18 +564,18 @@ const struct _nsKeyToJavaModifier* cur; for (cur = nsKeyToJavaModifierTable; cur->nsMask != 0; ++cur) { - jint mask = isExtMods? cur->javaExtMask : cur->javaMask; + jint mask = isExtMods? cur->javaExtMask : cur->javaMask; if ((mask & javaModifiers) != 0) { nsFlags |= cur->nsMask; } } // special case - jint mask = isExtMods? java_awt_event_InputEvent_ALT_GRAPH_DOWN_MASK : + jint mask = isExtMods? java_awt_event_InputEvent_ALT_GRAPH_DOWN_MASK : java_awt_event_InputEvent_ALT_GRAPH_MASK; if ((mask & javaModifiers) != 0) { - nsFlags |= NSAlternateKeyMask; + nsFlags |= NSAlternateKeyMask; } return nsFlags;
--- a/jdk/src/macosx/native/sun/awt/AWTView.m Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/macosx/native/sun/awt/AWTView.m Thu Oct 11 16:59:50 2012 -0700 @@ -279,7 +279,10 @@ return; } - if (![self hasMarkedText] && fKeyEventsNeeded) { + NSString *eventCharacters = [event characters]; + BOOL isDeadKey = (eventCharacters != nil && [eventCharacters length] == 0); + + if ((![self hasMarkedText] && fKeyEventsNeeded) || isDeadKey) { [self deliverJavaKeyEventHelper: event]; }
--- a/jdk/src/macosx/native/sun/awt/CTextPipe.m Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/macosx/native/sun/awt/CTextPipe.m Thu Oct 11 16:59:50 2012 -0700 @@ -142,8 +142,11 @@ // get our baseline transform and font CGContextRef cgRef = qsdo->cgRef; CGAffineTransform ctmText = CGContextGetTextMatrix(cgRef); - //CGFontRef cgFont = CGContextGetFont(cgRef); + /* Save and restore of graphics context is done before the iteration. + This seems to work using our test case (see bug ID 7158350) so we are restoring it at + the end of the for loop. If we find out that save/restore outside the loop + doesn't work on all cases then we will move the Save/Restore inside the loop.*/ CGContextSaveGState(cgRef); CGAffineTransform invTx = CGAffineTransformInvert(strike->fTx); @@ -210,13 +213,9 @@ pt.x += advances[i].width; pt.y += advances[i].height; - // reset the font on the context after striking a unicode with CoreText - if (uniChar != 0) - { - // CGContextSetFont(cgRef, cgFont); - CGContextSaveGState(cgRef); - } } + // reset the font on the context after striking a unicode with CoreText + CGContextRestoreGState(cgRef); } // Using the Quartz Surface Data context, draw a hot-substituted character run
--- a/jdk/src/macosx/native/sun/awt/InitIDs.m Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/macosx/native/sun/awt/InitIDs.m Thu Oct 11 16:59:50 2012 -0700 @@ -47,7 +47,10 @@ { } - +JNIEXPORT void JNICALL Java_java_awt_Choice_initIDs +(JNIEnv *env, jclass cls) +{ +} JNIEXPORT void JNICALL Java_java_awt_Color_initIDs (JNIEnv *env, jclass cls)
--- a/jdk/src/macosx/native/sun/awt/LWCToolkit.m Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/macosx/native/sun/awt/LWCToolkit.m Thu Oct 11 16:59:50 2012 -0700 @@ -33,6 +33,7 @@ #import "ThreadUtilities.h" #import "AWT_debug.h" #import "CSystemColors.h" +#import "NSApplicationAWT.h" #import "sun_lwawt_macosx_LWCToolkit.h" @@ -47,7 +48,7 @@ return eventCount; } -+ (void) eventCountPlusPlus{ ++ (void) eventCountPlusPlus{ eventCount++; } @@ -79,7 +80,6 @@ @end - /* * Class: sun_lwawt_macosx_LWCToolkit * Method: nativeSyncQueue @@ -90,12 +90,22 @@ { int currentEventNum = [AWTToolkit getEventCount]; - [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){}]; - + NSApplication* sharedApp = [NSApplication sharedApplication]; + if ([sharedApp isKindOfClass:[NSApplicationAWT class]]) { + NSApplicationAWT* theApp = (NSApplicationAWT*)sharedApp; + [theApp postDummyEvent]; + [theApp waitForDummyEvent]; + } else { + // could happen if we are embedded inside SWT application, + // in this case just spin a single empty block through + // the event loop to give it a chance to process pending events + [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){}]; + } + if (([AWTToolkit getEventCount] - currentEventNum) != 0) { return JNI_TRUE; } - + return JNI_FALSE; }
--- a/jdk/src/macosx/native/sun/osxapp/NSApplicationAWT.h Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/macosx/native/sun/osxapp/NSApplicationAWT.h Thu Oct 11 16:59:50 2012 -0700 @@ -29,11 +29,15 @@ @interface NSApplicationAWT : NSApplication { NSString *fApplicationName; NSWindow *eventTransparentWindow; + NSTimeInterval dummyEventTimestamp; + NSConditionLock* seenDummyEventLock; } - (void) finishLaunching; - (void) registerWithProcessManager; - (void) setDockIconWithEnv:(JNIEnv *)env; +- (void) postDummyEvent; +- (void) waitForDummyEvent; + (void) runAWTLoopWithApp:(NSApplication*)app;
--- a/jdk/src/macosx/native/sun/osxapp/NSApplicationAWT.m Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/macosx/native/sun/osxapp/NSApplicationAWT.m Thu Oct 11 16:59:50 2012 -0700 @@ -31,6 +31,7 @@ #import "PropertiesUtilities.h" #import "ThreadUtilities.h" #import "QueuingApplicationDelegate.h" +#import "AWTIconData.h" static BOOL sUsingDefaultNIB = YES; @@ -52,6 +53,9 @@ AWT_ASSERT_APPKIT_THREAD; fApplicationName = nil; + dummyEventTimestamp = 0.0; + seenDummyEventLock = nil; + // NSApplication will call _RegisterApplication with the application's bundle, but there may not be one. // So, we need to call it ourselves to ensure the app is set up properly. @@ -255,25 +259,26 @@ theIconPath = [PropertiesUtilities javaSystemPropertyForKey:@"apple.awt.application.icon" withEnv:env]; } - // If the icon file wasn't specified as an argument and we need to get an icon - // we'll use the generic java app icon. - NSString *defaultIconPath = [NSString stringWithFormat:@"%@%@", SHARED_FRAMEWORK_BUNDLE, @"/Resources/GenericApp.icns"]; - if (theIconPath == nil) { + // Use the path specified to get the icon image + NSImage* iconImage = nil; + if (theIconPath != nil) { + iconImage = [[NSImage alloc] initWithContentsOfFile:theIconPath]; + } + + // If no icon file was specified or we failed to get the icon image + // and there is no bundle's icon, then use the default icon + if (iconImage == nil) { NSString* bundleIcon = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleIconFile"]; if (bundleIcon == nil) { - theIconPath = defaultIconPath; + NSData* iconData; + iconData = [[NSData alloc] initWithBytesNoCopy: sAWTIconData length: sizeof(sAWTIconData) freeWhenDone: NO]; + iconImage = [[NSImage alloc] initWithData: iconData]; + [iconData release]; } } - // Set up the dock icon if we have an icon name. - if (theIconPath != nil) { - NSImage *iconImage = [[NSImage alloc] initWithContentsOfFile:theIconPath]; - - // If we failed for some reason fall back to the default icon. - if (iconImage == nil) { - iconImage = [[NSImage alloc] initWithContentsOfFile:defaultIconPath]; - } - + // Set up the dock icon if we have an icon image. + if (iconImage != nil) { [NSApp setApplicationIconImage:iconImage]; [iconImage release]; } @@ -328,6 +333,45 @@ return event; } +// NSTimeInterval has microseconds precision +#define TS_EQUAL(ts1, ts2) (fabs((ts1) - (ts2)) < 1e-6) + +- (void)sendEvent:(NSEvent *)event +{ + if ([event type] == NSApplicationDefined && TS_EQUAL([event timestamp], dummyEventTimestamp)) { + [seenDummyEventLock lockWhenCondition:NO]; + [seenDummyEventLock unlockWithCondition:YES]; + } else { + [super sendEvent:event]; + } +} + +- (void)postDummyEvent { + seenDummyEventLock = [[NSConditionLock alloc] initWithCondition:NO]; + dummyEventTimestamp = [NSProcessInfo processInfo].systemUptime; + + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + NSEvent* event = [NSEvent otherEventWithType: NSApplicationDefined + location: NSMakePoint(0,0) + modifierFlags: 0 + timestamp: dummyEventTimestamp + windowNumber: 0 + context: nil + subtype: 0 + data1: 0 + data2: 0]; + [NSApp postEvent: event atStart: NO]; + [pool drain]; +} + +- (void)waitForDummyEvent { + [seenDummyEventLock lockWhenCondition:YES]; + [seenDummyEventLock unlock]; + [seenDummyEventLock release]; + + seenDummyEventLock = nil; +} + @end
--- a/jdk/src/share/classes/com/sun/security/auth/module/Krb5LoginModule.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/com/sun/security/auth/module/Krb5LoginModule.java Thu Oct 11 16:59:50 2012 -0700 @@ -1064,12 +1064,17 @@ if (storeKey) { if (encKeys == null) { - if (!privCredSet.contains(ktab)) { - privCredSet.add(ktab); - // Compatibility; also add keys to privCredSet - for (KerberosKey key: ktab.getKeys(kerbClientPrinc)) { - privCredSet.add(new Krb5Util.KeysFromKeyTab(key)); + if (ktab != null) { + if (!privCredSet.contains(ktab)) { + privCredSet.add(ktab); + // Compatibility; also add keys to privCredSet + for (KerberosKey key: ktab.getKeys(kerbClientPrinc)) { + privCredSet.add(new Krb5Util.KeysFromKeyTab(key)); + } } + } else { + succeeded = false; + throw new LoginException("No key to store"); } } else { for (int i = 0; i < kerbKeys.length; i ++) {
--- a/jdk/src/share/classes/java/awt/Choice.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/awt/Choice.java Thu Oct 11 16:59:50 2012 -0700 @@ -104,7 +104,16 @@ /* * JDK 1.1 serialVersionUID */ - private static final long serialVersionUID = -4075310674757313071L; + private static final long serialVersionUID = -4075310674757313071L; + + static { + /* ensure that the necessary native libraries are loaded */ + Toolkit.loadLibraries(); + /* initialize JNI field and method ids */ + if (!GraphicsEnvironment.isHeadless()) { + initIDs(); + } + } /** * Creates a new choice menu. The menu initially has no items in it. @@ -711,6 +720,10 @@ } } + /** + * Initialize JNI field and method IDs + */ + private static native void initIDs(); ///////////////// // Accessibility support
--- a/jdk/src/share/classes/java/io/FilePermission.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/io/FilePermission.java Thu Oct 11 16:59:50 2012 -0700 @@ -76,7 +76,7 @@ * <P> * Be careful when granting FilePermissions. Think about the implications * of granting read and especially write access to various files and - * directories. The "<<ALL FILES>>" permission with write action is + * directories. The "<<ALL FILES>>" permission with write action is * especially dangerous. This grants permission to write to the entire * file system. One thing this effectively allows is replacement of the * system binary, including the JVM runtime environment. @@ -180,9 +180,7 @@ * @param mask the actions mask to use. * */ - private void init(int mask) - { - + private void init(int mask) { if ((mask & ALL) != mask) throw new IllegalArgumentException("invalid actions mask"); @@ -274,9 +272,7 @@ * If actions is <code>null</code>, empty or contains an action * other than the specified possible actions. */ - - public FilePermission(String path, String actions) - { + public FilePermission(String path, String actions) { super(path); init(getMask(actions)); } @@ -293,8 +289,7 @@ */ // package private for use by the FilePermissionCollection add method - FilePermission(String path, int mask) - { + FilePermission(String path, int mask) { super(path); init(mask); } @@ -337,7 +332,6 @@ * this FilePermission's path also implies that FilePermission's path. * * @param that the FilePermission to check against. - * @param exact return immediately if the masks are not equal * @return the effective mask */ boolean impliesIgnoreMask(FilePermission that) { @@ -412,7 +406,6 @@ * * @return a hash code value for this object. */ - public int hashCode() { return this.cpath.hashCode(); } @@ -424,7 +417,6 @@ * @return the actions mask. */ private static int getMask(String actions) { - int mask = NONE; // Null action valid? @@ -552,7 +544,6 @@ * * @return the actions mask. */ - int getMask() { return mask; } @@ -564,8 +555,7 @@ * * @return the canonical string representation of the actions. */ - private static String getActions(int mask) - { + private static String getActions(int mask) { StringBuilder sb = new StringBuilder(); boolean comma = false; @@ -610,15 +600,13 @@ * * @return the canonical string representation of the actions. */ - public String getActions() - { + public String getActions() { if (actions == null) actions = getActions(this.mask); return actions; } - /** * Returns a new PermissionCollection object for storing FilePermission * objects. @@ -650,7 +638,6 @@ * @return a new PermissionCollection object suitable for storing * FilePermissions. */ - public PermissionCollection newPermissionCollection() { return new FilePermissionCollection(); } @@ -712,22 +699,20 @@ */ final class FilePermissionCollection extends PermissionCollection -implements Serializable { - + implements Serializable +{ // Not serialized; see serialization section at end of class private transient List<Permission> perms; /** - * Create an empty FilePermissions object. - * + * Create an empty FilePermissionCollection object. */ - public FilePermissionCollection() { perms = new ArrayList<>(); } /** - * Adds a permission to the FilePermissions. The key for the hash is + * Adds a permission to the FilePermissionCollection. The key for the hash is * permission.path. * * @param permission the Permission object to add. @@ -738,9 +723,7 @@ * @exception SecurityException - if this FilePermissionCollection object * has been marked readonly */ - - public void add(Permission permission) - { + public void add(Permission permission) { if (! (permission instanceof FilePermission)) throw new IllegalArgumentException("invalid permission: "+ permission); @@ -757,16 +740,14 @@ * Check and see if this set of permissions implies the permissions * expressed in "permission". * - * @param p the Permission object to compare + * @param permission the Permission object to compare * * @return true if "permission" is a proper subset of a permission in * the set, false if not. */ - - public boolean implies(Permission permission) - { + public boolean implies(Permission permission) { if (! (permission instanceof FilePermission)) - return false; + return false; FilePermission fp = (FilePermission) permission; @@ -795,7 +776,6 @@ * * @return an enumeration of all the FilePermission objects. */ - public Enumeration<Permission> elements() { // Convert Iterator into Enumeration synchronized (this) { @@ -841,8 +821,9 @@ /* * Reads in a Vector of FilePermissions and saves them in the perms field. */ - private void readObject(ObjectInputStream in) throws IOException, - ClassNotFoundException { + private void readObject(ObjectInputStream in) + throws IOException, ClassNotFoundException + { // Don't call defaultReadObject() // Read in serialized fields
--- a/jdk/src/share/classes/java/io/ObjectOutputStream.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/io/ObjectOutputStream.java Thu Oct 11 16:59:50 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -484,7 +484,7 @@ * stream. The state is reset to be the same as a new ObjectOutputStream. * The current point in the stream is marked as reset so the corresponding * ObjectInputStream will be reset at the same point. Objects previously - * written to the stream will not be refered to as already being in the + * written to the stream will not be referred to as already being in the * stream. They will be written to the stream again. * * @throws IOException if reset() is invoked while serializing an object.
--- a/jdk/src/share/classes/java/io/PrintWriter.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/io/PrintWriter.java Thu Oct 11 16:59:50 2012 -0700 @@ -784,7 +784,7 @@ * <tt>null</tt> argument depends on the <a * href="../util/Formatter.html#syntax">conversion</a>. * - * @throws IllegalFormatException + * @throws java.util.IllegalFormatException * If a format string contains an illegal syntax, a format * specifier that is incompatible with the given arguments, * insufficient arguments given the format string, or other @@ -835,7 +835,7 @@ * <tt>null</tt> argument depends on the <a * href="../util/Formatter.html#syntax">conversion</a>. * - * @throws IllegalFormatException + * @throws java.util.IllegalFormatException * If a format string contains an illegal syntax, a format * specifier that is incompatible with the given arguments, * insufficient arguments given the format string, or other @@ -879,7 +879,7 @@ * <tt>null</tt> argument depends on the <a * href="../util/Formatter.html#syntax">conversion</a>. * - * @throws IllegalFormatException + * @throws java.util.IllegalFormatException * If a format string contains an illegal syntax, a format * specifier that is incompatible with the given arguments, * insufficient arguments given the format string, or other @@ -939,7 +939,7 @@ * <tt>null</tt> argument depends on the <a * href="../util/Formatter.html#syntax">conversion</a>. * - * @throws IllegalFormatException + * @throws java.util.IllegalFormatException * If a format string contains an illegal syntax, a format * specifier that is incompatible with the given arguments, * insufficient arguments given the format string, or other
--- a/jdk/src/share/classes/java/io/Reader.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/io/Reader.java Thu Oct 11 16:59:50 2012 -0700 @@ -91,7 +91,7 @@ * -1 if this source of characters is at its end * @throws IOException if an I/O error occurs * @throws NullPointerException if target is null - * @throws ReadOnlyBufferException if target is a read only buffer + * @throws java.nio.ReadOnlyBufferException if target is a read only buffer * @since 1.5 */ public int read(java.nio.CharBuffer target) throws IOException {
--- a/jdk/src/share/classes/java/lang/Class.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/lang/Class.java Thu Oct 11 16:59:50 2012 -0700 @@ -2970,7 +2970,7 @@ /** * Returns a map from simple name to enum constant. This package-private * method is used internally by Enum to implement - * public static <T extends Enum<T>> T valueOf(Class<T>, String) + * {@code public static <T extends Enum<T>> T valueOf(Class<T>, String)} * efficiently. Note that the map is returned by this method is * created lazily on first use. Typically it won't ever get created. */
--- a/jdk/src/share/classes/java/lang/InheritableThreadLocal.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/lang/InheritableThreadLocal.java Thu Oct 11 16:59:50 2012 -0700 @@ -76,7 +76,6 @@ * * @param t the current thread * @param firstValue value for the initial entry of the table. - * @param map the map to store. */ void createMap(Thread t, T firstValue) { t.inheritableThreadLocals = new ThreadLocalMap(this, firstValue);
--- a/jdk/src/share/classes/java/lang/Integer.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/lang/Integer.java Thu Oct 11 16:59:50 2012 -0700 @@ -752,7 +752,7 @@ * -128 and 127 (inclusive) as required by JLS. * * The cache is initialized on first usage. The size of the cache - * may be controlled by the -XX:AutoBoxCacheMax=<size> option. + * may be controlled by the {@code -XX:AutoBoxCacheMax=<size>} option. * During VM initialization, java.lang.Integer.IntegerCache.high property * may be set and saved in the private system properties in the * sun.misc.VM class.
--- a/jdk/src/share/classes/java/lang/Package.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/lang/Package.java Thu Oct 11 16:59:50 2012 -0700 @@ -316,7 +316,7 @@ * attributes are defined in the manifests that accompany * the classes. * - * @param class the class to get the package of. + * @param c the class to get the package of. * @return the package of the class. It may be null if no package * information is available from the archive or codebase. */ static Package getPackage(Class<?> c) { @@ -411,14 +411,13 @@ /** * Construct a package instance with the specified version * information. - * @param pkgName the name of the package + * @param name the name of the package * @param spectitle the title of the specification * @param specversion the version of the specification * @param specvendor the organization that maintains the specification * @param impltitle the title of the implementation * @param implversion the version of the implementation * @param implvendor the organization that maintains the implementation - * @return a new package for containing the specified information. */ Package(String name, String spectitle, String specversion, String specvendor,
--- a/jdk/src/share/classes/java/lang/StrictMath.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/lang/StrictMath.java Thu Oct 11 16:59:50 2012 -0700 @@ -365,7 +365,7 @@ * @param a the value to be floored or ceiled * @param negativeBoundary result for values in (-1, 0) * @param positiveBoundary result for values in (0, 1) - * @param increment value to add when the argument is non-integral + * @param sign the sign of the result */ private static double floorOrCeil(double a, double negativeBoundary, @@ -811,7 +811,7 @@ * @param value the long value * @return the argument as an int * @throws ArithmeticException if the {@code argument} overflows an int - * @see Math#toIntExact(int) + * @see Math#toIntExact(long) * @since 1.8 */ public static int toIntExact(long value) {
--- a/jdk/src/share/classes/java/lang/String.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/lang/String.java Thu Oct 11 16:59:50 2012 -0700 @@ -2782,7 +2782,7 @@ * <tt>null</tt> argument depends on the <a * href="../util/Formatter.html#syntax">conversion</a>. * - * @throws IllegalFormatException + * @throws java.util.IllegalFormatException * If a format string contains an illegal syntax, a format * specifier that is incompatible with the given arguments, * insufficient arguments given the format string, or other @@ -2826,7 +2826,7 @@ * <tt>null</tt> argument depends on the <a * href="../util/Formatter.html#syntax">conversion</a>. * - * @throws IllegalFormatException + * @throws java.util.IllegalFormatException * If a format string contains an illegal syntax, a format * specifier that is incompatible with the given arguments, * insufficient arguments given the format string, or other
--- a/jdk/src/share/classes/java/lang/System.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/lang/System.java Thu Oct 11 16:59:50 2012 -0700 @@ -545,7 +545,7 @@ * <tr><td><code>java.version</code></td> * <td>Java Runtime Environment version</td></tr> * <tr><td><code>java.vendor</code></td> - * <td>Java Runtime Environment vendor</td></tr + * <td>Java Runtime Environment vendor</td></tr> * <tr><td><code>java.vendor.url</code></td> * <td>Java vendor URL</td></tr> * <tr><td><code>java.home</code></td>
--- a/jdk/src/share/classes/java/lang/ThreadGroup.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/lang/ThreadGroup.java Thu Oct 11 16:59:50 2012 -0700 @@ -918,9 +918,6 @@ * * @param t * the Thread whose start method was invoked - * - * @param failed - * true if the thread could not be started successfully */ void threadStartFailed(Thread t) { synchronized(this) {
--- a/jdk/src/share/classes/java/lang/ThreadLocal.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/lang/ThreadLocal.java Thu Oct 11 16:59:50 2012 -0700 @@ -47,8 +47,8 @@ * private static final AtomicInteger nextId = new AtomicInteger(0); * * // Thread local variable containing each thread's ID - * private static final ThreadLocal<Integer> threadId = - * new ThreadLocal<Integer>() { + * private static final ThreadLocal<Integer> threadId = + * new ThreadLocal<Integer>() { * @Override protected Integer initialValue() { * return nextId.getAndIncrement(); * } @@ -222,7 +222,6 @@ * * @param t the current thread * @param firstValue value for the initial entry of the map - * @param map the map to store. */ void createMap(Thread t, T firstValue) { t.threadLocals = new ThreadLocalMap(this, firstValue);
--- a/jdk/src/share/classes/java/lang/management/ThreadInfo.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/lang/management/ThreadInfo.java Thu Oct 11 16:59:50 2012 -0700 @@ -147,8 +147,9 @@ * @param waitedCount Number of times waited on a lock * @param waitedTime Approx time waited on a lock * @param stackTrace Thread stack trace - * @param lockedMonitors List of locked monitors - * @param lockedSynchronizers List of locked synchronizers + * @param monitors List of locked monitors + * @param stackDepths List of stack depths + * @param synchronizers List of locked synchronizers */ private ThreadInfo(Thread t, int state, Object lockObj, Thread lockOwner, long blockedCount, long blockedTime,
--- a/jdk/src/share/classes/java/net/AbstractPlainDatagramSocketImpl.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/net/AbstractPlainDatagramSocketImpl.java Thu Oct 11 16:59:50 2012 -0700 @@ -48,11 +48,6 @@ protected InetAddress connectedAddress = null; private int connectedPort = -1; - /* cached socket options */ - private int multicastInterface = 0; - private boolean loopbackMode = true; - private int ttl = -1; - private static final String os = AccessController.doPrivileged( new sun.security.action.GetPropertyAction("os.name") ); @@ -104,7 +99,7 @@ /** * Sends a datagram packet. The packet contains the data and the * destination address to send the packet to. - * @param packet to be sent. + * @param p the packet to be sent. */ protected abstract void send(DatagramPacket p) throws IOException; @@ -135,13 +130,13 @@ /** * Peek at the packet to see who it is from. - * @param return the address which the packet came from. + * @param i the address to populate with the sender address */ protected abstract int peek(InetAddress i) throws IOException; protected abstract int peekData(DatagramPacket p) throws IOException; /** * Receive the datagram packet. - * @param Packet Received. + * @param p the packet to receive into */ protected synchronized void receive(DatagramPacket p) throws IOException { @@ -153,7 +148,7 @@ /** * Set the TTL (time-to-live) option. - * @param TTL to be set. + * @param ttl TTL to be set. */ protected abstract void setTimeToLive(int ttl) throws IOException; @@ -164,7 +159,7 @@ /** * Set the TTL (time-to-live) option. - * @param TTL to be set. + * @param ttl TTL to be set. */ @Deprecated protected abstract void setTTL(byte ttl) throws IOException; @@ -177,7 +172,7 @@ /** * Join the multicast group. - * @param multicast address to join. + * @param inetaddr multicast address to join. */ protected void join(InetAddress inetaddr) throws IOException { join(inetaddr, null); @@ -185,14 +180,14 @@ /** * Leave the multicast group. - * @param multicast address to leave. + * @param inetaddr multicast address to leave. */ protected void leave(InetAddress inetaddr) throws IOException { leave(inetaddr, null); } /** * Join the multicast group. - * @param multicast address to join. + * @param mcastaddr multicast address to join. * @param netIf specifies the local interface to receive multicast * datagram packets * @throws IllegalArgumentException if mcastaddr is null or is a @@ -212,7 +207,7 @@ /** * Leave the multicast group. - * @param multicast address to leave. + * @param mcastaddr multicast address to leave. * @param netIf specified the local interface to leave the group at * @throws IllegalArgumentException if mcastaddr is null or is a * SocketAddress subclass not supported by this socket
--- a/jdk/src/share/classes/java/net/AbstractPlainSocketImpl.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/net/AbstractPlainSocketImpl.java Thu Oct 11 16:59:50 2012 -0700 @@ -368,7 +368,7 @@ /** * Binds the socket to the specified address of the specified local port. * @param address the address - * @param port the port + * @param lport the port */ protected synchronized void bind(InetAddress address, int lport) throws IOException
--- a/jdk/src/share/classes/java/net/DatagramSocket.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/net/DatagramSocket.java Thu Oct 11 16:59:50 2012 -0700 @@ -105,7 +105,7 @@ * Connects this socket to a remote socket address (IP address + port number). * Binds socket if not already bound. * <p> - * @param addr The remote address. + * @param address The remote address. * @param port The remote port * @throws SocketException if binding the socket fails. */
--- a/jdk/src/share/classes/java/net/Inet4Address.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/net/Inet4Address.java Thu Oct 11 16:59:50 2012 -0700 @@ -177,7 +177,6 @@ * a loopback address; or false otherwise. * @since 1.4 */ - private static final int loopback = 2130706433; /* 127.0.0.1 */ public boolean isLoopbackAddress() { /* 127.x.x.x */ byte[] byteAddr = getAddress();
--- a/jdk/src/share/classes/java/net/SocketInputStream.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/net/SocketInputStream.java Thu Oct 11 16:59:50 2012 -0700 @@ -112,7 +112,7 @@ * <i>length</i> bytes of data. * @param b the buffer into which the data is read * @param off the start offset of the data - * @param len the maximum number of bytes read + * @param length the maximum number of bytes read * @return the actual number of bytes read, -1 is * returned when the end of the stream is reached. * @exception IOException If an I/O error has occurred. @@ -209,7 +209,7 @@ /** * Skips n bytes of input. - * @param n the number of bytes to skip + * @param numbytes the number of bytes to skip * @return the actual number of bytes skipped. * @exception IOException If an I/O error has occurred. */
--- a/jdk/src/share/classes/java/net/SocketPermission.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/net/SocketPermission.java Thu Oct 11 16:59:50 2012 -0700 @@ -138,7 +138,7 @@ */ public final class SocketPermission extends Permission -implements java.io.Serializable + implements java.io.Serializable { private static final long serialVersionUID = -7204263841984476862L; @@ -232,8 +232,7 @@ trustNameService = tmp.booleanValue(); } - private static synchronized Debug getDebug() - { + private static synchronized Debug getDebug() { if (!debugInit) { debug = Debug.getInstance("access"); debugInit = true; @@ -288,8 +287,7 @@ defaultDeny = true; } - private static String getHost(String host) - { + private static String getHost(String host) { if (host.equals("")) { return "localhost"; } else { @@ -679,8 +677,8 @@ } private boolean authorizedIPv4(String cname, byte[] addr) { - String authHost = ""; - InetAddress auth; + String authHost = ""; + InetAddress auth; try { authHost = "auth." + @@ -708,8 +706,8 @@ } private boolean authorizedIPv6(String cname, byte[] addr) { - String authHost = ""; - InetAddress auth; + String authHost = ""; + InetAddress auth; try { StringBuffer sb = new StringBuffer(39); @@ -810,7 +808,6 @@ * @return true if the specified permission is implied by this object, * false if not. */ - public boolean implies(Permission p) { int i,j; @@ -844,12 +841,11 @@ * to find a match based on the IP addresses in both objects. * <li> Attempt to match on the canonical hostnames of both objects. * </ul> - * @param p the incoming permission request + * @param that the incoming permission request * * @return true if "permission" is a proper subset of the current object, * false if not. */ - boolean impliesIgnoreMask(SocketPermission that) { int i,j; @@ -1229,7 +1225,7 @@ */ final class SocketPermissionCollection extends PermissionCollection -implements Serializable + implements Serializable { // Not serialized; see serialization section at end of class private transient List<SocketPermission> perms; @@ -1255,9 +1251,7 @@ * @exception SecurityException - if this SocketPermissionCollection object * has been marked readonly */ - - public void add(Permission permission) - { + public void add(Permission permission) { if (! (permission instanceof SocketPermission)) throw new IllegalArgumentException("invalid permission: "+ permission); @@ -1276,7 +1270,7 @@ * Check and see if this collection of permissions implies the permissions * expressed in "permission". * - * @param p the Permission object to compare + * @param permission the Permission object to compare * * @return true if "permission" is a proper subset of a permission in * the collection, false if not. @@ -1369,8 +1363,9 @@ /* * Reads in a Vector of SocketPermissions and saves them in the perms field. */ - private void readObject(ObjectInputStream in) throws IOException, - ClassNotFoundException { + private void readObject(ObjectInputStream in) + throws IOException, ClassNotFoundException + { // Don't call in.defaultReadObject() // Read in serialized fields
--- a/jdk/src/share/classes/java/net/SocksSocketImpl.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/net/SocksSocketImpl.java Thu Oct 11 16:59:50 2012 -0700 @@ -644,7 +644,7 @@ * means "accept incoming connection from", so the SocketAddress is the * the one of the host we do accept connection from. * - * @param addr the Socket address of the remote host. + * @param saddr the Socket address of the remote host. * @exception IOException if an I/O error occurs when binding this socket. */ protected synchronized void socksBind(InetSocketAddress saddr) throws IOException {
--- a/jdk/src/share/classes/java/net/URLConnection.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/net/URLConnection.java Thu Oct 11 16:59:50 2012 -0700 @@ -1241,10 +1241,9 @@ /** * Gets the Content Handler appropriate for this connection. - * @param connection the connection to use. */ synchronized ContentHandler getContentHandler() - throws UnknownServiceException + throws UnknownServiceException { String contentType = stripOffParameters(getContentType()); ContentHandler handler = null;
--- a/jdk/src/share/classes/java/nio/X-Buffer.java.template Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/nio/X-Buffer.java.template Thu Oct 11 16:59:50 2012 -0700 @@ -741,6 +741,8 @@ public $Type$Buffer put($Type$Buffer src) { if (src == this) throw new IllegalArgumentException(); + if (isReadOnly()) + throw new ReadOnlyBufferException(); int n = src.remaining(); if (n > remaining()) throw new BufferOverflowException(); @@ -888,6 +890,8 @@ */ public $Type$Buffer put(String src, int start, int end) { checkBounds(start, end - start, src.length()); + if (isReadOnly()) + throw new ReadOnlyBufferException(); if (end - start > remaining()) throw new BufferOverflowException(); for (int i = start; i < end; i++)
--- a/jdk/src/share/classes/java/nio/channels/Channels.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/nio/channels/Channels.java Thu Oct 11 16:59:50 2012 -0700 @@ -84,7 +84,7 @@ /** * Write all remaining bytes in buffer to the given channel. * - * @throws IllegalBlockingException + * @throws IllegalBlockingModeException * If the channel is selectable and configured non-blocking. */ private static void writeFully(WritableByteChannel ch, ByteBuffer bb)
--- a/jdk/src/share/classes/java/nio/file/FileSystem.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/nio/file/FileSystem.java Thu Oct 11 16:59:50 2012 -0700 @@ -347,7 +347,7 @@ * <td><tt>C:\\*</tt> * <td>Matches <tt>C:\foo</tt> and <tt>C:\bar</tt> on the Windows * platform (note that the backslash is escaped; as a string literal in the - * Java Language the pattern would be <tt>"C:\\\\*"</tt>) </td> + * Java Language the pattern would be <tt>"C:\\\\*"</tt>) </td> * </tr> * * </table>
--- a/jdk/src/share/classes/java/nio/file/Files.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/nio/file/Files.java Thu Oct 11 16:59:50 2012 -0700 @@ -510,7 +510,7 @@ * <pre> * DirectoryStream.Filter<Path> filter = new DirectoryStream.Filter<Path>() { * public boolean accept(Path file) throws IOException { - * return (Files.size(file) > 8192L); + * return (Files.size(file) > 8192L); * } * }; * Path dir = ... @@ -1592,7 +1592,7 @@ * Path path = ... * AclFileAttributeView view = Files.getFileAttributeView(path, AclFileAttributeView.class); * if (view != null) { - * List<AclEntry> acl = view.getAcl(); + * List<AclEntry> acl = view.getAcl(); * : * } * </pre>
--- a/jdk/src/share/classes/java/nio/file/Path.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/nio/file/Path.java Thu Oct 11 16:59:50 2012 -0700 @@ -522,7 +522,7 @@ * * @return a {@code Path} object representing the absolute path * - * @throws IOError + * @throws java.io.IOError * if an I/O error occurs * @throws SecurityException * In the case of the default provider, a security manager
--- a/jdk/src/share/classes/java/nio/file/attribute/AclFileAttributeView.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/nio/file/attribute/AclFileAttributeView.java Thu Oct 11 16:59:50 2012 -0700 @@ -85,7 +85,7 @@ * .build(); * * // read ACL, insert ACE, re-write ACL - * List<AclEntry> acl = view.getAcl(); + * List<AclEntry> acl = view.getAcl(); * acl.add(0, entry); // insert before any DENY entries * view.setAcl(acl); * </pre>
--- a/jdk/src/share/classes/java/nio/file/attribute/FileTime.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/nio/file/attribute/FileTime.java Thu Oct 11 16:59:50 2012 -0700 @@ -310,7 +310,7 @@ private final long days; /** - * The excess (in nanoseconds); can be negative if days <= 0. + * The excess (in nanoseconds); can be negative if days <= 0. */ private final long excessNanos;
--- a/jdk/src/share/classes/java/security/AllPermission.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/security/AllPermission.java Thu Oct 11 16:59:50 2012 -0700 @@ -62,9 +62,7 @@ /** * Creates a new AllPermission object. */ - - public AllPermission() - { + public AllPermission() { super("<all permissions>"); } @@ -77,8 +75,7 @@ * @param name ignored * @param actions ignored. */ - public AllPermission(String name, String actions) - { + public AllPermission(String name, String actions) { this(); } @@ -120,8 +117,7 @@ * * @return the actions. */ - public String getActions() - { + public String getActions() { return "<all actions>"; } @@ -133,7 +129,6 @@ * @return a new PermissionCollection object suitable for * storing AllPermissions. */ - public PermissionCollection newPermissionCollection() { return new AllPermissionCollection(); } @@ -157,8 +152,8 @@ */ final class AllPermissionCollection -extends PermissionCollection -implements java.io.Serializable + extends PermissionCollection + implements java.io.Serializable { // use serialVersionUID from JDK 1.2.2 for interoperability @@ -188,8 +183,7 @@ * has been marked readonly */ - public void add(Permission permission) - { + public void add(Permission permission) { if (! (permission instanceof AllPermission)) throw new IllegalArgumentException("invalid permission: "+ permission); @@ -203,13 +197,12 @@ * Check and see if this set of permissions implies the permissions * expressed in "permission". * - * @param p the Permission object to compare + * @param permission the Permission object to compare * * @return always returns true. */ - public boolean implies(Permission permission) - { + public boolean implies(Permission permission) { return all_allowed; // No sync; staleness OK } @@ -219,8 +212,7 @@ * * @return an enumeration of all the AllPermission objects. */ - public Enumeration<Permission> elements() - { + public Enumeration<Permission> elements() { return new Enumeration<Permission>() { private boolean hasMore = all_allowed;
--- a/jdk/src/share/classes/java/security/BasicPermission.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/security/BasicPermission.java Thu Oct 11 16:59:50 2012 -0700 @@ -68,7 +68,7 @@ */ public abstract class BasicPermission extends Permission -implements java.io.Serializable + implements java.io.Serializable { private static final long serialVersionUID = 6279438298436773498L; @@ -84,10 +84,8 @@ /** * initialize a BasicPermission object. Common to all constructors. - * */ - private void init(String name) - { + private void init(String name) { if (name == null) throw new NullPointerException("name can't be null"); @@ -129,9 +127,7 @@ * @throws NullPointerException if <code>name</code> is <code>null</code>. * @throws IllegalArgumentException if <code>name</code> is empty. */ - - public BasicPermission(String name) - { + public BasicPermission(String name) { super(name); init(name); } @@ -148,8 +144,7 @@ * @throws NullPointerException if <code>name</code> is <code>null</code>. * @throws IllegalArgumentException if <code>name</code> is empty. */ - public BasicPermission(String name, String actions) - { + public BasicPermission(String name, String actions) { super(name); init(name); } @@ -238,8 +233,7 @@ * * @return the empty string "". */ - public String getActions() - { + public String getActions() { return ""; } @@ -296,7 +290,6 @@ * * @see java.security.Permission * @see java.security.Permissions - * @see java.security.PermissionsImpl * * * @author Roland Schemers @@ -305,8 +298,8 @@ */ final class BasicPermissionCollection -extends PermissionCollection -implements java.io.Serializable + extends PermissionCollection + implements java.io.Serializable { private static final long serialVersionUID = 739301742472979399L; @@ -360,9 +353,7 @@ * @exception SecurityException - if this BasicPermissionCollection object * has been marked readonly */ - - public void add(Permission permission) - { + public void add(Permission permission) { if (! (permission instanceof BasicPermission)) throw new IllegalArgumentException("invalid permission: "+ permission); @@ -398,16 +389,14 @@ * Check and see if this set of permissions implies the permissions * expressed in "permission". * - * @param p the Permission object to compare + * @param permission the Permission object to compare * * @return true if "permission" is a proper subset of a permission in * the set, false if not. */ - - public boolean implies(Permission permission) - { + public boolean implies(Permission permission) { if (! (permission instanceof BasicPermission)) - return false; + return false; BasicPermission bp = (BasicPermission) permission; @@ -468,7 +457,6 @@ * * @return an enumeration of all the BasicPermission objects. */ - public Enumeration<Permission> elements() { // Convert Iterator of Map values into an Enumeration synchronized (this) {
--- a/jdk/src/share/classes/java/security/CodeSource.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/security/CodeSource.java Thu Oct 11 16:59:50 2012 -0700 @@ -207,7 +207,7 @@ * Returns the code signers associated with this CodeSource. * <p> * If this CodeSource object was created using the - * {@link #CodeSource(URL url, Certificate[] certs)} + * {@link #CodeSource(URL url, java.security.cert.Certificate[] certs)} * constructor then its certificate chains are extracted and used to * create an array of CodeSigner objects. Note that only X.509 certificates * are examined - all other certificate types are ignored.
--- a/jdk/src/share/classes/java/security/KeyStore.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/security/KeyStore.java Thu Oct 11 16:59:50 2012 -0700 @@ -32,6 +32,7 @@ import java.util.*; import javax.crypto.SecretKey; +import javax.security.auth.DestroyFailedException; import javax.security.auth.callback.*; /** @@ -278,8 +279,7 @@ * @exception DestroyFailedException if this method was unable * to clear the password */ - public synchronized void destroy() - throws javax.security.auth.DestroyFailedException { + public synchronized void destroy() throws DestroyFailedException { destroyed = true; if (password != null) { Arrays.fill(password, ' ');
--- a/jdk/src/share/classes/java/security/cert/PKIXRevocationChecker.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/security/cert/PKIXRevocationChecker.java Thu Oct 11 16:59:50 2012 -0700 @@ -50,7 +50,7 @@ * status of certificates with OCSP and CRLs. By default, OCSP is the * preferred mechanism for checking revocation status, with CRLs as the * fallback mechanism. However, this preference can be switched to CRLs with - * the {@link Option.PREFER_CRLS} option. + * the {@link Option#PREFER_CRLS PREFER_CRLS} option. * * <p>A {@code PKIXRevocationChecker} is obtained by calling the * {@link CertPathValidator#getRevocationChecker getRevocationChecker} method
--- a/jdk/src/share/classes/java/sql/CallableStatement.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/sql/CallableStatement.java Thu Oct 11 16:59:50 2012 -0700 @@ -1562,7 +1562,7 @@ * @param parameterName the name of the parameter * @return the parameter value in full precision. If the value is * SQL <code>NULL</code>, the result is <code>null</code>. - * @exception SQLExceptionif parameterName does not correspond to a named + * @exception SQLException if parameterName does not correspond to a named * parameter; if a database access error occurs or * this method is called on a closed <code>CallableStatement</code> * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
--- a/jdk/src/share/classes/java/text/CollationElementIterator.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/text/CollationElementIterator.java Thu Oct 11 16:59:50 2012 -0700 @@ -119,7 +119,7 @@ * on the predefined collation rules. If the source string is empty, * NULLORDER will be returned on the calls to next(). * @param sourceText the source string. - * @param order the collation object. + * @param owner the collation object. */ CollationElementIterator(String sourceText, RuleBasedCollator owner) { this.owner = owner; @@ -137,7 +137,7 @@ * on the predefined collation rules. If the source string is empty, * NULLORDER will be returned on the calls to next(). * @param sourceText the source string. - * @param order the collation object. + * @param owner the collation object. */ CollationElementIterator(CharacterIterator sourceText, RuleBasedCollator owner) { this.owner = owner;
--- a/jdk/src/share/classes/java/text/DecimalFormat.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/text/DecimalFormat.java Thu Oct 11 16:59:50 2012 -0700 @@ -529,9 +529,25 @@ @Override public StringBuffer format(double number, StringBuffer result, FieldPosition fieldPosition) { - fieldPosition.setBeginIndex(0); - fieldPosition.setEndIndex(0); - + // If fieldPosition is a DontCareFieldPosition instance we can + // try to go to fast-path code. + boolean tryFastPath = false; + if (fieldPosition == DontCareFieldPosition.INSTANCE) + tryFastPath = true; + else { + fieldPosition.setBeginIndex(0); + fieldPosition.setEndIndex(0); + } + + if (tryFastPath) { + String tempResult = fastFormat(number); + if (tempResult != null) { + result.append(tempResult); + return result; + } + } + + // if fast-path could not work, we fallback to standard code. return format(number, result, fieldPosition.getFieldDelegate()); } @@ -869,6 +885,720 @@ return delegate.getIterator(sb.toString()); } + // ==== Begin fast-path formating logic for double ========================= + + /* Fast-path formatting will be used for format(double ...) methods iff a + * number of conditions are met (see checkAndSetFastPathStatus()): + * - Only if instance properties meet the right predefined conditions. + * - The abs value of the double to format is <= Integer.MAX_VALUE. + * + * The basic approach is to split the binary to decimal conversion of a + * double value into two phases: + * * The conversion of the integer portion of the double. + * * The conversion of the fractional portion of the double + * (limited to two or three digits). + * + * The isolation and conversion of the integer portion of the double is + * straightforward. The conversion of the fraction is more subtle and relies + * on some rounding properties of double to the decimal precisions in + * question. Using the terminology of BigDecimal, this fast-path algorithm + * is applied when a double value has a magnitude less than Integer.MAX_VALUE + * and rounding is to nearest even and the destination format has two or + * three digits of *scale* (digits after the decimal point). + * + * Under a rounding to nearest even policy, the returned result is a digit + * string of a number in the (in this case decimal) destination format + * closest to the exact numerical value of the (in this case binary) input + * value. If two destination format numbers are equally distant, the one + * with the last digit even is returned. To compute such a correctly rounded + * value, some information about digits beyond the smallest returned digit + * position needs to be consulted. + * + * In general, a guard digit, a round digit, and a sticky *bit* are needed + * beyond the returned digit position. If the discarded portion of the input + * is sufficiently large, the returned digit string is incremented. In round + * to nearest even, this threshold to increment occurs near the half-way + * point between digits. The sticky bit records if there are any remaining + * trailing digits of the exact input value in the new format; the sticky bit + * is consulted only in close to half-way rounding cases. + * + * Given the computation of the digit and bit values, rounding is then + * reduced to a table lookup problem. For decimal, the even/odd cases look + * like this: + * + * Last Round Sticky + * 6 5 0 => 6 // exactly halfway, return even digit. + * 6 5 1 => 7 // a little bit more than halfway, round up. + * 7 5 0 => 8 // exactly halfway, round up to even. + * 7 5 1 => 8 // a little bit more than halfway, round up. + * With analogous entries for other even and odd last-returned digits. + * + * However, decimal negative powers of 5 smaller than 0.5 are *not* exactly + * representable as binary fraction. In particular, 0.005 (the round limit + * for a two-digit scale) and 0.0005 (the round limit for a three-digit + * scale) are not representable. Therefore, for input values near these cases + * the sticky bit is known to be set which reduces the rounding logic to: + * + * Last Round Sticky + * 6 5 1 => 7 // a little bit more than halfway, round up. + * 7 5 1 => 8 // a little bit more than halfway, round up. + * + * In other words, if the round digit is 5, the sticky bit is known to be + * set. If the round digit is something other than 5, the sticky bit is not + * relevant. Therefore, some of the logic about whether or not to increment + * the destination *decimal* value can occur based on tests of *binary* + * computations of the binary input number. + */ + + /** + * Check validity of using fast-path for this instance. If fast-path is valid + * for this instance, sets fast-path state as true and initializes fast-path + * utility fields as needed. + * + * This method is supposed to be called rarely, otherwise that will break the + * fast-path performance. That means avoiding frequent changes of the + * properties of the instance, since for most properties, each time a change + * happens, a call to this method is needed at the next format call. + * + * FAST-PATH RULES: + * Similar to the default DecimalFormat instantiation case. + * More precisely: + * - HALF_EVEN rounding mode, + * - isGroupingUsed() is true, + * - groupingSize of 3, + * - multiplier is 1, + * - Decimal separator not mandatory, + * - No use of exponential notation, + * - minimumIntegerDigits is exactly 1 and maximumIntegerDigits at least 10 + * - For number of fractional digits, the exact values found in the default case: + * Currency : min = max = 2. + * Decimal : min = 0. max = 3. + * + */ + private void checkAndSetFastPathStatus() { + + boolean fastPathWasOn = isFastPath; + + if ((roundingMode == RoundingMode.HALF_EVEN) && + (isGroupingUsed()) && + (groupingSize == 3) && + (multiplier == 1) && + (!decimalSeparatorAlwaysShown) && + (!useExponentialNotation)) { + + // The fast-path algorithm is semi-hardcoded against + // minimumIntegerDigits and maximumIntegerDigits. + isFastPath = ((minimumIntegerDigits == 1) && + (maximumIntegerDigits >= 10)); + + // The fast-path algorithm is hardcoded against + // minimumFractionDigits and maximumFractionDigits. + if (isFastPath) { + if (isCurrencyFormat) { + if ((minimumFractionDigits != 2) || + (maximumFractionDigits != 2)) + isFastPath = false; + } else if ((minimumFractionDigits != 0) || + (maximumFractionDigits != 3)) + isFastPath = false; + } + } else + isFastPath = false; + + // Since some instance properties may have changed while still falling + // in the fast-path case, we need to reinitialize fastPathData anyway. + if (isFastPath) { + // We need to instantiate fastPathData if not already done. + if (fastPathData == null) + fastPathData = new FastPathData(); + + // Sets up the locale specific constants used when formatting. + // '0' is our default representation of zero. + fastPathData.zeroDelta = symbols.getZeroDigit() - '0'; + fastPathData.groupingChar = symbols.getGroupingSeparator(); + + // Sets up fractional constants related to currency/decimal pattern. + fastPathData.fractionalMaxIntBound = (isCurrencyFormat) ? 99 : 999; + fastPathData.fractionalScaleFactor = (isCurrencyFormat) ? 100.0d : 1000.0d; + + // Records the need for adding prefix or suffix + fastPathData.positiveAffixesRequired = + (positivePrefix.length() != 0) || (positiveSuffix.length() != 0); + fastPathData.negativeAffixesRequired = + (negativePrefix.length() != 0) || (negativeSuffix.length() != 0); + + // Creates a cached char container for result, with max possible size. + int maxNbIntegralDigits = 10; + int maxNbGroups = 3; + int containerSize = + Math.max(positivePrefix.length(), negativePrefix.length()) + + maxNbIntegralDigits + maxNbGroups + 1 + maximumFractionDigits + + Math.max(positiveSuffix.length(), negativeSuffix.length()); + + fastPathData.fastPathContainer = new char[containerSize]; + + // Sets up prefix and suffix char arrays constants. + fastPathData.charsPositiveSuffix = positiveSuffix.toCharArray(); + fastPathData.charsNegativeSuffix = negativeSuffix.toCharArray(); + fastPathData.charsPositivePrefix = positivePrefix.toCharArray(); + fastPathData.charsNegativePrefix = negativePrefix.toCharArray(); + + // Sets up fixed index positions for integral and fractional digits. + // Sets up decimal point in cached result container. + int longestPrefixLength = + Math.max(positivePrefix.length(), negativePrefix.length()); + int decimalPointIndex = + maxNbIntegralDigits + maxNbGroups + longestPrefixLength; + + fastPathData.integralLastIndex = decimalPointIndex - 1; + fastPathData.fractionalFirstIndex = decimalPointIndex + 1; + fastPathData.fastPathContainer[decimalPointIndex] = + isCurrencyFormat ? + symbols.getMonetaryDecimalSeparator() : + symbols.getDecimalSeparator(); + + } else if (fastPathWasOn) { + // Previous state was fast-path and is no more. + // Resets cached array constants. + fastPathData.fastPathContainer = null; + fastPathData.charsPositiveSuffix = null; + fastPathData.charsNegativeSuffix = null; + fastPathData.charsPositivePrefix = null; + fastPathData.charsNegativePrefix = null; + } + + fastPathCheckNeeded = false; + } + + /** + * Returns true if rounding-up must be done on {@code scaledFractionalPartAsInt}, + * false otherwise. + * + * This is a utility method that takes correct half-even rounding decision on + * passed fractional value at the scaled decimal point (2 digits for currency + * case and 3 for decimal case), when the approximated fractional part after + * scaled decimal point is exactly 0.5d. This is done by means of exact + * calculations on the {@code fractionalPart} floating-point value. + * + * This method is supposed to be called by private {@code fastDoubleFormat} + * method only. + * + * The algorithms used for the exact calculations are : + * + * The <b><i>FastTwoSum</i></b> algorithm, from T.J.Dekker, described in the + * papers "<i>A Floating-Point Technique for Extending the Available + * Precision</i>" by Dekker, and in "<i>Adaptive Precision Floating-Point + * Arithmetic and Fast Robust Geometric Predicates</i>" from J.Shewchuk. + * + * A modified version of <b><i>Sum2S</i></b> cascaded summation described in + * "<i>Accurate Sum and Dot Product</i>" from Takeshi Ogita and All. As + * Ogita says in this paper this is an equivalent of the Kahan-Babuska's + * summation algorithm because we order the terms by magnitude before summing + * them. For this reason we can use the <i>FastTwoSum</i> algorithm rather + * than the more expensive Knuth's <i>TwoSum</i>. + * + * We do this to avoid a more expensive exact "<i>TwoProduct</i>" algorithm, + * like those described in Shewchuk's paper above. See comments in the code + * below. + * + * @param fractionalPart The fractional value on which we take rounding + * decision. + * @param scaledFractionalPartAsInt The integral part of the scaled + * fractional value. + * + * @return the decision that must be taken regarding half-even rounding. + */ + private boolean exactRoundUp(double fractionalPart, + int scaledFractionalPartAsInt) { + + /* exactRoundUp() method is called by fastDoubleFormat() only. + * The precondition expected to be verified by the passed parameters is : + * scaledFractionalPartAsInt == + * (int) (fractionalPart * fastPathData.fractionalScaleFactor). + * This is ensured by fastDoubleFormat() code. + */ + + /* We first calculate roundoff error made by fastDoubleFormat() on + * the scaled fractional part. We do this with exact calculation on the + * passed fractionalPart. Rounding decision will then be taken from roundoff. + */ + + /* ---- TwoProduct(fractionalPart, scale factor (i.e. 1000.0d or 100.0d)). + * + * The below is an optimized exact "TwoProduct" calculation of passed + * fractional part with scale factor, using Ogita's Sum2S cascaded + * summation adapted as Kahan-Babuska equivalent by using FastTwoSum + * (much faster) rather than Knuth's TwoSum. + * + * We can do this because we order the summation from smallest to + * greatest, so that FastTwoSum can be used without any additional error. + * + * The "TwoProduct" exact calculation needs 17 flops. We replace this by + * a cascaded summation of FastTwoSum calculations, each involving an + * exact multiply by a power of 2. + * + * Doing so saves overall 4 multiplications and 1 addition compared to + * using traditional "TwoProduct". + * + * The scale factor is either 100 (currency case) or 1000 (decimal case). + * - when 1000, we replace it by (1024 - 16 - 8) = 1000. + * - when 100, we replace it by (128 - 32 + 4) = 100. + * Every multiplication by a power of 2 (1024, 128, 32, 16, 8, 4) is exact. + * + */ + double approxMax; // Will always be positive. + double approxMedium; // Will always be negative. + double approxMin; + + double fastTwoSumApproximation = 0.0d; + double fastTwoSumRoundOff = 0.0d; + double bVirtual = 0.0d; + + if (isCurrencyFormat) { + // Scale is 100 = 128 - 32 + 4. + // Multiply by 2**n is a shift. No roundoff. No error. + approxMax = fractionalPart * 128.00d; + approxMedium = - (fractionalPart * 32.00d); + approxMin = fractionalPart * 4.00d; + } else { + // Scale is 1000 = 1024 - 16 - 8. + // Multiply by 2**n is a shift. No roundoff. No error. + approxMax = fractionalPart * 1024.00d; + approxMedium = - (fractionalPart * 16.00d); + approxMin = - (fractionalPart * 8.00d); + } + + // Shewchuk/Dekker's FastTwoSum(approxMedium, approxMin). + assert(-approxMedium >= Math.abs(approxMin)); + fastTwoSumApproximation = approxMedium + approxMin; + bVirtual = fastTwoSumApproximation - approxMedium; + fastTwoSumRoundOff = approxMin - bVirtual; + double approxS1 = fastTwoSumApproximation; + double roundoffS1 = fastTwoSumRoundOff; + + // Shewchuk/Dekker's FastTwoSum(approxMax, approxS1); + assert(approxMax >= Math.abs(approxS1)); + fastTwoSumApproximation = approxMax + approxS1; + bVirtual = fastTwoSumApproximation - approxMax; + fastTwoSumRoundOff = approxS1 - bVirtual; + double roundoff1000 = fastTwoSumRoundOff; + double approx1000 = fastTwoSumApproximation; + double roundoffTotal = roundoffS1 + roundoff1000; + + // Shewchuk/Dekker's FastTwoSum(approx1000, roundoffTotal); + assert(approx1000 >= Math.abs(roundoffTotal)); + fastTwoSumApproximation = approx1000 + roundoffTotal; + bVirtual = fastTwoSumApproximation - approx1000; + + // Now we have got the roundoff for the scaled fractional + double scaledFractionalRoundoff = roundoffTotal - bVirtual; + + // ---- TwoProduct(fractionalPart, scale (i.e. 1000.0d or 100.0d)) end. + + /* ---- Taking the rounding decision + * + * We take rounding decision based on roundoff and half-even rounding + * rule. + * + * The above TwoProduct gives us the exact roundoff on the approximated + * scaled fractional, and we know that this approximation is exactly + * 0.5d, since that has already been tested by the caller + * (fastDoubleFormat). + * + * Decision comes first from the sign of the calculated exact roundoff. + * - Since being exact roundoff, it cannot be positive with a scaled + * fractional less than 0.5d, as well as negative with a scaled + * fractional greater than 0.5d. That leaves us with following 3 cases. + * - positive, thus scaled fractional == 0.500....0fff ==> round-up. + * - negative, thus scaled fractional == 0.499....9fff ==> don't round-up. + * - is zero, thus scaled fractioanl == 0.5 ==> half-even rounding applies : + * we round-up only if the integral part of the scaled fractional is odd. + * + */ + if (scaledFractionalRoundoff > 0.0) { + return true; + } else if (scaledFractionalRoundoff < 0.0) { + return false; + } else if ((scaledFractionalPartAsInt & 1) != 0) { + return true; + } + + return false; + + // ---- Taking the rounding decision end + } + + /** + * Collects integral digits from passed {@code number}, while setting + * grouping chars as needed. Updates {@code firstUsedIndex} accordingly. + * + * Loops downward starting from {@code backwardIndex} position (inclusive). + * + * @param number The int value from which we collect digits. + * @param digitsBuffer The char array container where digits and grouping chars + * are stored. + * @param backwardIndex the position from which we start storing digits in + * digitsBuffer. + * + */ + private void collectIntegralDigits(int number, + char[] digitsBuffer, + int backwardIndex) { + int index = backwardIndex; + int q; + int r; + while (number > 999) { + // Generates 3 digits per iteration. + q = number / 1000; + r = number - (q << 10) + (q << 4) + (q << 3); // -1024 +16 +8 = 1000. + number = q; + + digitsBuffer[index--] = DigitArrays.DigitOnes1000[r]; + digitsBuffer[index--] = DigitArrays.DigitTens1000[r]; + digitsBuffer[index--] = DigitArrays.DigitHundreds1000[r]; + digitsBuffer[index--] = fastPathData.groupingChar; + } + + // Collects last 3 or less digits. + digitsBuffer[index] = DigitArrays.DigitOnes1000[number]; + if (number > 9) { + digitsBuffer[--index] = DigitArrays.DigitTens1000[number]; + if (number > 99) + digitsBuffer[--index] = DigitArrays.DigitHundreds1000[number]; + } + + fastPathData.firstUsedIndex = index; + } + + /** + * Collects the 2 (currency) or 3 (decimal) fractional digits from passed + * {@code number}, starting at {@code startIndex} position + * inclusive. There is no punctuation to set here (no grouping chars). + * Updates {@code fastPathData.lastFreeIndex} accordingly. + * + * + * @param number The int value from which we collect digits. + * @param digitsBuffer The char array container where digits are stored. + * @param startIndex the position from which we start storing digits in + * digitsBuffer. + * + */ + private void collectFractionalDigits(int number, + char[] digitsBuffer, + int startIndex) { + int index = startIndex; + + char digitOnes = DigitArrays.DigitOnes1000[number]; + char digitTens = DigitArrays.DigitTens1000[number]; + + if (isCurrencyFormat) { + // Currency case. Always collects fractional digits. + digitsBuffer[index++] = digitTens; + digitsBuffer[index++] = digitOnes; + } else if (number != 0) { + // Decimal case. Hundreds will always be collected + digitsBuffer[index++] = DigitArrays.DigitHundreds1000[number]; + + // Ending zeros won't be collected. + if (digitOnes != '0') { + digitsBuffer[index++] = digitTens; + digitsBuffer[index++] = digitOnes; + } else if (digitTens != '0') + digitsBuffer[index++] = digitTens; + + } else + // This is decimal pattern and fractional part is zero. + // We must remove decimal point from result. + index--; + + fastPathData.lastFreeIndex = index; + } + + /** + * Internal utility. + * Adds the passed {@code prefix} and {@code suffix} to {@code container}. + * + * @param container Char array container which to prepend/append the + * prefix/suffix. + * @param prefix Char sequence to prepend as a prefix. + * @param suffix Char sequence to append as a suffix. + * + */ + // private void addAffixes(boolean isNegative, char[] container) { + private void addAffixes(char[] container, char[] prefix, char[] suffix) { + + // We add affixes only if needed (affix length > 0). + int pl = prefix.length; + int sl = suffix.length; + if (pl != 0) prependPrefix(prefix, pl, container); + if (sl != 0) appendSuffix(suffix, sl, container); + + } + + /** + * Prepends the passed {@code prefix} chars to given result + * {@code container}. Updates {@code fastPathData.firstUsedIndex} + * accordingly. + * + * @param prefix The prefix characters to prepend to result. + * @param len The number of chars to prepend. + * @param container Char array container which to prepend the prefix + */ + private void prependPrefix(char[] prefix, + int len, + char[] container) { + + fastPathData.firstUsedIndex -= len; + int startIndex = fastPathData.firstUsedIndex; + + // If prefix to prepend is only 1 char long, just assigns this char. + // If prefix is less or equal 4, we use a dedicated algorithm that + // has shown to run faster than System.arraycopy. + // If more than 4, we use System.arraycopy. + if (len == 1) + container[startIndex] = prefix[0]; + else if (len <= 4) { + int dstLower = startIndex; + int dstUpper = dstLower + len - 1; + int srcUpper = len - 1; + container[dstLower] = prefix[0]; + container[dstUpper] = prefix[srcUpper]; + + if (len > 2) + container[++dstLower] = prefix[1]; + if (len == 4) + container[--dstUpper] = prefix[2]; + } else + System.arraycopy(prefix, 0, container, startIndex, len); + } + + /** + * Appends the passed {@code suffix} chars to given result + * {@code container}. Updates {@code fastPathData.lastFreeIndex} + * accordingly. + * + * @param suffix The suffix characters to append to result. + * @param len The number of chars to append. + * @param container Char array container which to append the suffix + */ + private void appendSuffix(char[] suffix, + int len, + char[] container) { + + int startIndex = fastPathData.lastFreeIndex; + + // If suffix to append is only 1 char long, just assigns this char. + // If suffix is less or equal 4, we use a dedicated algorithm that + // has shown to run faster than System.arraycopy. + // If more than 4, we use System.arraycopy. + if (len == 1) + container[startIndex] = suffix[0]; + else if (len <= 4) { + int dstLower = startIndex; + int dstUpper = dstLower + len - 1; + int srcUpper = len - 1; + container[dstLower] = suffix[0]; + container[dstUpper] = suffix[srcUpper]; + + if (len > 2) + container[++dstLower] = suffix[1]; + if (len == 4) + container[--dstUpper] = suffix[2]; + } else + System.arraycopy(suffix, 0, container, startIndex, len); + + fastPathData.lastFreeIndex += len; + } + + /** + * Converts digit chars from {@code digitsBuffer} to current locale. + * + * Must be called before adding affixes since we refer to + * {@code fastPathData.firstUsedIndex} and {@code fastPathData.lastFreeIndex}, + * and do not support affixes (for speed reason). + * + * We loop backward starting from last used index in {@code fastPathData}. + * + * @param digitsBuffer The char array container where the digits are stored. + */ + private void localizeDigits(char[] digitsBuffer) { + + // We will localize only the digits, using the groupingSize, + // and taking into account fractional part. + + // First take into account fractional part. + int digitsCounter = + fastPathData.lastFreeIndex - fastPathData.fractionalFirstIndex; + + // The case when there is no fractional digits. + if (digitsCounter < 0) + digitsCounter = groupingSize; + + // Only the digits remains to localize. + for (int cursor = fastPathData.lastFreeIndex - 1; + cursor >= fastPathData.firstUsedIndex; + cursor--) { + if (digitsCounter != 0) { + // This is a digit char, we must localize it. + digitsBuffer[cursor] += fastPathData.zeroDelta; + digitsCounter--; + } else { + // Decimal separator or grouping char. Reinit counter only. + digitsCounter = groupingSize; + } + } + } + + /** + * This is the main entry point for the fast-path format algorithm. + * + * At this point we are sure to be in the expected conditions to run it. + * This algorithm builds the formatted result and puts it in the dedicated + * {@code fastPathData.fastPathContainer}. + * + * @param d the double value to be formatted. + * @param negative Flag precising if {@code d} is negative. + */ + private void fastDoubleFormat(double d, + boolean negative) { + + char[] container = fastPathData.fastPathContainer; + + /* + * The principle of the algorithm is to : + * - Break the passed double into its integral and fractional parts + * converted into integers. + * - Then decide if rounding up must be applied or not by following + * the half-even rounding rule, first using approximated scaled + * fractional part. + * - For the difficult cases (approximated scaled fractional part + * being exactly 0.5d), we refine the rounding decision by calling + * exactRoundUp utility method that both calculates the exact roundoff + * on the approximation and takes correct rounding decision. + * - We round-up the fractional part if needed, possibly propagating the + * rounding to integral part if we meet a "all-nine" case for the + * scaled fractional part. + * - We then collect digits from the resulting integral and fractional + * parts, also setting the required grouping chars on the fly. + * - Then we localize the collected digits if needed, and + * - Finally prepend/append prefix/suffix if any is needed. + */ + + // Exact integral part of d. + int integralPartAsInt = (int) d; + + // Exact fractional part of d (since we subtract it's integral part). + double exactFractionalPart = d - (double) integralPartAsInt; + + // Approximated scaled fractional part of d (due to multiplication). + double scaledFractional = + exactFractionalPart * fastPathData.fractionalScaleFactor; + + // Exact integral part of scaled fractional above. + int fractionalPartAsInt = (int) scaledFractional; + + // Exact fractional part of scaled fractional above. + scaledFractional = scaledFractional - (double) fractionalPartAsInt; + + // Only when scaledFractional is exactly 0.5d do we have to do exact + // calculations and take fine-grained rounding decision, since + // approximated results above may lead to incorrect decision. + // Otherwise comparing against 0.5d (strictly greater or less) is ok. + boolean roundItUp = false; + if (scaledFractional >= 0.5d) { + if (scaledFractional == 0.5d) + // Rounding need fine-grained decision. + roundItUp = exactRoundUp(exactFractionalPart, fractionalPartAsInt); + else + roundItUp = true; + + if (roundItUp) { + // Rounds up both fractional part (and also integral if needed). + if (fractionalPartAsInt < fastPathData.fractionalMaxIntBound) { + fractionalPartAsInt++; + } else { + // Propagates rounding to integral part since "all nines" case. + fractionalPartAsInt = 0; + integralPartAsInt++; + } + } + } + + // Collecting digits. + collectFractionalDigits(fractionalPartAsInt, container, + fastPathData.fractionalFirstIndex); + collectIntegralDigits(integralPartAsInt, container, + fastPathData.integralLastIndex); + + // Localizing digits. + if (fastPathData.zeroDelta != 0) + localizeDigits(container); + + // Adding prefix and suffix. + if (negative) { + if (fastPathData.negativeAffixesRequired) + addAffixes(container, + fastPathData.charsNegativePrefix, + fastPathData.charsNegativeSuffix); + } else if (fastPathData.positiveAffixesRequired) + addAffixes(container, + fastPathData.charsPositivePrefix, + fastPathData.charsPositiveSuffix); + } + + /** + * A fast-path shortcut of format(double) to be called by NumberFormat, or by + * format(double, ...) public methods. + * + * If instance can be applied fast-path and passed double is not NaN or + * Infinity, is in the integer range, we call {@code fastDoubleFormat} + * after changing {@code d} to its positive value if necessary. + * + * Otherwise returns null by convention since fast-path can't be exercized. + * + * @param d The double value to be formatted + * + * @return the formatted result for {@code d} as a string. + */ + String fastFormat(double d) { + // (Re-)Evaluates fast-path status if needed. + if (fastPathCheckNeeded) + checkAndSetFastPathStatus(); + + if (!isFastPath ) + // DecimalFormat instance is not in a fast-path state. + return null; + + if (!Double.isFinite(d)) + // Should not use fast-path for Infinity and NaN. + return null; + + // Extracts and records sign of double value, possibly changing it + // to a positive one, before calling fastDoubleFormat(). + boolean negative = false; + if (d < 0.0d) { + negative = true; + d = -d; + } else if (d == 0.0d) { + negative = (Math.copySign(1.0d, d) == -1.0d); + d = +0.0d; + } + + if (d > MAX_INT_AS_DOUBLE) + // Filters out values that are outside expected fast-path range + return null; + else + fastDoubleFormat(d, negative); + + // Returns a new string from updated fastPathContainer. + return new String(fastPathData.fastPathContainer, + fastPathData.firstUsedIndex, + fastPathData.lastFreeIndex - fastPathData.firstUsedIndex); + + } + + // ======== End fast-path formating logic for double ========================= + /** * Complete the formatting of a finite number. On entry, the digitList must * be filled in with the correct digits. @@ -1168,8 +1898,7 @@ if (isNegative) { append(result, negativeSuffix, delegate, getNegativeSuffixFieldPositions(), Field.SIGN); - } - else { + } else { append(result, positiveSuffix, delegate, getPositiveSuffixFieldPositions(), Field.SIGN); } @@ -1557,8 +2286,7 @@ sawExponent = true; } break; // Whether we fail or succeed, we exit this loop - } - else { + } else { break; } } @@ -1653,6 +2381,7 @@ // don't allow multiple references symbols = (DecimalFormatSymbols) newSymbols.clone(); expandAffixes(); + fastPathCheckNeeded = true; } catch (Exception foo) { // should never happen } @@ -1674,6 +2403,7 @@ positivePrefix = newValue; posPrefixPattern = null; positivePrefixFieldPositions = null; + fastPathCheckNeeded = true; } /** @@ -1688,8 +2418,7 @@ if (positivePrefixFieldPositions == null) { if (posPrefixPattern != null) { positivePrefixFieldPositions = expandAffix(posPrefixPattern); - } - else { + } else { positivePrefixFieldPositions = EmptyFieldPositionArray; } } @@ -1711,6 +2440,7 @@ public void setNegativePrefix (String newValue) { negativePrefix = newValue; negPrefixPattern = null; + fastPathCheckNeeded = true; } /** @@ -1725,8 +2455,7 @@ if (negativePrefixFieldPositions == null) { if (negPrefixPattern != null) { negativePrefixFieldPositions = expandAffix(negPrefixPattern); - } - else { + } else { negativePrefixFieldPositions = EmptyFieldPositionArray; } } @@ -1748,6 +2477,7 @@ public void setPositiveSuffix (String newValue) { positiveSuffix = newValue; posSuffixPattern = null; + fastPathCheckNeeded = true; } /** @@ -1762,8 +2492,7 @@ if (positiveSuffixFieldPositions == null) { if (posSuffixPattern != null) { positiveSuffixFieldPositions = expandAffix(posSuffixPattern); - } - else { + } else { positiveSuffixFieldPositions = EmptyFieldPositionArray; } } @@ -1785,6 +2514,7 @@ public void setNegativeSuffix (String newValue) { negativeSuffix = newValue; negSuffixPattern = null; + fastPathCheckNeeded = true; } /** @@ -1799,8 +2529,7 @@ if (negativeSuffixFieldPositions == null) { if (negSuffixPattern != null) { negativeSuffixFieldPositions = expandAffix(negSuffixPattern); - } - else { + } else { negativeSuffixFieldPositions = EmptyFieldPositionArray; } } @@ -1834,6 +2563,16 @@ multiplier = newValue; bigDecimalMultiplier = null; bigIntegerMultiplier = null; + fastPathCheckNeeded = true; + } + + /** + * {@inheritDoc} + */ + @Override + public void setGroupingUsed(boolean newValue) { + super.setGroupingUsed(newValue); + fastPathCheckNeeded = true; } /** @@ -1860,6 +2599,7 @@ */ public void setGroupingSize (int newValue) { groupingSize = (byte)newValue; + fastPathCheckNeeded = true; } /** @@ -1878,6 +2618,7 @@ */ public void setDecimalSeparatorAlwaysShown(boolean newValue) { decimalSeparatorAlwaysShown = newValue; + fastPathCheckNeeded = true; } /** @@ -1908,6 +2649,20 @@ DecimalFormat other = (DecimalFormat) super.clone(); other.symbols = (DecimalFormatSymbols) symbols.clone(); other.digitList = (DigitList) digitList.clone(); + + // Fast-path is almost stateless algorithm. The only logical state is the + // isFastPath flag. In addition fastPathCheckNeeded is a sentinel flag + // that forces recalculation of all fast-path fields when set to true. + // + // There is thus no need to clone all the fast-path fields. + // We just only need to set fastPathCheckNeeded to true when cloning, + // and init fastPathData to null as if it were a truly new instance. + // Every fast-path field will be recalculated (only once) at next usage of + // fast-path algorithm. + other.fastPathCheckNeeded = true; + other.isFastPath = false; + other.fastPathData = null; + return other; } @@ -1917,8 +2672,10 @@ @Override public boolean equals(Object obj) { - if (obj == null) return false; - if (!super.equals(obj)) return false; // super does class check + if (obj == null) + return false; + if (!super.equals(obj)) + return false; // super does class check DecimalFormat other = (DecimalFormat) obj; return ((posPrefixPattern == other.posPrefixPattern && positivePrefix.equals(other.positivePrefix)) @@ -2206,8 +2963,7 @@ || affix.indexOf(symbols.getPatternSeparator()) >= 0 || affix.indexOf(symbols.getMinusSign()) >= 0 || affix.indexOf(CURRENCY_SIGN) >= 0; - } - else { + } else { needQuote = affix.indexOf(PATTERN_ZERO_DIGIT) >= 0 || affix.indexOf(PATTERN_GROUPING_SEPARATOR) >= 0 || affix.indexOf(PATTERN_DECIMAL_SEPARATOR) >= 0 @@ -2694,6 +3450,7 @@ super.setMinimumIntegerDigits((minimumIntegerDigits > DOUBLE_INTEGER_DIGITS) ? DOUBLE_INTEGER_DIGITS : minimumIntegerDigits); } + fastPathCheckNeeded = true; } /** @@ -2714,6 +3471,7 @@ super.setMaximumIntegerDigits((maximumIntegerDigits > DOUBLE_INTEGER_DIGITS) ? DOUBLE_INTEGER_DIGITS : maximumIntegerDigits); } + fastPathCheckNeeded = true; } /** @@ -2734,6 +3492,7 @@ super.setMinimumFractionDigits((minimumFractionDigits > DOUBLE_FRACTION_DIGITS) ? DOUBLE_FRACTION_DIGITS : minimumFractionDigits); } + fastPathCheckNeeded = true; } /** @@ -2754,6 +3513,7 @@ super.setMaximumFractionDigits((maximumFractionDigits > DOUBLE_FRACTION_DIGITS) ? DOUBLE_FRACTION_DIGITS : maximumFractionDigits); } + fastPathCheckNeeded = true; } /** @@ -2843,6 +3603,7 @@ expandAffixes(); } } + fastPathCheckNeeded = true; } /** @@ -2873,6 +3634,7 @@ this.roundingMode = roundingMode; digitList.setRoundingMode(roundingMode); + fastPathCheckNeeded = true; } /** @@ -2924,9 +3686,18 @@ stream.defaultReadObject(); digitList = new DigitList(); + // We force complete fast-path reinitialization when the instance is + // deserialized. See clone() comment on fastPathCheckNeeded. + fastPathCheckNeeded = true; + isFastPath = false; + fastPathData = null; + if (serialVersionOnStream < 4) { setRoundingMode(RoundingMode.HALF_EVEN); + } else { + setRoundingMode(getRoundingMode()); } + // We only need to check the maximum counts because NumberFormat // .readObject has already ensured that the maximum is greater than the // minimum count. @@ -3195,6 +3966,77 @@ */ private RoundingMode roundingMode = RoundingMode.HALF_EVEN; + // ------ DecimalFormat fields for fast-path for double algorithm ------ + + /** + * Helper inner utility class for storing the data used in the fast-path + * algorithm. Almost all fields related to fast-path are encapsulated in + * this class. + * + * Any {@code DecimalFormat} instance has a {@code fastPathData} + * reference field that is null unless both the properties of the instance + * are such that the instance is in the "fast-path" state, and a format call + * has been done at least once while in this state. + * + * Almost all fields are related to the "fast-path" state only and don't + * change until one of the instance properties is changed. + * + * {@code firstUsedIndex} and {@code lastFreeIndex} are the only + * two fields that are used and modified while inside a call to + * {@code fastDoubleFormat}. + * + */ + private static class FastPathData { + // --- Temporary fields used in fast-path, shared by several methods. + + /** The first unused index at the end of the formatted result. */ + int lastFreeIndex; + + /** The first used index at the beginning of the formatted result */ + int firstUsedIndex; + + // --- State fields related to fast-path status. Changes due to a + // property change only. Set by checkAndSetFastPathStatus() only. + + /** Difference between locale zero and default zero representation. */ + int zeroDelta; + + /** Locale char for grouping separator. */ + char groupingChar; + + /** Fixed index position of last integral digit of formatted result */ + int integralLastIndex; + + /** Fixed index position of first fractional digit of formatted result */ + int fractionalFirstIndex; + + /** Fractional constants depending on decimal|currency state */ + double fractionalScaleFactor; + int fractionalMaxIntBound; + + + /** The char array buffer that will contain the formatted result */ + char[] fastPathContainer; + + /** Suffixes recorded as char array for efficiency. */ + char[] charsPositivePrefix; + char[] charsNegativePrefix; + char[] charsPositiveSuffix; + char[] charsNegativeSuffix; + boolean positiveAffixesRequired = true; + boolean negativeAffixesRequired = true; + } + + /** The format fast-path status of the instance. Logical state. */ + private transient boolean isFastPath = false; + + /** Flag stating need of check and reinit fast-path status on next format call. */ + private transient boolean fastPathCheckNeeded = true; + + /** DecimalFormat reference to its FastPathData */ + private transient FastPathData fastPathData; + + //---------------------------------------------------------------------- static final int currentSerialVersion = 4; @@ -3228,6 +4070,54 @@ // CONSTANTS //---------------------------------------------------------------------- + // ------ Fast-Path for double Constants ------ + + /** Maximum valid integer value for applying fast-path algorithm */ + private static final double MAX_INT_AS_DOUBLE = (double) Integer.MAX_VALUE; + + /** + * The digit arrays used in the fast-path methods for collecting digits. + * Using 3 constants arrays of chars ensures a very fast collection of digits + */ + private static class DigitArrays { + static final char[] DigitOnes1000 = new char[1000]; + static final char[] DigitTens1000 = new char[1000]; + static final char[] DigitHundreds1000 = new char[1000]; + + // initialize on demand holder class idiom for arrays of digits + static { + int tenIndex = 0; + int hundredIndex = 0; + char digitOne = '0'; + char digitTen = '0'; + char digitHundred = '0'; + for (int i = 0; i < 1000; i++ ) { + + DigitOnes1000[i] = digitOne; + if (digitOne == '9') + digitOne = '0'; + else + digitOne++; + + DigitTens1000[i] = digitTen; + if (i == (tenIndex + 9)) { + tenIndex += 10; + if (digitTen == '9') + digitTen = '0'; + else + digitTen++; + } + + DigitHundreds1000[i] = digitHundred; + if (i == (hundredIndex + 99)) { + digitHundred++; + hundredIndex += 100; + } + } + } + } + // ------ Fast-Path for double Constants end ------ + // Constants for characters used in programmatic (unlocalized) patterns. private static final char PATTERN_ZERO_DIGIT = '0'; private static final char PATTERN_GROUPING_SEPARATOR = ',';
--- a/jdk/src/share/classes/java/text/DigitList.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/text/DigitList.java Thu Oct 11 16:59:50 2012 -0700 @@ -62,7 +62,7 @@ * derived by placing all the digits of the list to the right of the * decimal point, by 10^exponent. * - * @see Locale + * @see java.util.Locale * @see Format * @see NumberFormat * @see DecimalFormat
--- a/jdk/src/share/classes/java/text/Format.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/text/Format.java Thu Oct 11 16:59:50 2012 -0700 @@ -370,7 +370,7 @@ * Delegates should NOT assume that the <code>Format</code> will notify * the delegate of fields in any particular order. * - * @see FieldPosition.Delegate + * @see FieldPosition#getFieldDelegate * @see CharacterIteratorFieldDelegate */ interface FieldDelegate {
--- a/jdk/src/share/classes/java/text/NumberFormat.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/text/NumberFormat.java Thu Oct 11 16:59:50 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -286,10 +286,21 @@ * @see java.text.Format#format */ public final String format(double number) { + // Use fast-path for double result if that works + String result = fastFormat(number); + if (result != null) + return result; + return format(number, new StringBuffer(), DontCareFieldPosition.INSTANCE).toString(); } + /* + * fastFormat() is supposed to be implemented in concrete subclasses only. + * Default implem always returns null. + */ + String fastFormat(double number) { return null; } + /** * Specialization of format. * @exception ArithmeticException if rounding is needed with rounding
--- a/jdk/src/share/classes/java/text/RBCollationTables.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/text/RBCollationTables.java Thu Oct 11 16:59:50 2012 -0700 @@ -192,13 +192,12 @@ * * @see CollationElementIterator#getMaxExpansion */ - int getMaxExpansion(int order) - { + int getMaxExpansion(int order) { int result = 1; if (expandTable != null) { // Right now this does a linear search through the entire - // expandsion table. If a collator had a large number of expansions, + // expansion table. If a collator had a large number of expansions, // this could cause a performance problem, but in practise that // rarely happens for (int i = 0; i < expandTable.size(); i++) { @@ -215,20 +214,19 @@ } /** - * Get the entry of hash table of the expanding string in the collation - * table. - * @param idx the index of the expanding string value list + * Get the entry of hash table of the expanding string in the collation + * table. + * @param idx the index of the expanding string value list */ - final int[] getExpandValueList(int order) { - return expandTable.elementAt(order - EXPANDCHARINDEX); + final int[] getExpandValueList(int idx) { + return expandTable.elementAt(idx - EXPANDCHARINDEX); } /** - * Get the comarison order of a character from the collation table. - * @return the comparison order of a character. + * Get the comarison order of a character from the collation table. + * @return the comparison order of a character. */ - int getUnicodeOrder(int ch) - { + int getUnicodeOrder(int ch) { return mapping.elementAt(ch); }
--- a/jdk/src/share/classes/java/text/RBTableBuilder.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/text/RBTableBuilder.java Thu Oct 11 16:59:50 2012 -0700 @@ -71,7 +71,7 @@ * This is the main function that actually builds the tables and * stores them back in the RBCollationTables object. It is called * ONLY by the RBCollationTables constructor. - * @see java.util.RuleBasedCollator#RuleBasedCollator + * @see RuleBasedCollator#RuleBasedCollator * @exception ParseException If the rules format is incorrect. */
--- a/jdk/src/share/classes/java/text/SimpleDateFormat.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/text/SimpleDateFormat.java Thu Oct 11 16:59:50 2012 -0700 @@ -1787,7 +1787,7 @@ * timeFields. Returns -start (for ParsePosition) if failed. * @param text the time text to be parsed. * @param start where to start parsing. - * @param ch the pattern character for the date field text to be parsed. + * @param patternCharIndex the index of the pattern character. * @param count the count of a pattern character. * @param obeyCount if true, then the next field directly abuts this one, * and we should use the count to know when to stop parsing.
--- a/jdk/src/share/classes/java/util/Calendar.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/util/Calendar.java Thu Oct 11 16:59:50 2012 -0700 @@ -1788,7 +1788,6 @@ * * @return a bit mask of selected fields * @see #isExternallySet(int) - * @see #setInternallySetState(int) */ final int selectFields() { // This implementation has been taken from the GregorianCalendar class.
--- a/jdk/src/share/classes/java/util/Currency.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/util/Currency.java Thu Oct 11 16:59:50 2012 -0700 @@ -665,7 +665,7 @@ * * @param pattern regex pattern for the properties * @param ctry country code - * @param data currency data. This is a comma separated string that + * @param curdata currency data. This is a comma separated string that * consists of "three-letter alphabet code", "three-digit numeric code", * and "one-digit (0,1,2, or 3) default fraction digit". * For example, "JPZ,392,0".
--- a/jdk/src/share/classes/java/util/Formatter.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/util/Formatter.java Thu Oct 11 16:59:50 2012 -0700 @@ -918,7 +918,7 @@ * <p> If the {@code '0'} flag is given then the output will be padded * with leading zeros to the field width following any indication of sign. * - * <p> If {@code '('}, {@code '+'}, '  ', or {@code ','} flags + * <p> If {@code '('}, {@code '+'}, ' ', or {@code ','} flags * are given then a {@link FormatFlagsConversionMismatchException} will be * thrown. *
--- a/jdk/src/share/classes/java/util/JapaneseImperialCalendar.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/util/JapaneseImperialCalendar.java Thu Oct 11 16:59:50 2012 -0700 @@ -1932,7 +1932,7 @@ * Computes the fixed date under either the Gregorian or the * Julian calendar, using the given year and the specified calendar fields. * - * @param cal the CalendarSystem to be used for the date calculation + * @param era era index * @param year the normalized year number, with 0 indicating the * year 1 BCE, -1 indicating 2 BCE, etc. * @param fieldMask the calendar fields to be used for the date calculation @@ -2141,7 +2141,7 @@ * Returns the length of the specified month in the specified * Gregorian year. The year number must be normalized. * - * @see #isLeapYear(int) + * @see GregorianCalendar#isLeapYear(int) */ private int monthLength(int month, int gregorianYear) { return CalendarUtils.isGregorianLeapYear(gregorianYear) ? @@ -2152,7 +2152,7 @@ * Returns the length of the specified month in the year provided * by internalGet(YEAR). * - * @see #isLeapYear(int) + * @see GregorianCalendar#isLeapYear(int) */ private int monthLength(int month) { assert jdate.isNormalized();
--- a/jdk/src/share/classes/java/util/JumboEnumSet.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/util/JumboEnumSet.java Thu Oct 11 16:59:50 2012 -0700 @@ -345,7 +345,7 @@ * the same size, and every member of the given set is contained in * this set. * - * @param e object to be compared for equality with this set + * @param o object to be compared for equality with this set * @return <tt>true</tt> if the specified object is equal to this set */ public boolean equals(Object o) {
--- a/jdk/src/share/classes/java/util/Locale.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/util/Locale.java Thu Oct 11 16:59:50 2012 -0700 @@ -55,6 +55,7 @@ import sun.util.locale.InternalLocaleBuilder; import sun.util.locale.LanguageTag; import sun.util.locale.LocaleExtensions; +import sun.util.locale.LocaleMatcher; import sun.util.locale.LocaleObjectCache; import sun.util.locale.LocaleSyntaxException; import sun.util.locale.LocaleUtils; @@ -71,10 +72,11 @@ * according to the customs and conventions of the user's native country, * region, or culture. * - * <p> The <code>Locale</code> class implements identifiers - * interchangeable with BCP 47 (IETF BCP 47, "Tags for Identifying - * Languages"), with support for the LDML (UTS#35, "Unicode Locale - * Data Markup Language") BCP 47-compatible extensions for locale data + * <p> The {@code Locale} class implements IETF BCP 47 which is composed of + * <a href="http://tools.ietf.org/html/rfc4647">RFC 4647 "Matching of Language + * Tags"</a> and <a href="http://tools.ietf.org/html/rfc5646">RFC 5646 "Tags + * for Identifying Languages"</a> with support for the LDML (UTS#35, "Unicode + * Locale Data Markup Language") BCP 47-compatible extensions for locale data * exchange. * * <p> A <code>Locale</code> object logically consists of the fields @@ -267,6 +269,77 @@ * </pre> * </blockquote> * + * <h4><a name="LocaleMatching">Locale Matching</a></h4> + * + * <p>If an application or a system is internationalized and provides localized + * resources for multiple locales, it sometimes needs to find one or more + * locales (or language tags) which meet each user's specific preferences. Note + * that a term "language tag" is used interchangeably with "locale" in this + * locale matching documentation. + * + * <p>In order to do matching a user's preferred locales to a set of language + * tags, <a href="http://tools.ietf.org/html/rfc4647">RFC 4647 Matching of + * Language Tags</a> defines two mechanisms: filtering and lookup. + * <em>Filtering</em> is used to get all matching locales, whereas + * <em>lookup</em> is to choose the best matching locale. + * Matching is done case-insensitively. These matching mechanisms are described + * in the following sections. + * + * <p>A user's preference is called a <em>Language Priority List</em> and is + * expressed as a list of language ranges. There are syntactically two types of + * language ranges: basic and extended. See + * {@link Locale.LanguageRange Locale.LanguageRange} for details. + * + * <h5>Filtering</h5> + * + * <p>The filtering operation returns all matching language tags. It is defined + * in RFC 4647 as follows: + * "In filtering, each language range represents the least specific language + * tag (that is, the language tag with fewest number of subtags) that is an + * acceptable match. All of the language tags in the matching set of tags will + * have an equal or greater number of subtags than the language range. Every + * non-wildcard subtag in the language range will appear in every one of the + * matching language tags." + * + * <p>There are two types of filtering: filtering for basic language ranges + * (called "basic filtering") and filtering for extended language ranges + * (called "extended filtering"). They may return different results by what + * kind of language ranges are included in the given Language Priority List. + * {@link Locale.FilteringMode} is a parameter to specify how filtering should + * be done. + * + * <h5>Lookup</h5> + * + * <p>The lookup operation returns the best matching language tags. It is + * defined in RFC 4647 as follows: + * "By contrast with filtering, each language range represents the most + * specific tag that is an acceptable match. The first matching tag found, + * according to the user's priority, is considered the closest match and is the + * item returned." + * + * <p>For example, if a Language Priority List consists of two language ranges, + * {@code "zh-Hant-TW"} and {@code "en-US"}, in prioritized order, lookup + * method progressively searches the language tags below in order to find the + * best matching language tag. + * <blockquote> + * <pre> + * 1. zh-Hant-TW + * 2. zh-Hant + * 3. zh + * 4. en-US + * 5. en + * </pre> + * </blockquote> + * If there is a language tag which matches completely to a language range + * above, the language tag is returned. + * + * <p>{@code "*"} is the special language range, and it is ignored in lookup. + * + * <p>If multiple language tags match as a result of the subtag {@code '*'} + * included in a language range, the first matching language tag returned by + * an {@link Iterator} over a {@link Collection} of language tags is treated as + * the best matching one. + * * <h4>Use of Locale</h4> * * <p>Once you've created a <code>Locale</code> you can query it for information @@ -1419,7 +1492,7 @@ * // returns "ja-JP-u-ca-japanese-x-lvariant-JP" * Locale.forLanguageTag("th-TH-x-lvariant-TH").toLanguageTag(); * // returns "th-TH-u-nu-thai-x-lvariant-TH" - * <pre></ul> + * </pre></ul> * * <p>This implements the 'Language-Tag' production of BCP47, and * so supports grandfathered (regular and irregular) as well as @@ -2070,7 +2143,7 @@ * @param in the <code>ObjectInputStream</code> to read * @throws IOException * @throws ClassNotFoundException - * @throws IllformdLocaleException + * @throws IllformedLocaleException * @since 1.7 */ private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { @@ -2574,4 +2647,611 @@ return Locale.getInstance(baseloc, extensions); } } + + /** + * This enum provides constants to select a filtering mode for locale + * matching. Refer to <a href="http://tools.ietf.org/html/rfc4647">RFC 4647 + * Matching of Language Tags</a> for details. + * + * <p>As an example, think of two Language Priority Lists each of which + * includes only one language range and a set of following language tags: + * + * <pre> + * de (German) + * de-DE (German, Germany) + * de-Deva (German, in Devanagari script) + * de-Deva-DE (German, in Devanagari script, Germany) + * de-DE-1996 (German, Germany, orthography of 1996) + * de-Latn-DE (German, in Latin script, Germany) + * de-Latn-DE-1996 (German, in Latin script, Germany, orthography of 1996) + * </pre> + * + * The filtering method will behave as follows: + * + * <table cellpadding=2> + * <tr> + * <th>Filtering Mode</th> + * <th>Language Priority List: {@code "de-DE"}</th> + * <th>Language Priority List: {@code "de-*-DE"}</th> + * </tr> + * <tr> + * <td valign=top> + * {@link FilteringMode#AUTOSELECT_FILTERING AUTOSELECT_FILTERING} + * </td> + * <td valign=top> + * Performs <em>basic</em> filtering and returns {@code "de-DE"} and + * {@code "de-DE-1996"}. + * </td> + * <td valign=top> + * Performs <em>extended</em> filtering and returns {@code "de-DE"}, + * {@code "de-Deva-DE"}, {@code "de-DE-1996"}, {@code "de-Latn-DE"}, and + * {@code "de-Latn-DE-1996"}. + * </td> + * </tr> + * <tr> + * <td valign=top> + * {@link FilteringMode#EXTENDED_FILTERING EXTENDED_FILTERING} + * </td> + * <td valign=top> + * Performs <em>extended</em> filtering and returns {@code "de-DE"}, + * {@code "de-Deva-DE"}, {@code "de-DE-1996"}, {@code "de-Latn-DE"}, and + * {@code "de-Latn-DE-1996"}. + * </td> + * <td valign=top>Same as above.</td> + * </tr> + * <tr> + * <td valign=top> + * {@link FilteringMode#IGNORE_EXTENDED_RANGES IGNORE_EXTENDED_RANGES} + * </td> + * <td valign=top> + * Performs <em>basic</em> filtering and returns {@code "de-DE"} and + * {@code "de-DE-1996"}. + * </td> + * <td valign=top> + * Performs <em>basic</em> filtering and returns {@code null} because + * nothing matches. + * </td> + * </tr> + * <tr> + * <td valign=top> + * {@link FilteringMode#MAP_EXTENDED_RANGES MAP_EXTENDED_RANGES} + * </td> + * <td valign=top>Same as above.</td> + * <td valign=top> + * Performs <em>basic</em> filtering and returns {@code "de-DE"} and + * {@code "de-DE-1996"} because {@code "de-*-DE"} is mapped to + * {@code "de-DE"}. + * </td> + * </tr> + * <tr> + * <td valign=top> + * {@link FilteringMode#REJECT_EXTENDED_RANGES REJECT_EXTENDED_RANGES} + * </td> + * <td valign=top>Same as above.</td> + * <td valign=top> + * Throws {@link IllegalArgumentException} because {@code "de-*-DE"} is + * not a valid basic language range. + * </td> + * </tr> + * </table> + * + * @see #filter(List, Collection, FilteringMode) + * @see #filterTags(List, Collection, FilteringMode) + * + * @since 1.8 + */ + public static enum FilteringMode { + /** + * Specifies automatic filtering mode based on the given Language + * Priority List consisting of language ranges. If all of the ranges + * are basic, basic filtering is selected. Otherwise, extended + * filtering is selected. + */ + AUTOSELECT_FILTERING, + + /** + * Specifies extended filtering. + */ + EXTENDED_FILTERING, + + /** + * Specifies basic filtering: Note that any extended language ranges + * included in the given Language Priority List are ignored. + */ + IGNORE_EXTENDED_RANGES, + + /** + * Specifies basic filtering: If any extended language ranges are + * included in the given Language Priority List, they are mapped to the + * basic language range. Specifically, a language range starting with a + * subtag {@code "*"} is treated as a language range {@code "*"}. For + * example, {@code "*-US"} is treated as {@code "*"}. If {@code "*"} is + * not the first subtag, {@code "*"} and extra {@code "-"} are removed. + * For example, {@code "ja-*-JP"} is mapped to {@code "ja-JP"}. + */ + MAP_EXTENDED_RANGES, + + /** + * Specifies basic filtering: If any extended language ranges are + * included in the given Language Priority List, the list is rejected + * and the filtering method throws {@link IllegalArgumentException}. + */ + REJECT_EXTENDED_RANGES + }; + + /** + * This class expresses a <em>Language Range</em> defined in + * <a href="http://tools.ietf.org/html/rfc4647">RFC 4647 Matching of + * Language Tags</a>. A language range is an identifier which is used to + * select language tag(s) meeting specific requirements by using the + * mechanisms described in <a href="Locale.html#LocaleMatching">Locale + * Matching</a>. A list which represents a user's preferences and consists + * of language ranges is called a <em>Language Priority List</em>. + * + * <p>There are two types of language ranges: basic and extended. In RFC + * 4647, the syntax of language ranges is expressed in + * <a href="http://tools.ietf.org/html/rfc4234">ABNF</a> as follows: + * <blockquote> + * <pre> + * basic-language-range = (1*8ALPHA *("-" 1*8alphanum)) / "*" + * extended-language-range = (1*8ALPHA / "*") + * *("-" (1*8alphanum / "*")) + * alphanum = ALPHA / DIGIT + * </pre> + * </blockquote> + * For example, {@code "en"} (English), {@code "ja-JP"} (Japanese, Japan), + * {@code "*"} (special language range which matches any language tag) are + * basic language ranges, whereas {@code "*-CH"} (any languages, + * Switzerland), {@code "es-*"} (Spanish, any regions), and + * {@code "zh-Hant-*"} (Traditional Chinese, any regions) are extended + * language ranges. + * + * @see #filter + * @see #filterTags + * @see #lookup + * @see #lookupTag + * + * @since 1.8 + */ + public static final class LanguageRange { + + /** + * A constant holding the maximum value of weight, 1.0, which indicates + * that the language range is a good fit for the user. + */ + public static final double MAX_WEIGHT = 1.0; + + /** + * A constant holding the minimum value of weight, 0.0, which indicates + * that the language range is not a good fit for the user. + */ + public static final double MIN_WEIGHT = 0.0; + + private final String range; + private final double weight; + + private volatile int hash = 0; + + /** + * Constructs a {@code LanguageRange} using the given {@code range}. + * Note that no validation is done against the IANA Language Subtag + * Registry at time of construction. + * + * <p>This is equivalent to {@code LanguageRange(range, MAX_WEIGHT)}. + * + * @param range a language range + * @throws NullPointerException if the given {@code range} is + * {@code null} + */ + public LanguageRange(String range) { + this(range, MAX_WEIGHT); + } + + /** + * Constructs a {@code LanguageRange} using the given {@code range} and + * {@code weight}. Note that no validation is done against the IANA + * Language Subtag Registry at time of construction. + * + * @param range a language range + * @param weight a weight value between {@code MIN_WEIGHT} and + * {@code MAX_WEIGHT} + * @throws NullPointerException if the given {@code range} is + * {@code null} + * @throws IllegalArgumentException if the given {@code weight} is less + * than {@code MIN_WEIGHT} or greater than {@code MAX_WEIGHT} + */ + public LanguageRange(String range, double weight) { + if (range == null) { + throw new NullPointerException(); + } + if (weight < MIN_WEIGHT || weight > MAX_WEIGHT) { + throw new IllegalArgumentException("weight=" + weight); + } + + range = range.toLowerCase(); + + // Do syntax check. + boolean isIllFormed = false; + String[] subtags = range.split("-"); + if (isSubtagIllFormed(subtags[0], true) + || range.endsWith("-")) { + isIllFormed = true; + } else { + for (int i = 1; i < subtags.length; i++) { + if (isSubtagIllFormed(subtags[i], false)) { + isIllFormed = true; + } + break; + } + } + if (isIllFormed) { + throw new IllegalArgumentException("range=" + range); + } + + this.range = range; + this.weight = weight; + } + + private static boolean isSubtagIllFormed(String subtag, + boolean isFirstSubtag) { + if (subtag.equals("") || subtag.length() > 8) { + return true; + } else if (subtag.equals("*")) { + return false; + } + char[] charArray = subtag.toCharArray(); + if (isFirstSubtag) { // ALPHA + for (char c : charArray) { + if (c < 'a' || c > 'z') { + return true; + } + } + } else { // ALPHA / DIGIT + for (char c : charArray) { + if (c < '0' || (c > '9' && c < 'a') || c > 'z') { + return true; + } + } + } + return false; + } + + /** + * Returns the language range of this {@code LanguageRange}. + * + * @return the language range. + */ + public String getRange() { + return range; + } + + /** + * Returns the weight of this {@code LanguageRange}. + * + * @return the weight value. + */ + public double getWeight() { + return weight; + } + + /** + * Parses the given {@code ranges} to generate a Language Priority List. + * + * <p>This method performs a syntactic check for each language range in + * the given {@code ranges} but doesn't do validation using the IANA + * Language Subtag Registry. + * + * <p>The {@code ranges} to be given can take one of the following + * forms: + * + * <pre> + * "Accept-Language: ja,en;q=0.4" (weighted list with Accept-Language prefix) + * "ja,en;q=0.4" (weighted list) + * "ja,en" (prioritized list) + * </pre> + * + * In a weighted list, each language range is given a weight value. + * The weight value is identical to the "quality value" in + * <a href="http://tools.ietf.org/html/rfc2616">RFC 2616</a>, and it + * expresses how much the user prefers the language. A weight value is + * specified after a corresponding language range followed by + * {@code ";q="}, and the default weight value is {@code MAX_WEIGHT} + * when it is omitted. + * + * <p>Unlike a weighted list, language ranges in a prioritized list + * are sorted in the descending order based on its priority. The first + * language range has the highest priority and meets the user's + * preference most. + * + * <p>In either case, language ranges are sorted in descending order in + * the Language Priority List based on priority or weight. If a + * language range appears in the given {@code ranges} more than once, + * only the first one is included on the Language Priority List. + * + * <p>The returned list consists of language ranges from the given + * {@code ranges} and their equivalents found in the IANA Language + * Subtag Registry. For example, if the given {@code ranges} is + * {@code "Accept-Language: iw,en-us;q=0.7,en;q=0.3"}, the elements in + * the list to be returned are: + * + * <pre> + * <b>Range</b> <b>Weight</b> + * "iw" (older tag for Hebrew) 1.0 + * "he" (new preferred code for Hebrew) 1.0 + * "en-us" (English, United States) 0.7 + * "en" (English) 0.3 + * </pre> + * + * Two language ranges, {@code "iw"} and {@code "he"}, have the same + * highest priority in the list. By adding {@code "he"} to the user's + * Language Priority List, locale-matching method can find Hebrew as a + * matching locale (or language tag) even if the application or system + * offers only {@code "he"} as a supported locale (or language tag). + * + * @param ranges a list of comma-separated language ranges or a list of + * language ranges in the form of the "Accept-Language" header + * defined in <a href="http://tools.ietf.org/html/rfc2616">RFC + * 2616</a> + * @return a Language Priority List consisting of language ranges + * included in the given {@code ranges} and their equivalent + * language ranges if available. The list is modifiable. + * @throws NullPointerException if {@code ranges} is null + * @throws IllegalArgumentException if a language range or a weight + * found in the given {@code ranges} is ill-formed + */ + public static List<LanguageRange> parse(String ranges) { + return LocaleMatcher.parse(ranges); + } + + /** + * Parses the given {@code ranges} to generate a Language Priority + * List, and then customizes the list using the given {@code map}. + * This method is equivalent to + * {@code mapEquivalents(parse(ranges), map)}. + * + * @param ranges a list of comma-separated language ranges or a list + * of language ranges in the form of the "Accept-Language" header + * defined in <a href="http://tools.ietf.org/html/rfc2616">RFC + * 2616</a> + * @param map a map containing information to customize language ranges + * @return a Language Priority List with customization. The list is + * @throws NullPointerException if {@code ranges} is null + * @throws IllegalArgumentException if a language range or a weight + * found in the given {@code ranges} is ill-formed + * @see #parse(String) + * @see #mapEquivalents + */ + public static List<LanguageRange> parse(String ranges, + Map<String, List<String>> map) { + return mapEquivalents(parse(ranges), map); + } + + /** + * Generates a new customized Language Priority List using the given + * {@code priorityList} and {@code map}. If the given {@code map} is + * empty, this method returns a copy of the given {@code priorityList}. + * + * <p>In the map, a key represents a language range whereas a value is + * a list of equivalents of it. {@code '*'} cannot be used in the map. + * Each equivalent language range has the same weight value as its + * original language range. + * + * <pre> + * An example of map: + * <b>Key</b> <b>Value</b> + * "zh" (Chinese) "zh", + * "zh-Hans"(Simplified Chinese) + * "zh-HK" (Chinese, Hong Kong) "zh-HK" + * "zh-TW" (Chinese, Taiwan) "zh-TW" + * </pre> + * + * The customization is performed after modification using the IANA + * Language Subtag Registry. + * + * <p>For example, if a user's Language Priority List consists of five + * language ranges ({@code "zh"}, {@code "zh-CN"}, {@code "en"}, + * {@code "zh-TW"}, and {@code "zh-HK"}), the newly generated Language + * Priority List which is customized using the above map example will + * consists of {@code "zh"}, {@code "zh-Hans"}, {@code "zh-CN"}, + * {@code "zh-Hans-CN"}, {@code "en"}, {@code "zh-TW"}, and + * {@code "zh-HK"}. + * + * <p>{@code "zh-HK"} and {@code "zh-TW"} aren't converted to + * {@code "zh-Hans-HK"} nor {@code "zh-Hans-TW"} even if they are + * included in the Language Priority List. In this example, mapping + * is used to clearly distinguish Simplified Chinese and Traditional + * Chinese. + * + * <p>If the {@code "zh"}-to-{@code "zh"} mapping isn't included in the + * map, a simple replacement will be performed and the customized list + * won't include {@code "zh"} and {@code "zh-CN"}. + * + * @param priorityList user's Language Priority List + * @param map a map containing information to customize language ranges + * @return a new Language Priority List with customization. The list is + * modifiable. + * @throws NullPointerException if {@code priorityList} is {@code null} + * @see #parse(String, Map) + */ + public static List<LanguageRange> mapEquivalents( + List<LanguageRange>priorityList, + Map<String, List<String>> map) { + return LocaleMatcher.mapEquivalents(priorityList, map); + } + + /** + * Returns a hash code value for the object. + * + * @return a hash code value for this object. + */ + @Override + public int hashCode() { + if (hash == 0) { + int result = 17; + result = 37*result + range.hashCode(); + long bitsWeight = Double.doubleToLongBits(weight); + result = 37*result + (int)(bitsWeight ^ (bitsWeight >>> 32)); + hash = result; + } + return hash; + } + + /** + * Compares this object to the specified object. The result is true if + * and only if the argument is not {@code null} and is a + * {@code LanguageRange} object that contains the same {@code range} + * and {@code weight} values as this object. + * + * @param obj the object to compare with + * @return {@code true} if this object's {@code range} and + * {@code weight} are the same as the {@code obj}'s; {@code false} + * otherwise. + */ + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof LanguageRange)) { + return false; + } + LanguageRange other = (LanguageRange)obj; + return hash == other.hash + && range.equals(other.range) + && weight == other.weight; + } + } + + /** + * Returns a list of matching {@code Locale} instances using the filtering + * mechanism defined in RFC 4647. + * + * @param priorityList user's Language Priority List in which each language + * tag is sorted in descending order based on priority or weight + * @param locales {@code Locale} instances used for matching + * @param mode filtering mode + * @return a list of {@code Locale} instances for matching language tags + * sorted in descending order based on priority or weight, or an empty + * list if nothing matches. The list is modifiable. + * @throws NullPointerException if {@code priorityList} or {@code locales} + * is {@code null} + * @throws IllegalArgumentException if one or more extended language ranges + * are included in the given list when + * {@link FilteringMode#REJECT_EXTENDED_RANGES} is specified + * + * @since 1.8 + */ + public static List<Locale> filter(List<LanguageRange> priorityList, + Collection<Locale> locales, + FilteringMode mode) { + return LocaleMatcher.filter(priorityList, locales, mode); + } + + /** + * Returns a list of matching {@code Locale} instances using the filtering + * mechanism defined in RFC 4647. This is equivalent to + * {@link #filter(List, Collection, FilteringMode)} when {@code mode} is + * {@link FilteringMode#AUTOSELECT_FILTERING}. + * + * @param priorityList user's Language Priority List in which each language + * tag is sorted in descending order based on priority or weight + * @param locales {@code Locale} instances used for matching + * @return a list of {@code Locale} instances for matching language tags + * sorted in descending order based on priority or weight, or an empty + * list if nothing matches. The list is modifiable. + * @throws NullPointerException if {@code priorityList} or {@code locales} + * is {@code null} + * + * @since 1.8 + */ + public static List<Locale> filter(List<LanguageRange> priorityList, + Collection<Locale> locales) { + return filter(priorityList, locales, FilteringMode.AUTOSELECT_FILTERING); + } + + /** + * Returns a list of matching languages tags using the basic filtering + * mechanism defined in RFC 4647. + * + * @param priorityList user's Language Priority List in which each language + * tag is sorted in descending order based on priority or weight + * @param tags language tags + * @param mode filtering mode + * @return a list of matching language tags sorted in descending order + * based on priority or weight, or an empty list if nothing matches. + * The list is modifiable. + * @throws NullPointerException if {@code priorityList} or {@code tags} is + * {@code null} + * @throws IllegalArgumentException if one or more extended language ranges + * are included in the given list when + * {@link FilteringMode#REJECT_EXTENDED_RANGES} is specified + * + * @since 1.8 + */ + public static List<String> filterTags(List<LanguageRange> priorityList, + Collection<String> tags, + FilteringMode mode) { + return LocaleMatcher.filterTags(priorityList, tags, mode); + } + + /** + * Returns a list of matching languages tags using the basic filtering + * mechanism defined in RFC 4647. This is equivalent to + * {@link #filterTags(List, Collection, FilteringMode)} when {@code mode} + * is {@link FilteringMode#AUTOSELECT_FILTERING}. + * + * @param priorityList user's Language Priority List in which each language + * tag is sorted in descending order based on priority or weight + * @param tags language tags + * @return a list of matching language tags sorted in descending order + * based on priority or weight, or an empty list if nothing matches. + * The list is modifiable. + * @throws NullPointerException if {@code priorityList} or {@code tags} is + * {@code null} + * + * @since 1.8 + */ + public static List<String> filterTags(List<LanguageRange> priorityList, + Collection<String> tags) { + return filterTags(priorityList, tags, FilteringMode.AUTOSELECT_FILTERING); + } + + /** + * Returns a {@code Locale} instance for the best-matching language + * tag using the lookup mechanism defined in RFC 4647. + * + * @param priorityList user's Language Priority List in which each language + * tag is sorted in descending order based on priority or weight + * @param locales {@code Locale} instances used for matching + * @return the best matching <code>Locale</code> instance chosen based on + * priority or weight, or {@code null} if nothing matches. + * @throws NullPointerException if {@code priorityList} or {@code tags} is + * {@code null} + * + * @since 1.8 + */ + public static Locale lookup(List<LanguageRange> priorityList, + Collection<Locale> locales) { + return LocaleMatcher.lookup(priorityList, locales); + } + + /** + * Returns the best-matching language tag using the lookup mechanism + * defined in RFC 4647. + * + * @param priorityList user's Language Priority List in which each language + * tag is sorted in descending order based on priority or weight + * @param tags language tangs used for matching + * @return the best matching language tag chosen based on priority or + * weight, or {@code null} if nothing matches. + * @throws NullPointerException if {@code priorityList} or {@code tags} is + * {@code null} + * + * @since 1.8 + */ + public static String lookupTag(List<LanguageRange> priorityList, + Collection<String> tags) { + return LocaleMatcher.lookupTag(priorityList, tags); + } + }
--- a/jdk/src/share/classes/java/util/Properties.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/util/Properties.java Thu Oct 11 16:59:50 2012 -0700 @@ -34,7 +34,10 @@ import java.io.Writer; import java.io.OutputStreamWriter; import java.io.BufferedWriter; -import java.lang.reflect.*; +import java.security.AccessController; +import java.security.PrivilegedAction; + +import sun.util.spi.XmlPropertiesProvider; /** * The {@code Properties} class represents a persistent set of @@ -866,7 +869,7 @@ { if (in == null) throw new NullPointerException(); - XMLUtils.load(this, in); + XmlSupport.load(this, in); in.close(); } @@ -934,7 +937,7 @@ { if (os == null) throw new NullPointerException(); - XMLUtils.save(this, os, comment, encoding); + XmlSupport.save(this, os, comment, encoding); } /** @@ -1113,59 +1116,82 @@ '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' }; + /** + * Supporting class for loading/storing properties in XML format. + * + * <p> The {@code load} and {@code store} methods defined here delegate to a + * system-wide {@code XmlPropertiesProvider}. On first invocation of either + * method then the system-wide provider is located as follows: </p> + * + * <ol> + * <li> If the system property {@code sun.util.spi.XmlPropertiesProvider} + * is defined then it is taken to be the full-qualified name of a concrete + * provider class. The class is loaded with the system class loader as the + * initiating loader. If it cannot be loaded or instantiated using a zero + * argument constructor then an unspecified error is thrown. </li> + * + * <li> If the system property is not defined then the service-provider + * loading facility defined by the {@link ServiceLoader} class is used to + * locate a provider with the system class loader as the initiating + * loader and {@code sun.util.spi.XmlPropertiesProvider} as the service + * type. If this process fails then an unspecified error is thrown. If + * there is more than one service provider installed then it is + * not specified as to which provider will be used. </li> + * + * <li> If the provider is not found by the above means then a system + * default provider will be instantiated and used. </li> + * </ol> + */ + private static class XmlSupport { - private static class XMLUtils { - private static Method load = null; - private static Method save = null; - static { + private static XmlPropertiesProvider loadProviderFromProperty(ClassLoader cl) { + String cn = System.getProperty("sun.util.spi.XmlPropertiesProvider"); + if (cn == null) + return null; try { - // reference sun.util.xml.Utils reflectively - // to allow the Properties class be compiled in - // the absence of XML - Class<?> c = Class.forName("sun.util.xml.XMLUtils", true, null); - load = c.getMethod("load", Properties.class, InputStream.class); - save = c.getMethod("save", Properties.class, OutputStream.class, - String.class, String.class); - } catch (ClassNotFoundException cnf) { - throw new AssertionError(cnf); - } catch (NoSuchMethodException e) { - throw new AssertionError(e); + Class<?> c = Class.forName(cn, true, cl); + return (XmlPropertiesProvider)c.newInstance(); + } catch (ClassNotFoundException | + IllegalAccessException | + InstantiationException x) { + throw new ServiceConfigurationError(null, x); } } - static void invoke(Method m, Object... args) throws IOException { - try { - m.invoke(null, args); - } catch (IllegalAccessException e) { - throw new AssertionError(e); - } catch (InvocationTargetException e) { - Throwable t = e.getCause(); - if (t instanceof RuntimeException) - throw (RuntimeException)t; + private static XmlPropertiesProvider loadProviderAsService(ClassLoader cl) { + Iterator<XmlPropertiesProvider> iterator = + ServiceLoader.load(XmlPropertiesProvider.class, cl).iterator(); + return iterator.hasNext() ? iterator.next() : null; + } - if (t instanceof IOException) { - throw (IOException)t; - } else { - throw new AssertionError(t); - } - } + private static XmlPropertiesProvider loadProvider() { + return AccessController.doPrivileged( + new PrivilegedAction<XmlPropertiesProvider>() { + public XmlPropertiesProvider run() { + ClassLoader cl = ClassLoader.getSystemClassLoader(); + XmlPropertiesProvider provider = loadProviderFromProperty(cl); + if (provider != null) + return provider; + provider = loadProviderAsService(cl); + if (provider != null) + return provider; + throw new InternalError("No fallback"); + }}); } + private static final XmlPropertiesProvider PROVIDER = loadProvider(); + static void load(Properties props, InputStream in) throws IOException, InvalidPropertiesFormatException { - if (load == null) - throw new InternalError("sun.util.xml.XMLUtils not found"); - invoke(load, props, in); + PROVIDER.load(props, in); } static void save(Properties props, OutputStream os, String comment, String encoding) throws IOException { - if (save == null) - throw new InternalError("sun.util.xml.XMLUtils not found"); - invoke(save, props, os, comment, encoding); + PROVIDER.store(props, os, comment, encoding); } } }
--- a/jdk/src/share/classes/java/util/PropertyPermission.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/util/PropertyPermission.java Thu Oct 11 16:59:50 2012 -0700 @@ -130,18 +130,15 @@ * @param mask the actions mask to use. * */ - - private void init(int mask) - { - + private void init(int mask) { if ((mask & ALL) != mask) - throw new IllegalArgumentException("invalid actions mask"); + throw new IllegalArgumentException("invalid actions mask"); if (mask == NONE) - throw new IllegalArgumentException("invalid actions mask"); + throw new IllegalArgumentException("invalid actions mask"); if (getName() == null) - throw new NullPointerException("name can't be null"); + throw new NullPointerException("name can't be null"); this.mask = mask; } @@ -160,9 +157,7 @@ * @throws IllegalArgumentException if <code>name</code> is empty or if * <code>actions</code> is invalid. */ - - public PropertyPermission(String name, String actions) - { + public PropertyPermission(String name, String actions) { super(name,actions); init(getMask(actions)); } @@ -196,7 +191,6 @@ return ((this.mask & that.mask) == that.mask) && super.implies(that); } - /** * Checks two PropertyPermission objects for equality. Checks that <i>obj</i> is * a PropertyPermission, and has the same name and actions as this object. @@ -226,16 +220,14 @@ * * @return a hash code value for this object. */ - public int hashCode() { return this.getName().hashCode(); } - /** * Converts an actions String to an actions mask. * - * @param action the action string. + * @param actions the action string. * @return the actions mask. */ private static int getMask(String actions) { @@ -332,8 +324,7 @@ * * @return the canonical string representation of the actions. */ - static String getActions(int mask) - { + static String getActions(int mask) { StringBuilder sb = new StringBuilder(); boolean comma = false; @@ -359,8 +350,7 @@ * * @return the canonical string representation of the actions. */ - public String getActions() - { + public String getActions() { if (actions == null) actions = getActions(this.mask); @@ -373,7 +363,6 @@ * * @return the actions mask. */ - int getMask() { return mask; } @@ -386,7 +375,6 @@ * @return a new PermissionCollection object suitable for storing * PropertyPermissions. */ - public PermissionCollection newPermissionCollection() { return new PropertyPermissionCollection(); } @@ -436,7 +424,7 @@ * @serial include */ final class PropertyPermissionCollection extends PermissionCollection -implements Serializable + implements Serializable { /** @@ -454,10 +442,8 @@ private boolean all_allowed; /** - * Create an empty PropertyPermissions object. - * + * Create an empty PropertyPermissionCollection object. */ - public PropertyPermissionCollection() { perms = new HashMap<>(32); // Capacity for default policy all_allowed = false; @@ -475,9 +461,7 @@ * @exception SecurityException - if this PropertyPermissionCollection * object has been marked readonly */ - - public void add(Permission permission) - { + public void add(Permission permission) { if (! (permission instanceof PropertyPermission)) throw new IllegalArgumentException("invalid permission: "+ permission); @@ -514,14 +498,12 @@ * Check and see if this set of permissions implies the permissions * expressed in "permission". * - * @param p the Permission object to compare + * @param permission the Permission object to compare * * @return true if "permission" is a proper subset of a permission in * the set, false if not. */ - - public boolean implies(Permission permission) - { + public boolean implies(Permission permission) { if (! (permission instanceof PropertyPermission)) return false; @@ -655,8 +637,9 @@ * Reads in a Hashtable of PropertyPermissions and saves them in the * perms field. Reads in all_allowed. */ - private void readObject(ObjectInputStream in) throws IOException, - ClassNotFoundException { + private void readObject(ObjectInputStream in) + throws IOException, ClassNotFoundException + { // Don't call defaultReadObject() // Read in serialized fields
--- a/jdk/src/share/classes/java/util/RegularEnumSet.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/util/RegularEnumSet.java Thu Oct 11 16:59:50 2012 -0700 @@ -289,7 +289,7 @@ * the same size, and every member of the given set is contained in * this set. * - * @param e object to be compared for equality with this set + * @param o object to be compared for equality with this set * @return <tt>true</tt> if the specified object is equal to this set */ public boolean equals(Object o) {
--- a/jdk/src/share/classes/java/util/Scanner.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/util/Scanner.java Thu Oct 11 16:59:50 2012 -0700 @@ -568,9 +568,8 @@ * Constructs a <code>Scanner</code> that returns values scanned * from the specified source delimited by the specified pattern. * - * @param source A character source implementing the Readable interface + * @param source A character source implementing the Readable interface * @param pattern A delimiting pattern - * @return A scanner with the specified source and pattern */ private Scanner(Readable source, Pattern pattern) { assert source != null : "source should not be null";
--- a/jdk/src/share/classes/java/util/ServiceLoader.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/util/ServiceLoader.java Thu Oct 11 16:59:50 2012 -0700 @@ -213,7 +213,7 @@ } private ServiceLoader(Class<S> svc, ClassLoader cl) { - service = svc; + service = Objects.requireNonNull(svc, "Service interface cannot be null"); loader = cl; reload(); }
--- a/jdk/src/share/classes/java/util/TimeZone.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/util/TimeZone.java Thu Oct 11 16:59:50 2012 -0700 @@ -221,7 +221,7 @@ * @param date the milliseconds (since January 1, 1970, * 00:00:00.000 GMT) at which the time zone offset and daylight * saving amount are found - * @param offset an array of int where the raw GMT offset + * @param offsets an array of int where the raw GMT offset * (offset[0]) and daylight saving amount (offset[1]) are stored, * or null if those values are not needed. The method assumes that * the length of the given array is two or larger.
--- a/jdk/src/share/classes/java/util/logging/Logging.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/util/logging/Logging.java Thu Oct 11 16:59:50 2012 -0700 @@ -41,8 +41,8 @@ * @since 1.5 * * @see javax.management - * @see java.util.Logger - * @see java.util.LogManager + * @see Logger + * @see LogManager */ class Logging implements LoggingMXBean {
--- a/jdk/src/share/classes/java/util/prefs/XmlSupport.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/java/util/prefs/XmlSupport.java Thu Oct 11 16:59:50 2012 -0700 @@ -92,7 +92,7 @@ * @throws BackingStoreException if preference data cannot be read from * backing store. * @throws IllegalStateException if this node (or an ancestor) has been - * removed with the {@link #removeNode()} method. + * removed with the {@link Preferences#removeNode()} method. */ static void export(OutputStream os, final Preferences p, boolean subTree) throws IOException, BackingStoreException {
--- a/jdk/src/share/classes/javax/crypto/CryptoAllPermission.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/javax/crypto/CryptoAllPermission.java Thu Oct 11 16:59:50 2012 -0700 @@ -136,8 +136,7 @@ * @exception SecurityException - if this CryptoAllPermissionCollection * object has been marked readonly */ - public void add(Permission permission) - { + public void add(Permission permission) { if (isReadOnly()) throw new SecurityException("attempt to add a Permission to " + "a readonly PermissionCollection"); @@ -152,13 +151,12 @@ * Check and see if this set of permissions implies the permissions * expressed in "permission". * - * @param p the Permission object to compare + * @param permission the Permission object to compare * * @return true if the given permission is implied by this * CryptoAllPermissionCollection. */ - public boolean implies(Permission permission) - { + public boolean implies(Permission permission) { if (!(permission instanceof CryptoPermission)) { return false; }
--- a/jdk/src/share/classes/javax/crypto/CryptoPermission.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/javax/crypto/CryptoPermission.java Thu Oct 11 16:59:50 2012 -0700 @@ -471,8 +471,8 @@ * @author Sharon Liu */ final class CryptoPermissionCollection extends PermissionCollection -implements Serializable { - + implements Serializable +{ private static final long serialVersionUID = -511215555898802763L; private Vector<Permission> permissions; @@ -493,8 +493,7 @@ * @exception SecurityException - if this CryptoPermissionCollection * object has been marked <i>readOnly</i>. */ - public void add(Permission permission) - { + public void add(Permission permission) { if (isReadOnly()) throw new SecurityException("attempt to add a Permission " + "to a readonly PermissionCollection"); @@ -506,10 +505,10 @@ } /** - * Check and see if this CryptoPermission object implies - * the given Permission object. + * Check and see if this CryptoPermission object implies + * the given Permission object. * - * @param p the Permission object to compare + * @param permission the Permission object to compare * * @return true if the given permission is implied by this * CryptoPermissionCollection, false if not. @@ -538,8 +537,7 @@ * @return an enumeration of all the CryptoPermission objects. */ - public Enumeration<Permission> elements() - { + public Enumeration<Permission> elements() { return permissions.elements(); } }
--- a/jdk/src/share/classes/javax/crypto/CryptoPolicyParser.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/javax/crypto/CryptoPolicyParser.java Thu Oct 11 16:59:50 2012 -0700 @@ -54,7 +54,7 @@ * @author Sharon Liu * * @see java.security.Permissions - * @see java.security.spec.AlgrithomParameterSpec + * @see java.security.spec.AlgorithmParameterSpec * @see javax.crypto.CryptoPermission * @see javax.crypto.CryptoAllPermission * @see javax.crypto.CryptoPermissions
--- a/jdk/src/share/classes/javax/crypto/NullCipherSpi.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/javax/crypto/NullCipherSpi.java Thu Oct 11 16:59:50 2012 -0700 @@ -33,7 +33,7 @@ * tranform the plaintext. * * @author Li Gong - * @see Nullcipher + * @see NullCipher * * @since 1.4 */
--- a/jdk/src/share/classes/javax/management/loading/MLet.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/javax/management/loading/MLet.java Thu Oct 11 16:59:50 2012 -0700 @@ -798,7 +798,7 @@ * Allows the m-let to perform any operations it needs before being unregistered * by the MBean server. * - * @exception java.langException This exception should be caught + * @exception java.lang.Exception This exception should be caught * by the MBean server and re-thrown as an * MBeanRegistrationException. */
--- a/jdk/src/share/classes/javax/management/modelmbean/ModelMBeanAttributeInfo.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/javax/management/modelmbean/ModelMBeanAttributeInfo.java Thu Oct 11 16:59:50 2012 -0700 @@ -189,7 +189,7 @@ * May be null if the property is write-only. * @param setter The method used for writing the attribute value. * May be null if the attribute is read-only. - * @exception IntrospectionException There is a consistency + * @exception javax.management.IntrospectionException There is a consistency * problem in the definition of this attribute. * */ @@ -233,7 +233,7 @@ * it is null, then a default descriptor will be created. If * the descriptor does not contain the field "displayName" this field is added * in the descriptor with its default value. - * @exception IntrospectionException There is a consistency + * @exception javax.management.IntrospectionException There is a consistency * problem in the definition of this attribute. * @exception RuntimeOperationsException Wraps an * IllegalArgumentException. The descriptor is invalid, or descriptor
--- a/jdk/src/share/classes/javax/management/openmbean/CompositeDataInvocationHandler.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/javax/management/openmbean/CompositeDataInvocationHandler.java Thu Oct 11 16:59:50 2012 -0700 @@ -124,11 +124,6 @@ <p>Construct a handler backed by the given {@code CompositeData}.</p> - @param mbsc the {@code MBeanServerConnection} related to this - {@code CompositeData}. This is only relevant if a method in - the interface for which this is an invocation handler returns - a type that is an MXBean interface. Otherwise, it can be null. - @param compositeData the {@code CompositeData} that will supply information to getters.
--- a/jdk/src/share/classes/javax/naming/spi/NamingManager.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/javax/naming/spi/NamingManager.java Thu Oct 11 16:59:50 2012 -0700 @@ -416,7 +416,7 @@ * specified. * See the <code>getObjectInstance</code> method for * details. - * @param ctx The context relative to which <code>name</code> is + * @param nameCtx The context relative to which <code>name</code> is * specified, or null for the default initial context. * See the <code>getObjectInstance</code> method for * details.
--- a/jdk/src/share/classes/javax/security/auth/kerberos/DelegationPermission.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/javax/security/auth/kerberos/DelegationPermission.java Thu Oct 11 16:59:50 2012 -0700 @@ -178,7 +178,6 @@ * * @return a hash code value for this object. */ - public int hashCode() { return getName().hashCode(); } @@ -278,12 +277,11 @@ * Check and see if this collection of permissions implies the permissions * expressed in "permission". * - * @param p the Permission object to compare + * @param permission the Permission object to compare * * @return true if "permission" is a proper subset of a permission in * the collection, false if not. */ - public boolean implies(Permission permission) { if (! (permission instanceof DelegationPermission)) return false; @@ -310,7 +308,6 @@ * @exception SecurityException - if this PermissionCollection object * has been marked readonly */ - public void add(Permission permission) { if (! (permission instanceof DelegationPermission)) throw new IllegalArgumentException("invalid permission: "+ @@ -329,7 +326,6 @@ * * @return an enumeration of all the DelegationPermission objects. */ - public Enumeration<Permission> elements() { // Convert Iterator into Enumeration synchronized (this) { @@ -376,8 +372,9 @@ * Reads in a Vector of DelegationPermissions and saves them in the perms field. */ @SuppressWarnings("unchecked") - private void readObject(ObjectInputStream in) throws IOException, - ClassNotFoundException { + private void readObject(ObjectInputStream in) + throws IOException, ClassNotFoundException + { // Don't call defaultReadObject() // Read in serialized fields
--- a/jdk/src/share/classes/javax/security/auth/kerberos/ServicePermission.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/javax/security/auth/kerberos/ServicePermission.java Thu Oct 11 16:59:50 2012 -0700 @@ -259,7 +259,6 @@ * Always returns present actions in the following order: * initiate, accept. */ - public String getActions() { if (actions == null) actions = getActions(this.mask); @@ -280,7 +279,6 @@ * @return a new PermissionCollection object suitable for storing * ServicePermissions. */ - public PermissionCollection newPermissionCollection() { return new KrbServicePermissionCollection(); } @@ -290,7 +288,6 @@ * * @return the actions mask. */ - int getMask() { return mask; } @@ -301,7 +298,6 @@ * @param action the action string * @return the action mask */ - private static int getMask(String action) { if (action == null) { @@ -468,12 +464,11 @@ * Check and see if this collection of permissions implies the permissions * expressed in "permission". * - * @param p the Permission object to compare + * @param permission the Permission object to compare * * @return true if "permission" is a proper subset of a permission in * the collection, false if not. */ - public boolean implies(Permission permission) { if (! (permission instanceof ServicePermission)) return false; @@ -517,7 +512,6 @@ * @exception SecurityException - if this PermissionCollection object * has been marked readonly */ - public void add(Permission permission) { if (! (permission instanceof ServicePermission)) throw new IllegalArgumentException("invalid permission: "+ @@ -584,8 +578,9 @@ * Reads in a Vector of ServicePermissions and saves them in the perms field. */ @SuppressWarnings("unchecked") - private void readObject(ObjectInputStream in) throws IOException, - ClassNotFoundException { + private void readObject(ObjectInputStream in) + throws IOException, ClassNotFoundException + { // Don't call defaultReadObject() // Read in serialized fields
--- a/jdk/src/share/classes/javax/sql/ConnectionPoolDataSource.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/javax/sql/ConnectionPoolDataSource.java Thu Oct 11 16:59:50 2012 -0700 @@ -48,7 +48,7 @@ * connection to the database that this * <code>ConnectionPoolDataSource</code> object represents * @exception SQLException if a database access error occurs - * @exception SQLFeatureNotSupportedException if the JDBC driver does not support + * @exception java.sql.SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.4 */ @@ -64,7 +64,7 @@ * connection to the database that this * <code>ConnectionPoolDataSource</code> object represents * @exception SQLException if a database access error occurs - * @exception SQLFeatureNotSupportedException if the JDBC driver does not support + * @exception java.sql.SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.4 */
--- a/jdk/src/share/classes/javax/sql/PooledConnection.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/javax/sql/PooledConnection.java Thu Oct 11 16:59:50 2012 -0700 @@ -102,7 +102,7 @@ * @return a <code>Connection</code> object that is a handle to * this <code>PooledConnection</code> object * @exception SQLException if a database access error occurs - * @exception SQLFeatureNotSupportedException if the JDBC driver does not support + * @exception java.sql.SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.4 */ @@ -117,7 +117,7 @@ * information. * * @exception SQLException if a database access error occurs - * @exception SQLFeatureNotSupportedException if the JDBC driver does not support + * @exception java.sql.SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.4 */
--- a/jdk/src/share/classes/javax/sql/rowset/spi/SyncProvider.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/javax/sql/rowset/spi/SyncProvider.java Thu Oct 11 16:59:50 2012 -0700 @@ -293,7 +293,7 @@ * SyncProvider.DATASOURCE_TABLE_LOCK, * SyncProvider.DATASOURCE_DB_LOCK * </pre> - * @throws SyncProviderExceptiom if an error occurs determining the data + * @throws SyncProviderException if an error occurs determining the data * source locking level. * @see #setDataSourceLock
--- a/jdk/src/share/classes/javax/swing/ToolTipManager.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/javax/swing/ToolTipManager.java Thu Oct 11 16:59:50 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -217,6 +217,25 @@ return exitTimer.getInitialDelay(); } + // Returns GraphicsConfiguration instance that toFind belongs to or null + // if drawing point is set to a point beyond visible screen area (e.g. + // Point(20000, 20000)) + private GraphicsConfiguration getDrawingGC(Point toFind) { + GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); + GraphicsDevice devices[] = env.getScreenDevices(); + for (GraphicsDevice device : devices) { + GraphicsConfiguration configs[] = device.getConfigurations(); + for (GraphicsConfiguration config : configs) { + Rectangle rect = config.getBounds(); + if (rect.contains(toFind)) { + return config; + } + } + } + + return null; + } + void showTipWindow() { if(insideComponent == null || !insideComponent.isShowing()) return; @@ -231,9 +250,25 @@ if (enabled) { Dimension size; Point screenLocation = insideComponent.getLocationOnScreen(); - Point location = new Point(); - GraphicsConfiguration gc; - gc = insideComponent.getGraphicsConfiguration(); + Point location; + + Point toFind; + if (preferredLocation != null) { + toFind = new Point(screenLocation.x + preferredLocation.x, + screenLocation.y + preferredLocation.y); + } else { + toFind = mouseEvent.getLocationOnScreen(); + } + + GraphicsConfiguration gc = getDrawingGC(toFind); + if (gc == null) { + toFind = mouseEvent.getLocationOnScreen(); + gc = getDrawingGC(toFind); + if (gc == null) { + gc = insideComponent.getGraphicsConfiguration(); + } + } + Rectangle sBounds = gc.getBounds(); Insets screenInsets = Toolkit.getDefaultToolkit() .getScreenInsets(gc); @@ -253,14 +288,13 @@ size = tip.getPreferredSize(); if(preferredLocation != null) { - location.x = screenLocation.x + preferredLocation.x; - location.y = screenLocation.y + preferredLocation.y; + location = toFind; if (!leftToRight) { location.x -= size.width; } } else { - location.x = screenLocation.x + mouseEvent.getX(); - location.y = screenLocation.y + mouseEvent.getY() + 20; + location = new Point(screenLocation.x + mouseEvent.getX(), + screenLocation.y + mouseEvent.getY() + 20); if (!leftToRight) { if(location.x - size.width>=0) { location.x -= size.width;
--- a/jdk/src/share/classes/javax/swing/colorchooser/DefaultSwatchChooserPanel.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/javax/swing/colorchooser/DefaultSwatchChooserPanel.java Thu Oct 11 16:59:50 2012 -0700 @@ -57,6 +57,8 @@ RecentSwatchPanel recentSwatchPanel; MouseListener mainSwatchListener; MouseListener recentSwatchListener; + private KeyListener mainSwatchKeyListener; + private KeyListener recentSwatchKeyListener; public DefaultSwatchChooserPanel() { super(); @@ -151,10 +153,14 @@ recentSwatchPanel.putClientProperty(AccessibleContext.ACCESSIBLE_NAME_PROPERTY, recentStr); + mainSwatchKeyListener = new MainSwatchKeyListener(); mainSwatchListener = new MainSwatchListener(); swatchPanel.addMouseListener(mainSwatchListener); + swatchPanel.addKeyListener(mainSwatchKeyListener); recentSwatchListener = new RecentSwatchListener(); + recentSwatchKeyListener = new RecentSwatchKeyListener(); recentSwatchPanel.addMouseListener(recentSwatchListener); + recentSwatchPanel.addKeyListener(recentSwatchKeyListener); JPanel mainHolder = new JPanel(new BorderLayout()); Border border = new CompoundBorder( new LineBorder(Color.black), @@ -196,11 +202,17 @@ public void uninstallChooserPanel(JColorChooser enclosingChooser) { super.uninstallChooserPanel(enclosingChooser); swatchPanel.removeMouseListener(mainSwatchListener); + swatchPanel.removeKeyListener(mainSwatchKeyListener); recentSwatchPanel.removeMouseListener(recentSwatchListener); + recentSwatchPanel.removeKeyListener(recentSwatchKeyListener); + swatchPanel = null; recentSwatchPanel = null; mainSwatchListener = null; + mainSwatchKeyListener = null; recentSwatchListener = null; + recentSwatchKeyListener = null; + removeAll(); // strip out all the sub-components } @@ -209,11 +221,32 @@ } + private class RecentSwatchKeyListener extends KeyAdapter { + public void keyPressed(KeyEvent e) { + if (KeyEvent.VK_SPACE == e.getKeyCode()) { + Color color = recentSwatchPanel.getSelectedColor(); + setSelectedColor(color); + } + } + } + + private class MainSwatchKeyListener extends KeyAdapter { + public void keyPressed(KeyEvent e) { + if (KeyEvent.VK_SPACE == e.getKeyCode()) { + Color color = swatchPanel.getSelectedColor(); + setSelectedColor(color); + recentSwatchPanel.setMostRecentColor(color); + } + } + } + class RecentSwatchListener extends MouseAdapter implements Serializable { public void mousePressed(MouseEvent e) { if (isEnabled()) { Color color = recentSwatchPanel.getColorForLocation(e.getX(), e.getY()); + recentSwatchPanel.setSelectedColorFromLocation(e.getX(), e.getY()); setSelectedColor(color); + recentSwatchPanel.requestFocusInWindow(); } } } @@ -223,7 +256,9 @@ if (isEnabled()) { Color color = swatchPanel.getColorForLocation(e.getX(), e.getY()); setSelectedColor(color); + swatchPanel.setSelectedColorFromLocation(e.getX(), e.getY()); recentSwatchPanel.setMostRecentColor(color); + swatchPanel.requestFocusInWindow(); } } } @@ -239,18 +274,81 @@ protected Dimension numSwatches; protected Dimension gap; + private int selRow; + private int selCol; + public SwatchPanel() { initValues(); initColors(); setToolTipText(""); // register for events setOpaque(true); setBackground(Color.white); - setRequestFocusEnabled(false); + setFocusable(true); setInheritsPopupMenu(true); + + addFocusListener(new FocusAdapter() { + public void focusGained(FocusEvent e) { + repaint(); + } + + public void focusLost(FocusEvent e) { + repaint(); + } + }); + + addKeyListener(new KeyAdapter() { + public void keyPressed(KeyEvent e) { + int typed = e.getKeyCode(); + switch (typed) { + case KeyEvent.VK_UP: + if (selRow > 0) { + selRow--; + repaint(); + } + break; + case KeyEvent.VK_DOWN: + if (selRow < numSwatches.height - 1) { + selRow++; + repaint(); + } + break; + case KeyEvent.VK_LEFT: + if (selCol > 0 && SwatchPanel.this.getComponentOrientation().isLeftToRight()) { + selCol--; + repaint(); + } else if (selCol < numSwatches.width - 1 + && !SwatchPanel.this.getComponentOrientation().isLeftToRight()) { + selCol++; + repaint(); + } + break; + case KeyEvent.VK_RIGHT: + if (selCol < numSwatches.width - 1 + && SwatchPanel.this.getComponentOrientation().isLeftToRight()) { + selCol++; + repaint(); + } else if (selCol > 0 && !SwatchPanel.this.getComponentOrientation().isLeftToRight()) { + selCol--; + repaint(); + } + break; + case KeyEvent.VK_HOME: + selCol = 0; + selRow = 0; + repaint(); + break; + case KeyEvent.VK_END: + selCol = numSwatches.width - 1; + selRow = numSwatches.height - 1; + repaint(); + break; + } + } + }); } - public boolean isFocusTraversable() { - return false; + public Color getSelectedColor() { + return getColorForCell(selCol, selRow); } protected void initValues() { @@ -263,11 +361,10 @@ for (int row = 0; row < numSwatches.height; row++) { int y = row * (swatchSize.height + gap.height); for (int column = 0; column < numSwatches.width; column++) { - - g.setColor( getColorForCell(column, row) ); + Color c = getColorForCell(column, row); + g.setColor(c); int x; - if ((!this.getComponentOrientation().isLeftToRight()) && - (this instanceof RecentSwatchPanel)) { + if (!this.getComponentOrientation().isLeftToRight()) { x = (numSwatches.width - column - 1) * (swatchSize.width + gap.width); } else { x = column * (swatchSize.width + gap.width); @@ -276,6 +373,20 @@ g.setColor(Color.black); g.drawLine( x+swatchSize.width-1, y, x+swatchSize.width-1, y+swatchSize.height-1); g.drawLine( x, y+swatchSize.height-1, x+swatchSize.width-1, y+swatchSize.height-1); + + if (selRow == row && selCol == column && this.isFocusOwner()) { + Color c2 = new Color(c.getRed() < 125 ? 255 : 0, + c.getGreen() < 125 ? 255 : 0, + c.getBlue() < 125 ? 255 : 0); + g.setColor(c2); + + g.drawLine(x, y, x + swatchSize.width - 1, y); + g.drawLine(x, y, x, y + swatchSize.height - 1); + g.drawLine(x + swatchSize.width - 1, y, x + swatchSize.width - 1, y + swatchSize.height - 1); + g.drawLine(x, y + swatchSize.height - 1, x + swatchSize.width - 1, y + swatchSize.height - 1); + g.drawLine(x, y, x + swatchSize.width - 1, y + swatchSize.height - 1); + g.drawLine(x, y + swatchSize.height - 1, x + swatchSize.width - 1, y); + } } } } @@ -296,10 +407,19 @@ return color.getRed()+", "+ color.getGreen() + ", " + color.getBlue(); } + public void setSelectedColorFromLocation(int x, int y) { + if (!this.getComponentOrientation().isLeftToRight()) { + selCol = numSwatches.width - x / (swatchSize.width + gap.width) - 1; + } else { + selCol = x / (swatchSize.width + gap.width); + } + selRow = y / (swatchSize.height + gap.height); + repaint(); + } + public Color getColorForLocation( int x, int y ) { int column; - if ((!this.getComponentOrientation().isLeftToRight()) && - (this instanceof RecentSwatchPanel)) { + if (!this.getComponentOrientation().isLeftToRight()) { column = numSwatches.width - x / (swatchSize.width + gap.width) - 1; } else { column = x / (swatchSize.width + gap.width);
--- a/jdk/src/share/classes/sun/net/www/http/HttpClient.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/sun/net/www/http/HttpClient.java Thu Oct 11 16:59:50 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -36,6 +36,7 @@ import sun.net.www.ParseUtil; import sun.net.www.protocol.http.HttpURLConnection; import sun.util.logging.PlatformLogger; +import static sun.net.www.protocol.http.HttpURLConnection.TunnelState.*; /** * @author Herb Jellinek @@ -244,16 +245,17 @@ */ public static HttpClient New(URL url) throws IOException { - return HttpClient.New(url, Proxy.NO_PROXY, -1, true); + return HttpClient.New(url, Proxy.NO_PROXY, -1, true, null); } public static HttpClient New(URL url, boolean useCache) throws IOException { - return HttpClient.New(url, Proxy.NO_PROXY, -1, useCache); + return HttpClient.New(url, Proxy.NO_PROXY, -1, useCache, null); } - public static HttpClient New(URL url, Proxy p, int to, boolean useCache) - throws IOException { + public static HttpClient New(URL url, Proxy p, int to, boolean useCache, + HttpURLConnection httpuc) throws IOException + { if (p == null) { p = Proxy.NO_PROXY; } @@ -261,6 +263,13 @@ /* see if one's already around */ if (useCache) { ret = kac.get(url, null); + if (ret != null && httpuc != null && + httpuc.streaming() && + httpuc.getRequestMethod() == "POST") { + if (!ret.available()) + ret = null; + } + if (ret != null) { if ((ret.proxy != null && ret.proxy.equals(p)) || (ret.proxy == null && p == null)) { @@ -268,6 +277,8 @@ ret.cachedHttpClient = true; assert ret.inCache; ret.inCache = false; + if (httpuc != null && ret.needsTunneling()) + httpuc.setTunnelState(TUNNELING); PlatformLogger logger = HttpURLConnection.getHttpLogger(); if (logger.isLoggable(PlatformLogger.FINEST)) { logger.finest("KeepAlive stream retrieved from the cache, " + ret); @@ -302,20 +313,25 @@ return ret; } - public static HttpClient New(URL url, Proxy p, int to) throws IOException { - return New(url, p, to, true); + public static HttpClient New(URL url, Proxy p, int to, + HttpURLConnection httpuc) throws IOException + { + return New(url, p, to, true, httpuc); } public static HttpClient New(URL url, String proxyHost, int proxyPort, boolean useCache) throws IOException { - return New(url, newHttpProxy(proxyHost, proxyPort, "http"), -1, useCache); + return New(url, newHttpProxy(proxyHost, proxyPort, "http"), + -1, useCache, null); } public static HttpClient New(URL url, String proxyHost, int proxyPort, - boolean useCache, int to) + boolean useCache, int to, + HttpURLConnection httpuc) throws IOException { - return New(url, newHttpProxy(proxyHost, proxyPort, "http"), to, useCache); + return New(url, newHttpProxy(proxyHost, proxyPort, "http"), + to, useCache, httpuc); } /* return it to the cache as still usable, if: @@ -344,6 +360,34 @@ } } + protected synchronized boolean available() throws IOException { + boolean available = true; + int old = serverSocket.getSoTimeout(); + serverSocket.setSoTimeout(1); + BufferedInputStream tmpbuf = + new BufferedInputStream(serverSocket.getInputStream()); + + PlatformLogger logger = HttpURLConnection.getHttpLogger(); + try { + int r = tmpbuf.read(); + if (r == -1) { + if (logger.isLoggable(PlatformLogger.FINEST)) { + logger.finest("HttpClient.available(): " + + "read returned -1: not available"); + } + available = false; + } + } catch (SocketTimeoutException e) { + if (logger.isLoggable(PlatformLogger.FINEST)) { + logger.finest("HttpClient.available(): " + + "SocketTimeout: its available"); + } + } finally { + serverSocket.setSoTimeout(old); + } + return available; + } + protected synchronized void putInKeepAliveCache() { if (inCache) { assert false : "Duplicate put to keep alive cache";
--- a/jdk/src/share/classes/sun/net/www/protocol/http/HttpURLConnection.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/sun/net/www/protocol/http/HttpURLConnection.java Thu Oct 11 16:59:50 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -351,7 +351,7 @@ private HttpClient reuseClient = null; /* Tunnel states */ - enum TunnelState { + public enum TunnelState { /* No tunnel */ NONE, @@ -662,7 +662,7 @@ */ protected void setNewClient (URL url, boolean useCache) throws IOException { - http = HttpClient.New(url, null, -1, useCache, connectTimeout); + http = HttpClient.New(url, null, -1, useCache, connectTimeout, this); http.setReadTimeout(readTimeout); } @@ -703,7 +703,8 @@ String proxyHost, int proxyPort, boolean useCache) throws IOException { - http = HttpClient.New (url, proxyHost, proxyPort, useCache, connectTimeout); + http = HttpClient.New (url, proxyHost, proxyPort, useCache, + connectTimeout, this); http.setReadTimeout(readTimeout); } @@ -994,14 +995,14 @@ // subclass HttpsClient will overwrite & return an instance of HttpsClient protected HttpClient getNewHttpClient(URL url, Proxy p, int connectTimeout) throws IOException { - return HttpClient.New(url, p, connectTimeout); + return HttpClient.New(url, p, connectTimeout, this); } // subclass HttpsClient will overwrite & return an instance of HttpsClient protected HttpClient getNewHttpClient(URL url, Proxy p, int connectTimeout, boolean useCache) throws IOException { - return HttpClient.New(url, p, connectTimeout, useCache); + return HttpClient.New(url, p, connectTimeout, useCache, this); } private void expect100Continue() throws IOException { @@ -1144,7 +1145,7 @@ } } - private boolean streaming () { + public boolean streaming () { return (fixedContentLength != -1) || (fixedContentLengthLong != -1) || (chunkLength != -1); } @@ -1739,7 +1740,7 @@ * * @param the state */ - void setTunnelState(TunnelState tunnelState) { + public void setTunnelState(TunnelState tunnelState) { this.tunnelState = tunnelState; }
--- a/jdk/src/share/classes/sun/nio/ch/DatagramChannelImpl.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/sun/nio/ch/DatagramChannelImpl.java Thu Oct 11 16:59:50 2012 -0700 @@ -1059,6 +1059,28 @@ return translateReadyOps(ops, 0, sk); } + // package-private + int poll(int events, long timeout) throws IOException { + assert Thread.holdsLock(blockingLock()) && !isBlocking(); + + synchronized (readLock) { + int n = 0; + try { + begin(); + synchronized (stateLock) { + if (!isOpen()) + return 0; + readerThread = NativeThread.current(); + } + n = Net.poll(fd, events, timeout); + } finally { + readerThread = 0; + end(n > 0); + } + return n; + } + } + /** * Translates an interest operation set into a native poll event set */
--- a/jdk/src/share/classes/sun/nio/ch/DatagramSocketAdaptor.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/sun/nio/ch/DatagramSocketAdaptor.java Thu Oct 11 16:59:50 2012 -0700 @@ -176,40 +176,31 @@ return dc.receive(bb); } - // Implement timeout with a selector - SelectionKey sk = null; - Selector sel = null; dc.configureBlocking(false); try { int n; SocketAddress sender; if ((sender = dc.receive(bb)) != null) return sender; - sel = Util.getTemporarySelector(dc); - sk = dc.register(sel, SelectionKey.OP_READ); long to = timeout; for (;;) { if (!dc.isOpen()) throw new ClosedChannelException(); long st = System.currentTimeMillis(); - int ns = sel.select(to); - if (ns > 0 && sk.isReadable()) { + int result = dc.poll(PollArrayWrapper.POLLIN, to); + if (result > 0 && + ((result & PollArrayWrapper.POLLIN) != 0)) { if ((sender = dc.receive(bb)) != null) return sender; } - sel.selectedKeys().remove(sk); to -= System.currentTimeMillis() - st; if (to <= 0) throw new SocketTimeoutException(); } } finally { - if (sk != null) - sk.cancel(); if (dc.isOpen()) dc.configureBlocking(true); - if (sel != null) - Util.releaseTemporarySelector(sel); } }
--- a/jdk/src/share/classes/sun/nio/ch/Net.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/sun/nio/ch/Net.java Thu Oct 11 16:59:50 2012 -0700 @@ -409,6 +409,9 @@ int level, int opt, int arg) throws IOException; + static native int poll(FileDescriptor fd, int events, long timeout) + throws IOException; + // -- Multicast support --
--- a/jdk/src/share/classes/sun/nio/ch/ServerSocketAdaptor.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/sun/nio/ch/ServerSocketAdaptor.java Thu Oct 11 16:59:50 2012 -0700 @@ -102,37 +102,26 @@ return sc.socket(); } - // Implement timeout with a selector - SelectionKey sk = null; - Selector sel = null; ssc.configureBlocking(false); try { SocketChannel sc; if ((sc = ssc.accept()) != null) return sc.socket(); - sel = Util.getTemporarySelector(ssc); - sk = ssc.register(sel, SelectionKey.OP_ACCEPT); long to = timeout; for (;;) { if (!ssc.isOpen()) throw new ClosedChannelException(); long st = System.currentTimeMillis(); - int ns = sel.select(to); - if (ns > 0 && - sk.isAcceptable() && ((sc = ssc.accept()) != null)) + int result = ssc.poll(PollArrayWrapper.POLLIN, to); + if (result > 0 && ((sc = ssc.accept()) != null)) return sc.socket(); - sel.selectedKeys().remove(sk); to -= System.currentTimeMillis() - st; if (to <= 0) throw new SocketTimeoutException(); } } finally { - if (sk != null) - sk.cancel(); if (ssc.isOpen()) ssc.configureBlocking(true); - if (sel != null) - Util.releaseTemporarySelector(sel); } } catch (Exception x) {
--- a/jdk/src/share/classes/sun/nio/ch/ServerSocketChannelImpl.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/sun/nio/ch/ServerSocketChannelImpl.java Thu Oct 11 16:59:50 2012 -0700 @@ -324,6 +324,28 @@ return translateReadyOps(ops, 0, sk); } + // package-private + int poll(int events, long timeout) throws IOException { + assert Thread.holdsLock(blockingLock()) && !isBlocking(); + + synchronized (lock) { + int n = 0; + try { + begin(); + synchronized (stateLock) { + if (!isOpen()) + return 0; + thread = NativeThread.current(); + } + n = Net.poll(fd, events, timeout); + } finally { + thread = 0; + end(n > 0); + } + return n; + } + } + /** * Translates an interest operation set into a native poll event set */
--- a/jdk/src/share/classes/sun/nio/ch/SocketAdaptor.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/sun/nio/ch/SocketAdaptor.java Thu Oct 11 16:59:50 2012 -0700 @@ -97,25 +97,19 @@ return; } - // Implement timeout with a selector - SelectionKey sk = null; - Selector sel = null; sc.configureBlocking(false); try { if (sc.connect(remote)) return; - sel = Util.getTemporarySelector(sc); - sk = sc.register(sel, SelectionKey.OP_CONNECT); long to = timeout; for (;;) { if (!sc.isOpen()) throw new ClosedChannelException(); long st = System.currentTimeMillis(); - int ns = sel.select(to); - if (ns > 0 && - sk.isConnectable() && sc.finishConnect()) + + int result = sc.poll(PollArrayWrapper.POLLCONN, to); + if (result > 0 && sc.finishConnect()) break; - sel.selectedKeys().remove(sk); to -= System.currentTimeMillis() - st; if (to <= 0) { try { @@ -125,12 +119,8 @@ } } } finally { - if (sk != null) - sk.cancel(); if (sc.isOpen()) sc.configureBlocking(true); - if (sel != null) - Util.releaseTemporarySelector(sel); } } catch (Exception x) { @@ -199,39 +189,29 @@ throw new IllegalBlockingModeException(); if (timeout == 0) return sc.read(bb); + sc.configureBlocking(false); - // Implement timeout with a selector - SelectionKey sk = null; - Selector sel = null; - sc.configureBlocking(false); try { int n; if ((n = sc.read(bb)) != 0) return n; - sel = Util.getTemporarySelector(sc); - sk = sc.register(sel, SelectionKey.OP_READ); long to = timeout; for (;;) { if (!sc.isOpen()) throw new ClosedChannelException(); long st = System.currentTimeMillis(); - int ns = sel.select(to); - if (ns > 0 && sk.isReadable()) { + int result = sc.poll(PollArrayWrapper.POLLIN, to); + if (result > 0) { if ((n = sc.read(bb)) != 0) return n; } - sel.selectedKeys().remove(sk); to -= System.currentTimeMillis() - st; if (to <= 0) throw new SocketTimeoutException(); } } finally { - if (sk != null) - sk.cancel(); if (sc.isOpen()) sc.configureBlocking(true); - if (sel != null) - Util.releaseTemporarySelector(sel); } }
--- a/jdk/src/share/classes/sun/nio/ch/SocketChannelImpl.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/sun/nio/ch/SocketChannelImpl.java Thu Oct 11 16:59:50 2012 -0700 @@ -914,6 +914,28 @@ return translateReadyOps(ops, 0, sk); } + // package-private + int poll(int events, long timeout) throws IOException { + assert Thread.holdsLock(blockingLock()) && !isBlocking(); + + synchronized (readLock) { + int n = 0; + try { + begin(); + synchronized (stateLock) { + if (!isOpen()) + return 0; + readerThread = NativeThread.current(); + } + n = Net.poll(fd, events, timeout); + } finally { + readerCleanup(); + end(n > 0); + } + return n; + } + } + /** * Translates an interest operation set into a native poll event set */
--- a/jdk/src/share/classes/sun/nio/ch/Util.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/sun/nio/ch/Util.java Thu Oct 11 16:59:50 2012 -0700 @@ -218,66 +218,6 @@ ((DirectBuffer)buf).cleaner().clean(); } - private static class SelectorWrapper { - private Selector sel; - private SelectorWrapper (Selector sel) { - this.sel = sel; - Cleaner.create(this, new Closer(sel)); - } - private static class Closer implements Runnable { - private Selector sel; - private Closer (Selector sel) { - this.sel = sel; - } - public void run () { - try { - sel.close(); - } catch (Throwable th) { - throw new Error(th); - } - } - } - public Selector get() { return sel;} - } - - // Per-thread cached selector - private static ThreadLocal<SoftReference<SelectorWrapper>> localSelector - = new ThreadLocal<SoftReference<SelectorWrapper>>(); - // Hold a reference to the selWrapper object to prevent it from - // being cleaned when the temporary selector wrapped is on lease. - private static ThreadLocal<SelectorWrapper> localSelectorWrapper - = new ThreadLocal<SelectorWrapper>(); - - // When finished, invoker must ensure that selector is empty - // by cancelling any related keys and explicitly releasing - // the selector by invoking releaseTemporarySelector() - static Selector getTemporarySelector(SelectableChannel sc) - throws IOException - { - SoftReference<SelectorWrapper> ref = localSelector.get(); - SelectorWrapper selWrapper = null; - Selector sel = null; - if (ref == null - || ((selWrapper = ref.get()) == null) - || ((sel = selWrapper.get()) == null) - || (sel.provider() != sc.provider())) { - sel = sc.provider().openSelector(); - selWrapper = new SelectorWrapper(sel); - localSelector.set(new SoftReference<SelectorWrapper>(selWrapper)); - } - localSelectorWrapper.set(selWrapper); - return sel; - } - - static void releaseTemporarySelector(Selector sel) - throws IOException - { - // Selector should be empty - sel.selectNow(); // Flush cancelled keys - assert sel.keys().isEmpty() : "Temporary selector not empty"; - localSelectorWrapper.set(null); - } - // -- Random stuff --
--- a/jdk/src/share/classes/sun/security/pkcs11/P11Cipher.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/sun/security/pkcs11/P11Cipher.java Thu Oct 11 16:59:50 2012 -0700 @@ -193,9 +193,9 @@ } else { // DES, DESede, Blowfish blockSize = 8; } - this.blockMode = - (algoParts.length > 1 ? parseMode(algoParts[1]) : MODE_ECB); } + this.blockMode = + (algoParts.length > 1 ? parseMode(algoParts[1]) : MODE_ECB); String defPadding = (blockSize == 0 ? "NoPadding" : "PKCS5Padding"); String paddingStr = (algoParts.length > 2 ? algoParts[2] : defPadding);
--- a/jdk/src/share/classes/sun/security/provider/DSAKeyPairGenerator.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/sun/security/provider/DSAKeyPairGenerator.java Thu Oct 11 16:59:50 2012 -0700 @@ -82,7 +82,9 @@ } public void initialize(int modlen, SecureRandom random) { - initialize(modlen, false, random); + // generate new parameters when no precomputed ones available. + initialize(modlen, true, random); + this.forceNewParameters = false; } /**
--- a/jdk/src/share/classes/sun/security/provider/DSAParameterGenerator.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/sun/security/provider/DSAParameterGenerator.java Thu Oct 11 16:59:50 2012 -0700 @@ -116,12 +116,13 @@ throw new InvalidAlgorithmParameterException("Invalid parameter"); } DSAGenParameterSpec dsaGenParams = (DSAGenParameterSpec) genParamSpec; - if (dsaGenParams.getPrimePLength() > 2048) { + int primePLen = dsaGenParams.getPrimePLength(); + if (primePLen > 2048) { throw new InvalidParameterException - ("Prime size should be 512 - 1024, or 2048"); + ("No support for prime size " + primePLen); } // directly initialize using the already validated values - this.valueL = dsaGenParams.getPrimePLength(); + this.valueL = primePLen; this.valueN = dsaGenParams.getSubprimeQLength(); this.seedLen = dsaGenParams.getSeedLength(); this.random = random;
--- a/jdk/src/share/classes/sun/security/provider/ParameterCache.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/sun/security/provider/ParameterCache.java Thu Oct 11 16:59:50 2012 -0700 @@ -146,9 +146,14 @@ InvalidAlgorithmParameterException { AlgorithmParameterGenerator gen = AlgorithmParameterGenerator.getInstance("DSA"); - DSAGenParameterSpec genParams = - new DSAGenParameterSpec(primeLen, subprimeLen); - gen.init(genParams, random); + // Use init(int size, SecureRandom random) for legacy DSA key sizes + if (primeLen < 1024) { + gen.init(primeLen, random); + } else { + DSAGenParameterSpec genParams = + new DSAGenParameterSpec(primeLen, subprimeLen); + gen.init(genParams, random); + } AlgorithmParameters params = gen.generateParameters(); DSAParameterSpec spec = params.getParameterSpec(DSAParameterSpec.class); return spec; @@ -159,8 +164,9 @@ dsaCache = new ConcurrentHashMap<Integer,DSAParameterSpec>(); /* - * We support precomputed parameter for 512, 768 and 1024 bit - * moduli. In this file we provide both the seed and counter + * We support precomputed parameter for legacy 512, 768 bit moduli, + * and (L, N) combinations of (1024, 160), (2048, 224), (2048, 256). + * In this file we provide both the seed and counter * value of the generation process for each of these seeds, * for validation purposes. We also include the test vectors * from the DSA specification, FIPS 186, and the FIPS 186
--- a/jdk/src/share/classes/sun/security/ssl/HandshakeMessage.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/sun/security/ssl/HandshakeMessage.java Thu Oct 11 16:59:50 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -132,7 +132,7 @@ */ final void write(HandshakeOutStream s) throws IOException { int len = messageLength(); - if (len > (1 << 24)) { + if (len >= Record.OVERFLOW_OF_INT24) { throw new SSLException("Handshake message too big" + ", type = " + messageType() + ", len = " + len); }
--- a/jdk/src/share/classes/sun/security/ssl/HandshakeOutStream.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/sun/security/ssl/HandshakeOutStream.java Thu Oct 11 16:59:50 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -153,10 +153,12 @@ */ void putInt8(int i) throws IOException { + checkOverflow(i, Record.OVERFLOW_OF_INT08); r.write(i); } void putInt16(int i) throws IOException { + checkOverflow(i, Record.OVERFLOW_OF_INT16); if (r.availableDataBytes() < 2) { flush(); } @@ -165,6 +167,7 @@ } void putInt24(int i) throws IOException { + checkOverflow(i, Record.OVERFLOW_OF_INT24); if (r.availableDataBytes() < 3) { flush(); } @@ -191,6 +194,8 @@ if (b == null) { putInt8(0); return; + } else { + checkOverflow(b.length, Record.OVERFLOW_OF_INT08); } putInt8(b.length); write(b, 0, b.length); @@ -200,6 +205,8 @@ if (b == null) { putInt16(0); return; + } else { + checkOverflow(b.length, Record.OVERFLOW_OF_INT16); } putInt16(b.length); write(b, 0, b.length); @@ -209,8 +216,19 @@ if (b == null) { putInt24(0); return; + } else { + checkOverflow(b.length, Record.OVERFLOW_OF_INT24); } putInt24(b.length); write(b, 0, b.length); } + + private void checkOverflow(int length, int overflow) { + if (length >= overflow) { + // internal_error alert will be triggered + throw new RuntimeException( + "Field length overflow, the field length (" + + length + ") should be less than " + overflow); + } + } }
--- a/jdk/src/share/classes/sun/security/ssl/Record.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/sun/security/ssl/Record.java Thu Oct 11 16:59:50 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -110,4 +110,10 @@ + maxPadding // padding + trailerSize; // MAC + /* + * The overflow values of integers of 8, 16 and 24 bits. + */ + static final int OVERFLOW_OF_INT08 = (1 << 8); + static final int OVERFLOW_OF_INT16 = (1 << 16); + static final int OVERFLOW_OF_INT24 = (1 << 24); }
--- a/jdk/src/share/classes/sun/text/SupplementaryCharacterData.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/sun/text/SupplementaryCharacterData.java Thu Oct 11 16:59:50 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,6 +32,11 @@ public final class SupplementaryCharacterData implements Cloneable { /** + * A token used as a character-category value to identify ignore characters + */ + private static final byte IGNORE = -1; + + /** * An array for supplementary characters and values. * Lower one byte is used to keep a byte-value. * Upper three bytes are used to keep the first supplementary character @@ -78,7 +83,8 @@ } else if (index > (end-1)) { i = k; } else { - return dataTable[k] & 0xFF; + int v = dataTable[k] & 0xFF; + return (v == 0xFF) ? IGNORE : v; } } }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/share/classes/sun/util/locale/LocaleEquivalentMaps.java Thu Oct 11 16:59:50 2012 -0700 @@ -0,0 +1,204 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.util.locale; + +import java.util.HashMap; +import java.util.Map; + +/** + * Locale equivalent map for BCP47 Locale matching + */ +final class LocaleEquivalentMaps { + + static final Map<String, String> singleEquivMap; + static final Map<String, String[]> multiEquivsMap; + static final Map<String, String> regionVariantEquivMap; + + static { + singleEquivMap = new HashMap<>(); + multiEquivsMap = new HashMap<>(); + regionVariantEquivMap = new HashMap<>(); + + // This is an auto-generated file and should not be manually edited. + // LSR Revision: 2012-09-04 + singleEquivMap.put("ami", "i-ami"); + singleEquivMap.put("art-lojban", "jbo"); + singleEquivMap.put("ase", "sgn-us"); + singleEquivMap.put("ayx", "nun"); + singleEquivMap.put("bfi", "sgn-gb"); + singleEquivMap.put("bjd", "drl"); + singleEquivMap.put("bnn", "i-bnn"); + singleEquivMap.put("bzs", "sgn-br"); + singleEquivMap.put("cjr", "mom"); + singleEquivMap.put("cka", "cmr"); + singleEquivMap.put("cmk", "xch"); + singleEquivMap.put("cmn-hans", "zh-cmn-hans"); + singleEquivMap.put("cmn-hant", "zh-cmn-hant"); + singleEquivMap.put("cmr", "cka"); + singleEquivMap.put("csn", "sgn-co"); + singleEquivMap.put("dev", "gav"); + singleEquivMap.put("drh", "khk"); + singleEquivMap.put("drl", "bjd"); + singleEquivMap.put("dse", "sgn-nl"); + singleEquivMap.put("dsl", "sgn-dk"); + singleEquivMap.put("fsl", "sgn-fr"); + singleEquivMap.put("gan", "zh-gan"); + singleEquivMap.put("gav", "dev"); + singleEquivMap.put("gsg", "sgn-de"); + singleEquivMap.put("gss", "sgn-gr"); + singleEquivMap.put("he", "iw"); + singleEquivMap.put("hle", "sca"); + singleEquivMap.put("hrr", "jal"); + singleEquivMap.put("hsn", "zh-xiang"); + singleEquivMap.put("i-ami", "ami"); + singleEquivMap.put("i-bnn", "bnn"); + singleEquivMap.put("i-klingon", "tlh"); + singleEquivMap.put("i-lux", "lb"); + singleEquivMap.put("i-navajo", "nv"); + singleEquivMap.put("i-pwn", "pwn"); + singleEquivMap.put("i-tao", "tao"); + singleEquivMap.put("i-tay", "tay"); + singleEquivMap.put("i-tsu", "tsu"); + singleEquivMap.put("ibi", "opa"); + singleEquivMap.put("id", "in"); + singleEquivMap.put("in", "id"); + singleEquivMap.put("ise", "sgn-it"); + singleEquivMap.put("isg", "sgn-ie"); + singleEquivMap.put("iw", "he"); + singleEquivMap.put("jal", "hrr"); + singleEquivMap.put("jbo", "art-lojban"); + singleEquivMap.put("ji", "yi"); + singleEquivMap.put("jsl", "sgn-jp"); + singleEquivMap.put("jv", "jw"); + singleEquivMap.put("jw", "jv"); + singleEquivMap.put("kgh", "kml"); + singleEquivMap.put("khk", "drh"); + singleEquivMap.put("kml", "kgh"); + singleEquivMap.put("lb", "i-lux"); + singleEquivMap.put("lcq", "ppr"); + singleEquivMap.put("lrr", "yma"); + singleEquivMap.put("mfs", "sgn-mx"); + singleEquivMap.put("mo", "ro"); + singleEquivMap.put("mom", "cjr"); + singleEquivMap.put("nan", "zh-min-nan"); + singleEquivMap.put("nb", "no-bok"); + singleEquivMap.put("ncs", "sgn-ni"); + singleEquivMap.put("nn", "no-nyn"); + singleEquivMap.put("no-bok", "nb"); + singleEquivMap.put("no-nyn", "nn"); + singleEquivMap.put("nsl", "sgn-no"); + singleEquivMap.put("nun", "ayx"); + singleEquivMap.put("nv", "i-navajo"); + singleEquivMap.put("opa", "ibi"); + singleEquivMap.put("ppr", "lcq"); + singleEquivMap.put("psr", "sgn-pt"); + singleEquivMap.put("pwn", "i-pwn"); + singleEquivMap.put("ras", "tie"); + singleEquivMap.put("ro", "mo"); + singleEquivMap.put("sca", "hle"); + singleEquivMap.put("sfb", "sgn-be-fr"); + singleEquivMap.put("sfs", "sgn-za"); + singleEquivMap.put("sgg", "sgn-ch-de"); + singleEquivMap.put("sgn-be-fr", "sfb"); + singleEquivMap.put("sgn-be-nl", "vgt"); + singleEquivMap.put("sgn-br", "bzs"); + singleEquivMap.put("sgn-ch-de", "sgg"); + singleEquivMap.put("sgn-co", "csn"); + singleEquivMap.put("sgn-de", "gsg"); + singleEquivMap.put("sgn-dk", "dsl"); + singleEquivMap.put("sgn-es", "ssp"); + singleEquivMap.put("sgn-fr", "fsl"); + singleEquivMap.put("sgn-gb", "bfi"); + singleEquivMap.put("sgn-gr", "gss"); + singleEquivMap.put("sgn-ie", "isg"); + singleEquivMap.put("sgn-it", "ise"); + singleEquivMap.put("sgn-jp", "jsl"); + singleEquivMap.put("sgn-mx", "mfs"); + singleEquivMap.put("sgn-ni", "ncs"); + singleEquivMap.put("sgn-nl", "dse"); + singleEquivMap.put("sgn-no", "nsl"); + singleEquivMap.put("sgn-pt", "psr"); + singleEquivMap.put("sgn-se", "swl"); + singleEquivMap.put("sgn-us", "ase"); + singleEquivMap.put("sgn-za", "sfs"); + singleEquivMap.put("ssp", "sgn-es"); + singleEquivMap.put("swl", "sgn-se"); + singleEquivMap.put("tao", "i-tao"); + singleEquivMap.put("tay", "i-tay"); + singleEquivMap.put("tie", "ras"); + singleEquivMap.put("tkk", "twm"); + singleEquivMap.put("tlh", "i-klingon"); + singleEquivMap.put("tlw", "weo"); + singleEquivMap.put("tsu", "i-tsu"); + singleEquivMap.put("twm", "tkk"); + singleEquivMap.put("vgt", "sgn-be-nl"); + singleEquivMap.put("weo", "tlw"); + singleEquivMap.put("wuu", "zh-wuu"); + singleEquivMap.put("xch", "cmk"); + singleEquivMap.put("yi", "ji"); + singleEquivMap.put("yma", "lrr"); + singleEquivMap.put("yue", "zh-yue"); + singleEquivMap.put("zh-cmn-hans", "cmn-hans"); + singleEquivMap.put("zh-cmn-hant", "cmn-hant"); + singleEquivMap.put("zh-gan", "gan"); + singleEquivMap.put("zh-min-nan", "nan"); + singleEquivMap.put("zh-wuu", "wuu"); + singleEquivMap.put("zh-xiang", "hsn"); + singleEquivMap.put("zh-yue", "yue"); + + multiEquivsMap.put("ccq", new String[] {"rki", "ybd"}); + multiEquivsMap.put("cmn", new String[] {"zh-guoyu", "zh-cmn"}); + multiEquivsMap.put("drw", new String[] {"prs", "tnf"}); + multiEquivsMap.put("hak", new String[] {"i-hak", "zh-hakka"}); + multiEquivsMap.put("i-hak", new String[] {"hak", "zh-hakka"}); + multiEquivsMap.put("mry", new String[] {"mst", "myt"}); + multiEquivsMap.put("mst", new String[] {"mry", "myt"}); + multiEquivsMap.put("myt", new String[] {"mry", "mst"}); + multiEquivsMap.put("prs", new String[] {"drw", "tnf"}); + multiEquivsMap.put("rki", new String[] {"ccq", "ybd"}); + multiEquivsMap.put("tnf", new String[] {"prs", "drw"}); + multiEquivsMap.put("ybd", new String[] {"rki", "ccq"}); + multiEquivsMap.put("zh-cmn", new String[] {"cmn", "zh-guoyu"}); + multiEquivsMap.put("zh-guoyu", new String[] {"cmn", "zh-cmn"}); + multiEquivsMap.put("zh-hakka", new String[] {"hak", "i-hak"}); + + regionVariantEquivMap.put("-alalc97", "-heploc"); + regionVariantEquivMap.put("-bu", "-mm"); + regionVariantEquivMap.put("-cd", "-zr"); + regionVariantEquivMap.put("-dd", "-de"); + regionVariantEquivMap.put("-de", "-dd"); + regionVariantEquivMap.put("-fr", "-fx"); + regionVariantEquivMap.put("-fx", "-fr"); + regionVariantEquivMap.put("-heploc", "-alalc97"); + regionVariantEquivMap.put("-mm", "-bu"); + regionVariantEquivMap.put("-tl", "-tp"); + regionVariantEquivMap.put("-tp", "-tl"); + regionVariantEquivMap.put("-yd", "-ye"); + regionVariantEquivMap.put("-ye", "-yd"); + regionVariantEquivMap.put("-zr", "-cd"); + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/share/classes/sun/util/locale/LocaleMatcher.java Thu Oct 11 16:59:50 2012 -0700 @@ -0,0 +1,455 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.util.locale; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Locale; +import java.util.Locale.*; +import static java.util.Locale.FilteringMode.*; +import static java.util.Locale.LanguageRange.*; +import java.util.Map; +import java.util.Set; + +/** + * Implementation for BCP47 Locale matching + * + */ +public final class LocaleMatcher { + + public static List<Locale> filter(List<LanguageRange> priorityList, + Collection<Locale> locales, + FilteringMode mode) { + if (priorityList.isEmpty() || locales.isEmpty()) { + return new ArrayList<>(); // need to return a empty mutable List + } + + // Create a list of language tags to be matched. + List<String> tags = new ArrayList<>(); + for (Locale locale : locales) { + tags.add(locale.toLanguageTag()); + } + + // Filter language tags. + List<String> filteredTags = filterTags(priorityList, tags, mode); + + // Create a list of matching locales. + List<Locale> filteredLocales = new ArrayList<>(filteredTags.size()); + for (String tag : filteredTags) { + filteredLocales.add(Locale.forLanguageTag(tag)); + } + + return filteredLocales; + } + + public static List<String> filterTags(List<LanguageRange> priorityList, + Collection<String> tags, + FilteringMode mode) { + if (priorityList.isEmpty() || tags.isEmpty()) { + return new ArrayList<>(); // need to return a empty mutable List + } + + ArrayList<LanguageRange> list; + if (mode == EXTENDED_FILTERING) { + return filterExtended(priorityList, tags); + } else { + list = new ArrayList<>(); + for (LanguageRange lr : priorityList) { + String range = lr.getRange(); + if (range.startsWith("*-") + || range.indexOf("-*") != -1) { // Extended range + if (mode == AUTOSELECT_FILTERING) { + return filterExtended(priorityList, tags); + } else if (mode == MAP_EXTENDED_RANGES) { + if (range.charAt(0) == '*') { + range = "*"; + } else { + range = range.replaceAll("-[*]", ""); + } + list.add(new LanguageRange(range, lr.getWeight())); + } else if (mode == REJECT_EXTENDED_RANGES) { + throw new IllegalArgumentException("An extended range \"" + + range + + "\" found in REJECT_EXTENDED_RANGES mode."); + } + } else { // Basic range + list.add(lr); + } + } + + return filterBasic(list, tags); + } + } + + private static List<String> filterBasic(List<LanguageRange> priorityList, + Collection<String> tags) { + List<String> list = new ArrayList<>(); + for (LanguageRange lr : priorityList) { + String range = lr.getRange(); + if (range.equals("*")) { + return new ArrayList<String>(tags); + } else { + for (String tag : tags) { + tag = tag.toLowerCase(); + if (tag.startsWith(range)) { + int len = range.length(); + if ((tag.length() == len || tag.charAt(len) == '-') + && !list.contains(tag)) { + list.add(tag); + } + } + } + } + } + + return list; + } + + private static List<String> filterExtended(List<LanguageRange> priorityList, + Collection<String> tags) { + List<String> list = new ArrayList<>(); + for (LanguageRange lr : priorityList) { + String range = lr.getRange(); + if (range.equals("*")) { + return new ArrayList<String>(tags); + } + String[] rangeSubtags = range.split("-"); + for (String tag : tags) { + tag = tag.toLowerCase(); + String[] tagSubtags = tag.split("-"); + if (!rangeSubtags[0].equals(tagSubtags[0]) + && !rangeSubtags[0].equals("*")) { + continue; + } + + int rangeIndex = 1; + int tagIndex = 1; + + while (rangeIndex < rangeSubtags.length + && tagIndex < tagSubtags.length) { + if (rangeSubtags[rangeIndex].equals("*")) { + rangeIndex++; + } else if (rangeSubtags[rangeIndex].equals(tagSubtags[tagIndex])) { + rangeIndex++; + tagIndex++; + } else if (tagSubtags[tagIndex].length() == 1 + && !tagSubtags[tagIndex].equals("*")) { + break; + } else { + tagIndex++; + } + } + + if (rangeSubtags.length == rangeIndex && !list.contains(tag)) { + list.add(tag); + } + } + } + + return list; + } + + public static Locale lookup(List<LanguageRange> priorityList, + Collection<Locale> locales) { + if (priorityList.isEmpty() || locales.isEmpty()) { + return null; + } + + // Create a list of language tags to be matched. + List<String> tags = new ArrayList<>(); + for (Locale locale : locales) { + tags.add(locale.toLanguageTag()); + } + + // Look up a language tags. + String lookedUpTag = lookupTag(priorityList, tags); + + if (lookedUpTag == null) { + return null; + } else { + return Locale.forLanguageTag(lookedUpTag); + } + } + + public static String lookupTag(List<LanguageRange> priorityList, + Collection<String> tags) { + if (priorityList.isEmpty() || tags.isEmpty()) { + return null; + } + + for (LanguageRange lr : priorityList) { + String range = lr.getRange(); + + // Special language range ("*") is ignored in lookup. + if (range.equals("*")) { + continue; + } + + String rangeForRegex = range.replaceAll("\\x2A", "\\\\p{Alnum}*"); + while (rangeForRegex.length() > 0) { + for (String tag : tags) { + tag = tag.toLowerCase(); + if (tag.matches(rangeForRegex)) { + return tag; + } + } + + // Truncate from the end.... + int index = rangeForRegex.lastIndexOf('-'); + if (index >= 0) { + rangeForRegex = rangeForRegex.substring(0, index); + + // if range ends with an extension key, truncate it. + if (rangeForRegex.lastIndexOf('-') == rangeForRegex.length()-2) { + rangeForRegex = + rangeForRegex.substring(0, rangeForRegex.length()-2); + } + } else { + rangeForRegex = ""; + } + } + } + + return null; + } + + public static List<LanguageRange> parse(String ranges) { + ranges = ranges.replaceAll(" ", "").toLowerCase(); + if (ranges.startsWith("accept-language:")) { + ranges = ranges.substring(16); // delete unnecessary prefix + } + + String[] langRanges = ranges.split(","); + List<LanguageRange> list = new ArrayList<>(langRanges.length); + List<String> tempList = new ArrayList<>(); + int numOfRanges = 0; + + for (String range : langRanges) { + int index; + String r; + double w; + + if ((index = range.indexOf(";q=")) == -1) { + r = range; + w = MAX_WEIGHT; + } else { + r = range.substring(0, index); + index += 3; + try { + w = Double.parseDouble(range.substring(index)); + } + catch (Exception e) { + throw new IllegalArgumentException("weight=\"" + + range.substring(index) + + "\" for language range \"" + r + "\""); + } + + if (w < MIN_WEIGHT || w > MAX_WEIGHT) { + throw new IllegalArgumentException("weight=" + w + + " for language range \"" + r + + "\". It must be between " + MIN_WEIGHT + + " and " + MAX_WEIGHT + "."); + } + } + + if (!tempList.contains(r)) { + LanguageRange lr = new LanguageRange(r, w); + index = numOfRanges; + for (int j = 0; j < numOfRanges; j++) { + if (list.get(j).getWeight() < w) { + index = j; + break; + } + } + list.add(index, lr); + numOfRanges++; + tempList.add(r); + + // Check if the range has an equivalent using IANA LSR data. + // If yes, add it to the User's Language Priority List as well. + + // aa-XX -> aa-YY + String equivalent; + if ((equivalent = getEquivalentForRegionAndVariant(r)) != null + && !tempList.contains(equivalent)) { + list.add(index+1, new LanguageRange(equivalent, w)); + numOfRanges++; + tempList.add(equivalent); + } + + String[] equivalents; + if ((equivalents = getEquivalentsForLanguage(r)) != null) { + for (String equiv: equivalents) { + // aa-XX -> bb-XX(, cc-XX) + if (!tempList.contains(equiv)) { + list.add(index+1, new LanguageRange(equiv, w)); + numOfRanges++; + tempList.add(equiv); + } + + // bb-XX -> bb-YY(, cc-YY) + equivalent = getEquivalentForRegionAndVariant(equiv); + if (equivalent != null + && !tempList.contains(equivalent)) { + list.add(index+1, new LanguageRange(equivalent, w)); + numOfRanges++; + tempList.add(equivalent); + } + } + } + } + } + + return list; + } + + private static String[] getEquivalentsForLanguage(String range) { + String r = range; + + while (r.length() > 0) { + if (LocaleEquivalentMaps.singleEquivMap.containsKey(r)) { + String equiv = LocaleEquivalentMaps.singleEquivMap.get(r); + // Return immediately for performance if the first matching + // subtag is found. + return new String[] {range.replaceFirst(r, equiv)}; + } else if (LocaleEquivalentMaps.multiEquivsMap.containsKey(r)) { + String[] equivs = LocaleEquivalentMaps.multiEquivsMap.get(r); + for (int i = 0; i < equivs.length; i++) { + equivs[i] = range.replaceFirst(r, equivs[i]); + } + return equivs; + } + + // Truncate the last subtag simply. + int index = r.lastIndexOf('-'); + if (index == -1) { + break; + } + r = r.substring(0, index); + } + + return null; + } + + private static String getEquivalentForRegionAndVariant(String range) { + int extensionKeyIndex = getExtentionKeyIndex(range); + + for (String subtag : LocaleEquivalentMaps.regionVariantEquivMap.keySet()) { + int index; + if ((index = range.indexOf(subtag)) != -1) { + // Check if the matching text is a valid region or variant. + if (extensionKeyIndex != Integer.MIN_VALUE + && index > extensionKeyIndex) { + continue; + } + + int len = index + subtag.length(); + if (range.length() == len || range.charAt(len) == '-') { + return range.replaceFirst(subtag, LocaleEquivalentMaps.regionVariantEquivMap.get(subtag)); + } + } + } + + return null; + } + + private static int getExtentionKeyIndex(String s) { + char[] c = s.toCharArray(); + int index = Integer.MIN_VALUE; + for (int i = 1; i < c.length; i++) { + if (c[i] == '-') { + if (i - index == 2) { + return index; + } else { + index = i; + } + } + } + return Integer.MIN_VALUE; + } + + public static List<LanguageRange> mapEquivalents( + List<LanguageRange>priorityList, + Map<String, List<String>> map) { + if (priorityList.isEmpty()) { + return new ArrayList<>(); // need to return a empty mutable List + } + if (map == null || map.isEmpty()) { + return new ArrayList<LanguageRange>(priorityList); + } + + // Create a map, key=originalKey.toLowerCaes(), value=originalKey + Map<String, String> keyMap = new HashMap<>(); + for (String key : map.keySet()) { + keyMap.put(key.toLowerCase(), key); + } + + List<LanguageRange> list = new ArrayList<>(); + for (LanguageRange lr : priorityList) { + String range = lr.getRange(); + String r = range; + boolean hasEquivalent = false; + + while (r.length() > 0) { + if (keyMap.containsKey(r)) { + hasEquivalent = true; + List<String> equivalents = map.get(keyMap.get(r)); + if (equivalents != null) { + int len = r.length(); + for (String equivalent : equivalents) { + list.add(new LanguageRange(equivalent.toLowerCase() + + range.substring(len), + lr.getWeight())); + } + } + // Return immediately if the first matching subtag is found. + break; + } + + // Truncate the last subtag simply. + int index = r.lastIndexOf('-'); + if (index == -1) { + break; + } + r = r.substring(0, index); + } + + if (!hasEquivalent) { + list.add(lr); + } + } + + return list; + } + + private LocaleMatcher() {} + +}
--- a/jdk/src/share/classes/sun/util/locale/provider/CalendarDataProviderImpl.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/sun/util/locale/provider/CalendarDataProviderImpl.java Thu Oct 11 16:59:50 2012 -0700 @@ -137,7 +137,7 @@ @Override public boolean isSupportedLocale(Locale locale) { - if (locale == Locale.ROOT) { + if (Locale.ROOT.equals(locale)) { return true; } String calendarType = null;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/share/classes/sun/util/locale/provider/FallbackLocaleProviderAdapter.java Thu Oct 11 16:59:50 2012 -0700 @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.util.locale.provider; + +/** + * FallbackProviderAdapter implementation. + * + * @author Naoto Sato + */ +public class FallbackLocaleProviderAdapter extends JRELocaleProviderAdapter { + + /** + * Returns the type of this LocaleProviderAdapter + */ + @Override + public LocaleProviderAdapter.Type getAdapterType() { + return Type.FALLBACK; + } +}
--- a/jdk/src/share/classes/sun/util/locale/provider/JRELocaleProviderAdapter.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/sun/util/locale/provider/JRELocaleProviderAdapter.java Thu Oct 11 16:59:50 2012 -0700 @@ -71,7 +71,7 @@ */ @Override public LocaleProviderAdapter.Type getAdapterType() { - return LocaleProviderAdapter.Type.JRE; + return Type.JRE; } /** @@ -125,7 +125,7 @@ public BreakIteratorProvider getBreakIteratorProvider() { if (breakIteratorProvider == null) { BreakIteratorProvider provider = new BreakIteratorProviderImpl(getAdapterType(), - getLanguateTagSet("FormatData")); + getLanguageTagSet("FormatData")); synchronized (this) { if (breakIteratorProvider == null) { breakIteratorProvider = provider; @@ -139,7 +139,7 @@ public CollatorProvider getCollatorProvider() { if (collatorProvider == null) { CollatorProvider provider = new CollatorProviderImpl(getAdapterType(), - getLanguateTagSet("CollationData")); + getLanguageTagSet("CollationData")); synchronized (this) { if (collatorProvider == null) { collatorProvider = provider; @@ -153,7 +153,7 @@ public DateFormatProvider getDateFormatProvider() { if (dateFormatProvider == null) { DateFormatProvider provider = new DateFormatProviderImpl(getAdapterType(), - getLanguateTagSet("FormatData")); + getLanguageTagSet("FormatData")); synchronized (this) { if (dateFormatProvider == null) { dateFormatProvider = provider; @@ -167,7 +167,7 @@ public DateFormatSymbolsProvider getDateFormatSymbolsProvider() { if (dateFormatSymbolsProvider == null) { DateFormatSymbolsProvider provider = new DateFormatSymbolsProviderImpl(getAdapterType(), - getLanguateTagSet("FormatData")); + getLanguageTagSet("FormatData")); synchronized (this) { if (dateFormatSymbolsProvider == null) { dateFormatSymbolsProvider = provider; @@ -180,7 +180,7 @@ @Override public DecimalFormatSymbolsProvider getDecimalFormatSymbolsProvider() { if (decimalFormatSymbolsProvider == null) { - DecimalFormatSymbolsProvider provider = new DecimalFormatSymbolsProviderImpl(getAdapterType(), getLanguateTagSet("FormatData")); + DecimalFormatSymbolsProvider provider = new DecimalFormatSymbolsProviderImpl(getAdapterType(), getLanguageTagSet("FormatData")); synchronized (this) { if (decimalFormatSymbolsProvider == null) { decimalFormatSymbolsProvider = provider; @@ -194,7 +194,7 @@ public NumberFormatProvider getNumberFormatProvider() { if (numberFormatProvider == null) { NumberFormatProvider provider = new NumberFormatProviderImpl(getAdapterType(), - getLanguateTagSet("FormatData")); + getLanguageTagSet("FormatData")); synchronized (this) { if (numberFormatProvider == null) { numberFormatProvider = provider; @@ -211,7 +211,7 @@ public CurrencyNameProvider getCurrencyNameProvider() { if (currencyNameProvider == null) { CurrencyNameProvider provider = new CurrencyNameProviderImpl(getAdapterType(), - getLanguateTagSet("CurrencyNames")); + getLanguageTagSet("CurrencyNames")); synchronized (this) { if (currencyNameProvider == null) { currencyNameProvider = provider; @@ -225,7 +225,7 @@ public LocaleNameProvider getLocaleNameProvider() { if (localeNameProvider == null) { LocaleNameProvider provider = new LocaleNameProviderImpl(getAdapterType(), - getLanguateTagSet("LocaleNames")); + getLanguageTagSet("LocaleNames")); synchronized (this) { if (localeNameProvider == null) { localeNameProvider = provider; @@ -239,7 +239,7 @@ public TimeZoneNameProvider getTimeZoneNameProvider() { if (timeZoneNameProvider == null) { TimeZoneNameProvider provider = new TimeZoneNameProviderImpl(getAdapterType(), - getLanguateTagSet("TimeZoneNames")); + getLanguageTagSet("TimeZoneNames")); synchronized (this) { if (timeZoneNameProvider == null) { timeZoneNameProvider = provider; @@ -253,8 +253,8 @@ public CalendarDataProvider getCalendarDataProvider() { if (calendarDataProvider == null) { Set<String> set = new HashSet<>(); - set.addAll(getLanguateTagSet("FormatData")); - set.addAll(getLanguateTagSet("CalendarData")); + set.addAll(getLanguageTagSet("FormatData")); + set.addAll(getLanguageTagSet("CalendarData")); CalendarDataProvider provider = new CalendarDataProviderImpl(getAdapterType(), set); synchronized (this) { @@ -302,7 +302,7 @@ return AvailableJRELocales.localeList.clone(); } - public Set<String> getLanguateTagSet(String category) { + public Set<String> getLanguageTagSet(String category) { Set<String> tagset = langtagSets.get(category); if (tagset == null) { tagset = createLanguageTagSet(category); @@ -328,6 +328,10 @@ } tagset.add(token); } + + // ensure en-US is there (mandated by the spec, e.g. Collator.getAvailableLocales()) + tagset.add("en-US"); + return tagset; }
--- a/jdk/src/share/classes/sun/util/locale/provider/LocaleProviderAdapter.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/share/classes/sun/util/locale/provider/LocaleProviderAdapter.java Thu Oct 11 16:59:50 2012 -0700 @@ -59,7 +59,8 @@ JRE("sun.util.resources", "sun.text.resources"), CLDR("sun.util.resources.cldr", "sun.text.resources.cldr"), SPI, - HOST; + HOST, + FALLBACK("sun.util.resources", "sun.text.resources"); private final String UTIL_RESOURCES_PACKAGE; private final String TEXT_RESOURCES_PACKAGE; @@ -111,41 +112,49 @@ */ private static LocaleProviderAdapter hostLocaleProviderAdapter = null; + /** + * FALLBACK Locale Data Adapter instance. It's basically the same with JRE, but only kicks + * in for the root locale. + */ + private static LocaleProviderAdapter fallbackLocaleProviderAdapter = null; + static { String order = AccessController.doPrivileged( new sun.security.action.GetPropertyAction("java.locale.providers")); - // Override adapterPreference with the properties one - if (order != null && order.length() != 0) { - String[] types = order.split(","); - List<Type> typeList = new ArrayList<>(); - for (String type : types) { - try { - Type aType = Type.valueOf(type.trim().toUpperCase(Locale.ROOT)); + // Override adapterPreference with the properties one + if (order != null && order.length() != 0) { + String[] types = order.split(","); + List<Type> typeList = new ArrayList<>(); + for (String type : types) { + try { + Type aType = Type.valueOf(type.trim().toUpperCase(Locale.ROOT)); - // load adapter if necessary - switch (aType) { - case CLDR: - cldrLocaleProviderAdapter = new CLDRLocaleProviderAdapter(); - break; - case HOST: - hostLocaleProviderAdapter = new HostLocaleProviderAdapter(); - break; - } - typeList.add(aType); - } catch (// could be caused by the user specifying wrong - // provider name or format in the system property - IllegalArgumentException | - UnsupportedOperationException e) { - LocaleServiceProviderPool.config(LocaleProviderAdapter.class, e.toString()); - } - } + // load adapter if necessary + switch (aType) { + case CLDR: + cldrLocaleProviderAdapter = new CLDRLocaleProviderAdapter(); + break; + case HOST: + hostLocaleProviderAdapter = new HostLocaleProviderAdapter(); + break; + } + typeList.add(aType); + } catch (IllegalArgumentException | UnsupportedOperationException e) { + // could be caused by the user specifying wrong + // provider name or format in the system property + LocaleServiceProviderPool.config(LocaleProviderAdapter.class, e.toString()); + } + } - if (!typeList.contains(Type.JRE)) { - // Append JRE as the last resort. - typeList.add(Type.JRE); - } - adapterPreference = typeList.toArray(new Type[0]); - } + if (!typeList.isEmpty()) { + if (!typeList.contains(Type.JRE)) { + // Append FALLBACK as the last resort. + fallbackLocaleProviderAdapter = new FallbackLocaleProviderAdapter(); + typeList.add(Type.FALLBACK); + } + adapterPreference = typeList.toArray(new Type[0]); + } + } } @@ -162,6 +171,8 @@ return spiLocaleProviderAdapter; case HOST: return hostLocaleProviderAdapter; + case FALLBACK: + return fallbackLocaleProviderAdapter; default: throw new InternalError("unknown locale data adapter type"); } @@ -173,7 +184,7 @@ public static LocaleProviderAdapter getResourceBundleBased() { for (Type type : getAdapterPreference()) { - if (type == Type.JRE || type == Type.CLDR) { + if (type == Type.JRE || type == Type.CLDR || type == Type.FALLBACK) { return forType(type); } } @@ -218,8 +229,8 @@ } } - // returns the adapter for JRE as the last resort - return jreLocaleProviderAdapter; + // returns the adapter for FALLBACK as the last resort + return fallbackLocaleProviderAdapter; } private static LocaleProviderAdapter findAdapter(Class<? extends LocaleServiceProvider> providerClass, @@ -238,18 +249,24 @@ /** * A utility method for implementing the default LocaleServiceProvider.isSupportedLocale - * for the JRE and CLDR adapters. + * for the JRE, CLDR, and FALLBACK adapters. */ static boolean isSupportedLocale(Locale locale, LocaleProviderAdapter.Type type, Set<String> langtags) { - assert type == Type.JRE || type == Type.CLDR; - if (locale == Locale.ROOT) { + assert type == Type.JRE || type == Type.CLDR || type == Type.FALLBACK; + if (Locale.ROOT.equals(locale)) { return true; } + + if (type == Type.FALLBACK) { + // no other locales except ROOT are supported for FALLBACK + return false; + } + locale = locale.stripExtensions(); if (langtags.contains(locale.toLanguageTag())) { return true; } - if (type == LocaleProviderAdapter.Type.JRE) { + if (type == Type.JRE) { String oldname = locale.toString().replace('_', '-'); return langtags.contains(oldname); }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/share/classes/sun/util/spi/XmlPropertiesProvider.java Thu Oct 11 16:59:50 2012 -0700 @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.util.spi; + +import java.util.Properties; +import java.util.InvalidPropertiesFormatException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.IOException; + +/** + * Service-provider class for loading and storing {@link Properites} in XML + * format. + * + * @see Properties#loadFromXML + * @see Properties#storeToXML + */ + +public abstract class XmlPropertiesProvider { + + /** + * Initializes a new instance of this class. + */ + protected XmlPropertiesProvider() { + // do nothing for now + } + + /** + * Loads all of the properties represented by the XML document on the + * specified input stream into a properties table. + * + * @param props the properties table to populate + * @param in the input stream from which to read the XML document + * @throws IOException if reading from the specified input stream fails + * @throws InvalidPropertiesFormatException Data on input stream does not + * constitute a valid XML document with the mandated document type. + * + * @see Properties#loadFromXML + */ + public abstract void load(Properties props, InputStream in) + throws IOException, InvalidPropertiesFormatException; + + /** + * Emits an XML document representing all of the properties in a given + * table. + * + * @param props the properies to store + * @param out the output stream on which to emit the XML document. + * @param comment a description of the property list, can be @{code null} + * @param encoding the name of a supported character encoding + * + * @throws IOException if writing to the specified output stream fails + * @throws NullPointerException if {@code out} is null. + * @throws ClassCastException if this {@code Properties} object + * contains any keys or values that are not + * {@code Strings}. + * + * @see Properties#storeToXML + */ + public abstract void store(Properties props, OutputStream out, + String comment, String encoding) + throws IOException; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/share/classes/sun/util/xml/META-INF/services/sun.util.spi.XmlPropertiesProvider Thu Oct 11 16:59:50 2012 -0700 @@ -0,0 +1,1 @@ +sun.util.xml.PlatformXmlPropertiesProvider
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/share/classes/sun/util/xml/PlatformXmlPropertiesProvider.java Thu Oct 11 16:59:50 2012 -0700 @@ -0,0 +1,207 @@ +/* + * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.util.xml; + +import java.io.*; +import java.util.*; +import org.xml.sax.*; +import org.w3c.dom.*; +import javax.xml.parsers.*; +import javax.xml.transform.*; +import javax.xml.transform.dom.*; +import javax.xml.transform.stream.*; + +import sun.util.spi.XmlPropertiesProvider; + +/** + * A {@code XmlPropertiesProvider} implementation that uses the JAXP API + * for parsing. + * + * @author Michael McCloskey + * @since 1.3 + */ +public class PlatformXmlPropertiesProvider extends XmlPropertiesProvider { + + // XML loading and saving methods for Properties + + // The required DTD URI for exported properties + private static final String PROPS_DTD_URI = + "http://java.sun.com/dtd/properties.dtd"; + + private static final String PROPS_DTD = + "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + + "<!-- DTD for properties -->" + + "<!ELEMENT properties ( comment?, entry* ) >"+ + "<!ATTLIST properties" + + " version CDATA #FIXED \"1.0\">" + + "<!ELEMENT comment (#PCDATA) >" + + "<!ELEMENT entry (#PCDATA) >" + + "<!ATTLIST entry " + + " key CDATA #REQUIRED>"; + + /** + * Version number for the format of exported properties files. + */ + private static final String EXTERNAL_XML_VERSION = "1.0"; + + @Override + public void load(Properties props, InputStream in) + throws IOException, InvalidPropertiesFormatException + { + Document doc = null; + try { + doc = getLoadingDoc(in); + } catch (SAXException saxe) { + throw new InvalidPropertiesFormatException(saxe); + } + Element propertiesElement = doc.getDocumentElement(); + String xmlVersion = propertiesElement.getAttribute("version"); + if (xmlVersion.compareTo(EXTERNAL_XML_VERSION) > 0) + throw new InvalidPropertiesFormatException( + "Exported Properties file format version " + xmlVersion + + " is not supported. This java installation can read" + + " versions " + EXTERNAL_XML_VERSION + " or older. You" + + " may need to install a newer version of JDK."); + importProperties(props, propertiesElement); + } + + static Document getLoadingDoc(InputStream in) + throws SAXException, IOException + { + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + dbf.setIgnoringElementContentWhitespace(true); + dbf.setValidating(true); + dbf.setCoalescing(true); + dbf.setIgnoringComments(true); + try { + DocumentBuilder db = dbf.newDocumentBuilder(); + db.setEntityResolver(new Resolver()); + db.setErrorHandler(new EH()); + InputSource is = new InputSource(in); + return db.parse(is); + } catch (ParserConfigurationException x) { + throw new Error(x); + } + } + + static void importProperties(Properties props, Element propertiesElement) { + NodeList entries = propertiesElement.getChildNodes(); + int numEntries = entries.getLength(); + int start = numEntries > 0 && + entries.item(0).getNodeName().equals("comment") ? 1 : 0; + for (int i=start; i<numEntries; i++) { + Element entry = (Element)entries.item(i); + if (entry.hasAttribute("key")) { + Node n = entry.getFirstChild(); + String val = (n == null) ? "" : n.getNodeValue(); + props.setProperty(entry.getAttribute("key"), val); + } + } + } + + @Override + public void store(Properties props, OutputStream os, String comment, + String encoding) + throws IOException + { + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + DocumentBuilder db = null; + try { + db = dbf.newDocumentBuilder(); + } catch (ParserConfigurationException pce) { + assert(false); + } + Document doc = db.newDocument(); + Element properties = (Element) + doc.appendChild(doc.createElement("properties")); + + if (comment != null) { + Element comments = (Element)properties.appendChild( + doc.createElement("comment")); + comments.appendChild(doc.createTextNode(comment)); + } + + synchronized (props) { + for (String key : props.stringPropertyNames()) { + Element entry = (Element)properties.appendChild( + doc.createElement("entry")); + entry.setAttribute("key", key); + entry.appendChild(doc.createTextNode(props.getProperty(key))); + } + } + emitDocument(doc, os, encoding); + } + + static void emitDocument(Document doc, OutputStream os, String encoding) + throws IOException + { + TransformerFactory tf = TransformerFactory.newInstance(); + Transformer t = null; + try { + t = tf.newTransformer(); + t.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, PROPS_DTD_URI); + t.setOutputProperty(OutputKeys.INDENT, "yes"); + t.setOutputProperty(OutputKeys.METHOD, "xml"); + t.setOutputProperty(OutputKeys.ENCODING, encoding); + } catch (TransformerConfigurationException tce) { + assert(false); + } + DOMSource doms = new DOMSource(doc); + StreamResult sr = new StreamResult(os); + try { + t.transform(doms, sr); + } catch (TransformerException te) { + throw new IOException(te); + } + } + + private static class Resolver implements EntityResolver { + public InputSource resolveEntity(String pid, String sid) + throws SAXException + { + if (sid.equals(PROPS_DTD_URI)) { + InputSource is; + is = new InputSource(new StringReader(PROPS_DTD)); + is.setSystemId(PROPS_DTD_URI); + return is; + } + throw new SAXException("Invalid system identifier: " + sid); + } + } + + private static class EH implements ErrorHandler { + public void error(SAXParseException x) throws SAXException { + throw x; + } + public void fatalError(SAXParseException x) throws SAXException { + throw x; + } + public void warning(SAXParseException x) throws SAXException { + throw x; + } + } + +}
--- a/jdk/src/share/classes/sun/util/xml/XMLUtils.java Thu Oct 11 09:50:14 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,207 +0,0 @@ -/* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package sun.util.xml; - -import java.io.*; -import java.util.*; -import org.xml.sax.*; -import org.xml.sax.helpers.*; -import org.w3c.dom.*; -import javax.xml.parsers.*; -import javax.xml.transform.*; -import javax.xml.transform.dom.*; -import javax.xml.transform.stream.*; - -/** - * A class used to aid in Properties load and save in XML. Keeping this - * code outside of Properties helps reduce the number of classes loaded - * when Properties is loaded. - * - * @author Michael McCloskey - * @since 1.3 - */ -public class XMLUtils { - - // XML loading and saving methods for Properties - - // The required DTD URI for exported properties - private static final String PROPS_DTD_URI = - "http://java.sun.com/dtd/properties.dtd"; - - private static final String PROPS_DTD = - "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + - "<!-- DTD for properties -->" + - "<!ELEMENT properties ( comment?, entry* ) >"+ - "<!ATTLIST properties" + - " version CDATA #FIXED \"1.0\">" + - "<!ELEMENT comment (#PCDATA) >" + - "<!ELEMENT entry (#PCDATA) >" + - "<!ATTLIST entry " + - " key CDATA #REQUIRED>"; - - /** - * Version number for the format of exported properties files. - */ - private static final String EXTERNAL_XML_VERSION = "1.0"; - - public static void load(Properties props, InputStream in) - throws IOException, InvalidPropertiesFormatException - { - Document doc = null; - try { - doc = getLoadingDoc(in); - } catch (SAXException saxe) { - throw new InvalidPropertiesFormatException(saxe); - } - Element propertiesElement = doc.getDocumentElement(); - String xmlVersion = propertiesElement.getAttribute("version"); - if (xmlVersion.compareTo(EXTERNAL_XML_VERSION) > 0) - throw new InvalidPropertiesFormatException( - "Exported Properties file format version " + xmlVersion + - " is not supported. This java installation can read" + - " versions " + EXTERNAL_XML_VERSION + " or older. You" + - " may need to install a newer version of JDK."); - importProperties(props, propertiesElement); - } - - static Document getLoadingDoc(InputStream in) - throws SAXException, IOException - { - DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - dbf.setIgnoringElementContentWhitespace(true); - dbf.setValidating(true); - dbf.setCoalescing(true); - dbf.setIgnoringComments(true); - try { - DocumentBuilder db = dbf.newDocumentBuilder(); - db.setEntityResolver(new Resolver()); - db.setErrorHandler(new EH()); - InputSource is = new InputSource(in); - return db.parse(is); - } catch (ParserConfigurationException x) { - throw new Error(x); - } - } - - static void importProperties(Properties props, Element propertiesElement) { - NodeList entries = propertiesElement.getChildNodes(); - int numEntries = entries.getLength(); - int start = numEntries > 0 && - entries.item(0).getNodeName().equals("comment") ? 1 : 0; - for (int i=start; i<numEntries; i++) { - Element entry = (Element)entries.item(i); - if (entry.hasAttribute("key")) { - Node n = entry.getFirstChild(); - String val = (n == null) ? "" : n.getNodeValue(); - props.setProperty(entry.getAttribute("key"), val); - } - } - } - - public static void save(Properties props, OutputStream os, String comment, - String encoding) - throws IOException - { - DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - DocumentBuilder db = null; - try { - db = dbf.newDocumentBuilder(); - } catch (ParserConfigurationException pce) { - assert(false); - } - Document doc = db.newDocument(); - Element properties = (Element) - doc.appendChild(doc.createElement("properties")); - - if (comment != null) { - Element comments = (Element)properties.appendChild( - doc.createElement("comment")); - comments.appendChild(doc.createTextNode(comment)); - } - - synchronized (props) { - for (String key : props.stringPropertyNames()) { - Element entry = (Element)properties.appendChild( - doc.createElement("entry")); - entry.setAttribute("key", key); - entry.appendChild(doc.createTextNode(props.getProperty(key))); - } - } - emitDocument(doc, os, encoding); - } - - static void emitDocument(Document doc, OutputStream os, String encoding) - throws IOException - { - TransformerFactory tf = TransformerFactory.newInstance(); - Transformer t = null; - try { - t = tf.newTransformer(); - t.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, PROPS_DTD_URI); - t.setOutputProperty(OutputKeys.INDENT, "yes"); - t.setOutputProperty(OutputKeys.METHOD, "xml"); - t.setOutputProperty(OutputKeys.ENCODING, encoding); - } catch (TransformerConfigurationException tce) { - assert(false); - } - DOMSource doms = new DOMSource(doc); - StreamResult sr = new StreamResult(os); - try { - t.transform(doms, sr); - } catch (TransformerException te) { - IOException ioe = new IOException(); - ioe.initCause(te); - throw ioe; - } - } - - private static class Resolver implements EntityResolver { - public InputSource resolveEntity(String pid, String sid) - throws SAXException - { - if (sid.equals(PROPS_DTD_URI)) { - InputSource is; - is = new InputSource(new StringReader(PROPS_DTD)); - is.setSystemId(PROPS_DTD_URI); - return is; - } - throw new SAXException("Invalid system identifier: " + sid); - } - } - - private static class EH implements ErrorHandler { - public void error(SAXParseException x) throws SAXException { - throw x; - } - public void fatalError(SAXParseException x) throws SAXException { - throw x; - } - public void warning(SAXParseException x) throws SAXException { - throw x; - } - } - -}
--- a/jdk/src/share/test/pack200/pack.conf Thu Oct 11 09:50:14 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ -# Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# -# -# The config file for the packer, define all the test properties here. -pack.effort=1 -pack.unknown.attribute=error -pack.deflate.hint=false -pack.keep.class.order=true -pack.verbose=1 -
--- a/jdk/src/solaris/classes/sun/java2d/xr/XRDrawImage.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/solaris/classes/sun/java2d/xr/XRDrawImage.java Thu Oct 11 16:59:50 2012 -0700 @@ -27,6 +27,7 @@ import java.awt.*; import java.awt.geom.*; +import java.awt.image.*; import sun.java2d.*; import sun.java2d.loops.*; @@ -45,8 +46,8 @@ SurfaceData srcData = dstData.getSourceSurfaceData(img, SunGraphics2D.TRANSFORM_GENERIC, sg.imageComp, bgColor); - if (srcData != null && !isBgOperation(srcData, bgColor)) { // TODO: Do we bail out on bgBlits? - // && srcData instanceof XRSurfaceData) { + if (srcData != null && !isBgOperation(srcData, bgColor) + && interpType <= AffineTransformOp.TYPE_BILINEAR) { SurfaceType srcType = srcData.getSurfaceType(); SurfaceType dstType = dstData.getSurfaceType();
--- a/jdk/src/solaris/classes/sun/nio/ch/DevPollArrayWrapper.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/solaris/classes/sun/nio/ch/DevPollArrayWrapper.java Thu Oct 11 16:59:50 2012 -0700 @@ -68,7 +68,7 @@ static final short REVENT_OFFSET = 6; // Special value to indicate that an update should be ignored - static final byte CANCELLED = (byte)-1; + static final byte IGNORE = (byte)-1; // Maximum number of open file descriptors static final int OPEN_MAX = IOUtil.fdLimit(); @@ -192,15 +192,15 @@ // events are stored as bytes for efficiency reasons byte b = (byte)mask; - assert (b == mask) && (b != CANCELLED); + assert (b == mask) && (b != IGNORE); setUpdateEvents(fd, b); } } void release(int fd) { synchronized (updateLock) { - // cancel any pending update for this file descriptor - setUpdateEvents(fd, CANCELLED); + // ignore any pending update for this file descriptor + setUpdateEvents(fd, IGNORE); // remove from /dev/poll if (registered.get(fd)) { @@ -236,32 +236,40 @@ while (j < updateCount) { int fd = updateDescriptors[j]; short events = getUpdateEvents(fd); - boolean isRegistered = registered.get(fd); + boolean wasRegistered = registered.get(fd); // events = 0 => POLLREMOVE or do-nothing - if (events != CANCELLED) { + if (events != IGNORE) { if (events == 0) { - if (isRegistered) { + if (wasRegistered) { events = POLLREMOVE; registered.clear(fd); } else { - events = CANCELLED; + events = IGNORE; } } else { - if (!isRegistered) { + if (!wasRegistered) { registered.set(fd); } } } // populate pollfd array with updated event - if (events != CANCELLED) { + if (events != IGNORE) { + // insert POLLREMOVE if changing events + if (wasRegistered && events != POLLREMOVE) { + putPollFD(pollArray, index, fd, POLLREMOVE); + index++; + } putPollFD(pollArray, index, fd, events); index++; - if (index >= NUM_POLLFDS) { + if (index >= (NUM_POLLFDS-1)) { registerMultiple(wfd, pollArray.address(), index); index = 0; } + + // events for this fd now up to date + setUpdateEvents(fd, IGNORE); } j++; }
--- a/jdk/src/solaris/classes/sun/nio/fs/LinuxFileStore.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/solaris/classes/sun/nio/fs/LinuxFileStore.java Thu Oct 11 16:59:50 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -145,6 +145,9 @@ } return xattrEnabled; } + // POSIX attributes not supported on FAT + if (type == PosixFileAttributeView.class && entry().fstype().equals("vfat")) + return false; return super.supportsFileAttributeView(type); }
--- a/jdk/src/solaris/native/java/net/Inet4AddressImpl.c Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/solaris/native/java/net/Inet4AddressImpl.c Thu Oct 11 16:59:50 2012 -0700 @@ -647,9 +647,10 @@ #ifdef __linux__ if (errno != EINVAL && errno != EHOSTUNREACH) /* - * On some Linuxes, when bound to the loopback interface, sendto - * will fail and errno will be set to EINVAL or EHOSTUNREACH. - * When that happens, don't throw an exception, just return false. + * On some Linux versions, when a socket is bound to the loopback + * interface, sendto will fail and errno will be set to + * EINVAL or EHOSTUNREACH. When that happens, don't throw an + * exception, just return false. */ #endif /*__linux__ */ NET_ThrowNew(env, errno, "Can't send ICMP packet"); @@ -813,9 +814,10 @@ case EINVAL: case EHOSTUNREACH: /* - * On some Linuxes, when bound to the loopback interface, connect - * will fail and errno will be set to EINVAL or EHOSTUNREACH. - * When that happens, don't throw an exception, just return false. + * On some Linux versions, when a socket is bound to the loopback + * interface, connect will fail and errno will be set to EINVAL + * or EHOSTUNREACH. When that happens, don't throw an exception, + * just return false. */ #endif /* __linux__ */ close(fd);
--- a/jdk/src/solaris/native/java/net/Inet6AddressImpl.c Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/solaris/native/java/net/Inet6AddressImpl.c Thu Oct 11 16:59:50 2012 -0700 @@ -336,13 +336,7 @@ } (*env)->SetByteArrayRegion(env, ipaddress, 0, 16, (jbyte *)&(((struct sockaddr_in6*)iterator->ai_addr)->sin6_addr)); -#ifdef __linux__ - if (!kernelIsV22()) { - scope = ((struct sockaddr_in6*)iterator->ai_addr)->sin6_scope_id; - } -#else scope = ((struct sockaddr_in6*)iterator->ai_addr)->sin6_scope_id; -#endif if (scope != 0) { /* zero is default value, no need to set */ (*env)->SetIntField(env, iaObj, ia6_scopeidID, scope); (*env)->SetBooleanField(env, iaObj, ia6_scopeidsetID, JNI_TRUE); @@ -507,8 +501,9 @@ #ifdef __linux__ if (errno != EINVAL && errno != EHOSTUNREACH) /* - * On some Linuxes, when bound to the loopback interface, sendto - * will fail and errno will be set to EINVAL or EHOSTUNREACH. + * On some Linux versions, when a socket is bound to the + * loopback interface, sendto will fail and errno will be + * set to EINVAL or EHOSTUNREACH. * When that happens, don't throw an exception, just return false. */ #endif /*__linux__ */ @@ -623,7 +618,7 @@ * If we can create a RAW socket, then when can use the ICMP ECHO_REQUEST * otherwise we'll try a tcp socket to the Echo port (7). * Note that this is empiric, and not connecting could mean it's blocked - * or the echo servioe has been disabled. + * or the echo service has been disabled. */ fd = JVM_Socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6); @@ -680,9 +675,10 @@ case EINVAL: case EHOSTUNREACH: /* - * On some Linuxes, when bound to the loopback interface, connect - * will fail and errno will be set to EINVAL or EHOSTUNREACH. - * When that happens, don't throw an exception, just return false. + * On some Linux versions, when a socket is bound to the + * loopback interface, connect will fail and errno will + * be set to EINVAL or EHOSTUNREACH. When that happens, + * don't throw an exception, just return false. */ #endif /* __linux__ */ close(fd);
--- a/jdk/src/solaris/native/java/net/NetworkInterface.c Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/solaris/native/java/net/NetworkInterface.c Thu Oct 11 16:59:50 2012 -0700 @@ -769,14 +769,14 @@ return NULL; } - /* return partial list if exception occure in the middle of process ???*/ + /* return partial list if an exception occurs in the middle of process ???*/ /* * If IPv6 is available then enumerate IPv6 addresses. */ #ifdef AF_INET6 - /* User can disable ipv6 expicitly by -Djava.net.preferIPv4Stack=true, + /* User can disable ipv6 explicitly by -Djava.net.preferIPv4Stack=true, * so we have to call ipv6_available() */ if (ipv6_available()) { @@ -887,7 +887,7 @@ addrP->next = 0; if (family == AF_INET) { /* - * Deal with brodcast addr & subnet mask + * Deal with broadcast addr & subnet mask */ struct sockaddr * brdcast_to = (struct sockaddr *) ((char *) addrP + sizeof(netaddr) + addr_size); addrP->brdcast = getBroadcast(env, sock, name, brdcast_to ); @@ -898,7 +898,7 @@ } /** - * Deal with virtual interface with colon notaion e.g. eth0:1 + * Deal with virtual interface with colon notation e.g. eth0:1 */ name_colonP = strchr(name, ':'); if (name_colonP != NULL) { @@ -1327,13 +1327,13 @@ } /** - * Solaris requires that we have IPv6 socket to query an - * interface without IPv4 address - check it here - * POSIX 1 require the kernell to return ENOTTY if the call is - * unappropriate for device e.g. NETMASK for device having IPv6 - * only address but not all devices follows the standart so - * fallback on any error. It's not an ecology friendly but more - * reliable. + * Solaris requires that we have an IPv6 socket to query an + * interface without an IPv4 address - check it here. + * POSIX 1 require the kernel to return ENOTTY if the call is + * inappropriate for a device e.g. the NETMASK for a device having IPv6 + * only address but not all devices follow the standard so + * fall back on any error. It's not an ecologically friendly gesture + * but more reliable. */ if (! alreadyV6 ){ @@ -1359,7 +1359,7 @@ /* * Enumerates and returns all IPv4 interfaces - * (linux verison) + * (linux verision) */ static netif *enumIPv4Interfaces(JNIEnv *env, int sock, netif *ifs) {
--- a/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c Thu Oct 11 16:59:50 2012 -0700 @@ -73,16 +73,6 @@ static jfieldID pdsi_connectedAddress; static jfieldID pdsi_connectedPort; -#ifdef __linux__ -static jboolean isOldKernel; -#endif - -#if defined(__linux__) && defined(AF_INET6) -static jfieldID pdsi_multicastInterfaceID; -static jfieldID pdsi_loopbackID; -static jfieldID pdsi_ttlID; -#endif - extern void setDefaultScopeID(JNIEnv *env, struct sockaddr *him); extern int getDefaultScopeID(JNIEnv *env); @@ -174,41 +164,6 @@ Java_java_net_Inet6Address_init(env, 0); Java_java_net_NetworkInterface_init(env, 0); -#ifdef __linux__ - /* - * We need to determine if this is a 2.2 kernel. - */ - if (uname(&sysinfo) == 0) { - sysinfo.release[3] = '\0'; - isOldKernel = (strcmp(sysinfo.release, "2.2") == 0); - } else { - /* - * uname failed - move to plan B and examine /proc/version - * If this fails assume that /proc has changed and that - * this must be new /proc format and hence new kernel. - */ - FILE *fP; - isOldKernel = JNI_FALSE; - if ((fP = fopen("/proc/version", "r")) != NULL) { - char ver[25]; - if (fgets(ver, sizeof(ver), fP) != NULL) { - isOldKernel = (strstr(ver, "2.2.") != NULL); - } - fclose(fP); - } - } - -#ifdef AF_INET6 - pdsi_multicastInterfaceID = (*env)->GetFieldID(env, cls, "multicastInterface", "I"); - CHECK_NULL(pdsi_multicastInterfaceID); - pdsi_loopbackID = (*env)->GetFieldID(env, cls, "loopbackMode", "Z"); - CHECK_NULL(pdsi_loopbackID); - pdsi_ttlID = (*env)->GetFieldID(env, cls, "ttl", "I"); - CHECK_NULL(pdsi_ttlID); -#endif - -#endif - } /* @@ -257,7 +212,7 @@ return; } - /* intialize the local port */ + /* initialize the local port */ if (localport == 0) { /* Now that we're a connected socket, let's extract the port number * that the system chose for us and store it in the Socket object. @@ -308,20 +263,14 @@ return; } -#ifdef __linux__ - if (isOldKernel) { - int t = 0; - setsockopt(fd, SOL_SOCKET, SO_BSDCOMPAT, (char*) &t, sizeof(int)); - } else -#endif setDefaultScopeID(env, (struct sockaddr *)&rmtaddr); - { - if (JVM_Connect(fd, (struct sockaddr *)&rmtaddr, len) == -1) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "ConnectException", - "Connect failed"); - return; - } + + if (JVM_Connect(fd, (struct sockaddr *)&rmtaddr, len) == -1) { + NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "ConnectException", + "Connect failed"); + return; } + } /* @@ -347,12 +296,6 @@ fd = (*env)->GetIntField(env, fdObj, IO_fd_fdID); #if defined(__linux__) || defined(_ALLBSD_SOURCE) -#ifdef __linux__ - if (isOldKernel) { - int t = 1; - setsockopt(fd, SOL_SOCKET, SO_BSDCOMPAT, (char*) &t, sizeof(int)); - } else { -#endif /* __linux__ */ memset(&addr, 0, sizeof(addr)); #ifdef AF_INET6 if (ipv6_available()) { @@ -369,14 +312,10 @@ JVM_Connect(fd, (struct sockaddr *)&addr, len); #ifdef __linux__ - // After disconnecting a UDP socket, Linux kernel will set - // local port to zero if the port number comes from implicit - // bind. Successive send/recv on the same socket will fail. - // So bind again with former port number here. int localPort = 0; - if (JVM_GetSockName(fd, (struct sockaddr *)&addr, &len) == -1) { + if (JVM_GetSockName(fd, (struct sockaddr *)&addr, &len) == -1) return; - } + localPort = NET_GetPortFromSockaddr((struct sockaddr *)&addr); if (localPort == 0) { localPort = (*env)->GetIntField(env, this, pdsi_localPortID); @@ -388,9 +327,10 @@ { ((struct sockaddr_in*)&addr)->sin_port = htons(localPort); } + NET_Bind(fd, (struct sockaddr *)&addr, len); } - } + #endif #else JVM_Connect(fd, 0, 0); @@ -448,11 +388,7 @@ packetBufferOffset = (*env)->GetIntField(env, packet, dp_offsetID); packetBufferLen = (*env)->GetIntField(env, packet, dp_lengthID); -#ifdef __linux__ - if (connected && !isOldKernel) { -#else if (connected) { -#endif /* arg to NET_Sendto () null in this case */ len = 0; rmtaddrP = 0; @@ -466,14 +402,14 @@ if (packetBufferLen > MAX_BUFFER_LEN) { /* When JNI-ifying the JDK's IO routines, we turned - * read's and write's of byte arrays of size greater + * reads and writes of byte arrays of size greater * than 2048 bytes into several operations of size 2048. * This saves a malloc()/memcpy()/free() for big * buffers. This is OK for file IO and TCP, but that * strategy violates the semantics of a datagram protocol. * (one big send) != (several smaller sends). So here - * we *must* alloc the buffer. Note it needn't be bigger - * than 65,536 (0xFFFF) the max size of an IP packet. + * we *must* allocate the buffer. Note it needn't be bigger + * than 65,536 (0xFFFF), the max size of an IP packet. * Anything bigger should be truncated anyway. * * We may want to use a smarter allocation scheme at some @@ -621,7 +557,7 @@ #else family = AF_INET; #endif - if (family == AF_INET) { /* this api can't handle IPV6 addresses */ + if (family == AF_INET) { /* this API can't handle IPV6 addresses */ int address = (*env)->GetIntField(env, iaObj, ia_addressID); (*env)->SetIntField(env, addressObj, ia_addressID, address); } @@ -695,14 +631,14 @@ if (packetBufferLen > MAX_BUFFER_LEN) { /* When JNI-ifying the JDK's IO routines, we turned - * read's and write's of byte arrays of size greater + * reads and writes of byte arrays of size greater * than 2048 bytes into several operations of size 2048. * This saves a malloc()/memcpy()/free() for big * buffers. This is OK for file IO and TCP, but that * strategy violates the semantics of a datagram protocol. * (one big send) != (several smaller sends). So here - * we *must* alloc the buffer. Note it needn't be bigger - * than 65,536 (0xFFFF) the max size of an IP packet. + * we *must* allocate the buffer. Note it needn't be bigger + * than 65,536 (0xFFFF), the max size of an IP packet. * anything bigger is truncated anyway. * * We may want to use a smarter allocation scheme at some @@ -855,14 +791,14 @@ if (packetBufferLen > MAX_BUFFER_LEN) { /* When JNI-ifying the JDK's IO routines, we turned - * read's and write's of byte arrays of size greater + * reads and writes of byte arrays of size greater * than 2048 bytes into several operations of size 2048. * This saves a malloc()/memcpy()/free() for big * buffers. This is OK for file IO and TCP, but that * strategy violates the semantics of a datagram protocol. * (one big send) != (several smaller sends). So here - * we *must* alloc the buffer. Note it needn't be bigger - * than 65,536 (0xFFFF) the max size of an IP packet. + * we *must* allocate the buffer. Note it needn't be bigger + * than 65,536 (0xFFFF) the max size of an IP packet, * anything bigger is truncated anyway. * * We may want to use a smarter allocation scheme at some @@ -883,24 +819,6 @@ fullPacket = &(BUF[0]); } -#ifdef __linux__ - /* - * On Linux with the 2.2 kernel we simulate connected datagrams by - * discarding packets - */ - if (isOldKernel) { - connected = (*env)->GetBooleanField(env, this, pdsi_connected); - if (connected) { - connectedAddress = (*env)->GetObjectField(env, this, pdsi_connectedAddress); - connectedPort = (*env)->GetIntField(env, this, pdsi_connectedPort); - - if (timeout) { - prevTime = JVM_CurrentTimeMillis(env, 0); - } - } - } -#endif - do { retry = JNI_FALSE; @@ -933,14 +851,6 @@ } } - /* - * Security Note: For Linux 2.2 with connected datagrams ensure that - * you receive into the stack/heap allocated buffer - do not attempt - * to receive directly into DatagramPacket's byte array. - * (ie: if the virtual machine support pinning don't use - * GetByteArrayElements or a JNI critical section and receive - * directly into the byte array) - */ len = SOCKADDR_LEN; n = NET_RecvFrom(fd, fullPacket, packetBufferLen, 0, (struct sockaddr *)&remote_addr, &len); @@ -971,47 +881,6 @@ jobject packetAddress; /* - * If we are connected then we know that the datagram that we have - * received is from the address that we are connected too. However - * on Linux with 2.2 kernel we have to simulate this behaviour by - * discarding any datagrams that aren't from the connected address. - */ -#ifdef __linux__ - if (isOldKernel && connected) { - - if (NET_GetPortFromSockaddr((struct sockaddr *)&remote_addr) != connectedPort || - !NET_SockaddrEqualsInetAddress(env, (struct sockaddr *)&remote_addr, connectedAddress)) { - - /* - * Discard the datagram as it's not from the connected - * address - */ - retry = JNI_TRUE; - - /* - * Adjust timeout if necessary to ensure that we adhere to - * timeout semantics. - */ - if (timeout) { - jlong newTime = JVM_CurrentTimeMillis(env, 0); - timeout -= (newTime - prevTime); - if (timeout <= 0) { - JNU_ThrowByName(env, JNU_JAVANETPKG "SocketTimeoutException", - "Receive timed out"); - if (mallocedPacket) { - free(fullPacket); - } - return; - } - prevTime = newTime; - } - - continue; - } - } -#endif - - /* * success - fill in received address... * * REMIND: Fill in an int on the packet, and create inetadd @@ -1112,27 +981,16 @@ setsockopt(fd, SOL_SOCKET, SO_BROADCAST, (char*) &t, sizeof(int)); -#ifdef __linux__ - if (isOldKernel) { - setsockopt(fd, SOL_SOCKET, SO_BSDCOMPAT, (char*) &t, sizeof(int)); - } - -#ifdef AF_INET6 +#if defined (__linux__) && defined (AF_INET6) /* * On Linux for IPv6 sockets we must set the hop limit - * to 1 to be compatible with default ttl of 1 for IPv4 sockets. + * to 1 to be compatible with default TTL of 1 for IPv4 sockets. */ if (domain == AF_INET6) { int ttl = 1; setsockopt(fd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, (char *)&ttl, sizeof(ttl)); - - if (isOldKernel) { - (*env)->SetIntField(env, this, pdsi_ttlID, ttl); - } } -#endif - #endif /* __linux__ */ (*env)->SetIntField(env, fdObj, IO_fd_fdID, fd); @@ -1250,16 +1108,6 @@ return; } -#ifdef __linux__ - /* - * Linux 2.2 kernel doesn't support IPV6_MULTICAST_IF socket - * option so record index for later retrival. - */ - if (isOldKernel) { - (*env)->SetIntField(env, this, pdsi_multicastInterfaceID, - (jint)index); - } -#endif } #endif /* AF_INET6 */ @@ -1326,8 +1174,6 @@ * InetAddress is bound * Set outgoing multicast interface using * IPPROTO_IPV6/IPV6_MULTICAST_IF - * On Linux 2.2 record interface index as can't - * query the multicast interface. * * SockOptions.IF_MULTICAST_IF2 :- * value is a NetworkInterface @@ -1338,8 +1184,6 @@ * IPv6: Obtain NetworkInterface.index * Set outgoing multicast interface using * IPPROTO_IPV6/IPV6_MULTICAST_IF - * On Linux 2.2 record interface index as can't - * query the multicast interface. * */ static void setMulticastInterface(JNIEnv *env, jobject this, int fd, @@ -1436,15 +1280,6 @@ return; } -#ifdef __linux__ - /* - * Can't query IPV6_MULTICAST_LOOP on Linux 2.2 kernel so - * store it in impl so that we can simulate getsockopt. - */ - if (isOldKernel) { - (*env)->SetBooleanField(env, this, pdsi_loopbackID, on); - } -#endif } #endif /* AF_INET6 */ @@ -1507,7 +1342,7 @@ } /* - * Setting the multicast interface handled seperately + * Setting the multicast interface handled separately */ if (opt == java_net_SocketOptions_IP_MULTICAST_IF || opt == java_net_SocketOptions_IP_MULTICAST_IF2) { @@ -1594,8 +1429,7 @@ * Create InetAddress * IP_MULTICAST_IF returns struct ip_mreqn on 2.2 * kernel but struct in_addr on 2.4 kernel - * IPv6: Query IPPROTO_IPV6 / IPV6_MULTICAST_IF or - * obtain from impl is Linux 2.2 kernel + * IPv6: Query IPPROTO_IPV6 / IPV6_MULTICAST_IF * If index == 0 return InetAddress representing * anyLocalAddress. * If index > 0 query NetworkInterface by index @@ -1641,14 +1475,6 @@ struct in_addr *inP = ∈ int len = sizeof(struct in_addr); -#ifdef __linux__ - struct ip_mreqn mreqn; - if (isOldKernel) { - inP = (struct in_addr *)&mreqn; - len = sizeof(struct ip_mreqn); - } -#endif - if (JVM_GetSockOpt(fd, IPPROTO_IP, IP_MULTICAST_IF, (char *)inP, &len) < 0) { NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", @@ -1672,12 +1498,7 @@ addr = (*env)->NewObject(env, inet4_class, inet4_ctrID, 0); CHECK_NULL_RETURN(addr, NULL); -#ifdef __linux__ - (*env)->SetIntField(env, addr, inet4_addrID, - (isOldKernel ? ntohl(mreqn.imr_address.s_addr) : ntohl(in.s_addr)) ); -#else (*env)->SetIntField(env, addr, inet4_addrID, ntohl(in.s_addr)); -#endif /* * For IP_MULTICAST_IF return InetAddress @@ -1746,22 +1567,11 @@ jobject addr; jobject ni; -#ifdef __linux__ - /* - * Linux 2.2 kernel doesn't support IPV6_MULTICAST_IF socke option - * so use cached index. - */ - if (isOldKernel) { - index = (*env)->GetIntField(env, this, pdsi_multicastInterfaceID); - } else -#endif - { - if (JVM_GetSockOpt(fd, IPPROTO_IPV6, IPV6_MULTICAST_IF, - (char*)&index, &len) < 0) { - NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", - "Error getting socket option"); - return NULL; - } + if (JVM_GetSockOpt(fd, IPPROTO_IPV6, IPV6_MULTICAST_IF, + (char*)&index, &len) < 0) { + NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", + "Error getting socket option"); + return NULL; } if (ni_class == NULL) { @@ -1877,7 +1687,7 @@ } /* - * Handle IP_MULTICAST_IF seperately + * Handle IP_MULTICAST_IF separately */ if (opt == java_net_SocketOptions_IP_MULTICAST_IF || opt == java_net_SocketOptions_IP_MULTICAST_IF2) { @@ -1916,18 +1726,6 @@ return NULL; } - /* - * IP_MULTICAST_LOOP socket option isn't available on Linux 2.2 - * kernel with IPv6 so return value stored in impl. - */ -#if defined(AF_INET6) && defined(__linux__) - if (isOldKernel && opt == java_net_SocketOptions_IP_MULTICAST_LOOP && - level == IPPROTO_IPV6) { - int mode = (int)(*env)->GetBooleanField(env, this, pdsi_loopbackID); - return createBoolean(env, mode); - } -#endif - if (opt == java_net_SocketOptions_IP_MULTICAST_LOOP && level == IPPROTO_IP) { optlen = sizeof(optval.c); @@ -1961,7 +1759,7 @@ } - /* should never rearch here */ + /* should never reach here */ return NULL; } @@ -2025,15 +1823,12 @@ } else { fd = (*env)->GetIntField(env, fdObj, IO_fd_fdID); } - /* setsockopt to be correct ttl */ + /* setsockopt to be correct TTL */ #ifdef AF_INET6 #ifdef __linux__ setTTL(env, fd, ttl); if (ipv6_available()) { setHopLimit(env, fd, ttl); - if (isOldKernel) { - (*env)->SetIntField(env, this, pdsi_ttlID, ttl); - } } #else /* __linux__ not defined */ if (ipv6_available()) { @@ -2076,21 +1871,12 @@ } else { fd = (*env)->GetIntField(env, fdObj, IO_fd_fdID); } - /* getsockopt of ttl */ + /* getsockopt of TTL */ #ifdef AF_INET6 if (ipv6_available()) { int ttl = 0; int len = sizeof(ttl); -#ifdef __linux__ - /* - * Linux 2.2 kernel doesn't support IPV6_MULTICAST_HOPS socket option - */ - if (isOldKernel) { - return (*env)->GetIntField(env, this, pdsi_ttlID); - } -#endif - if (JVM_GetSockOpt(fd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, (char*)&ttl, &len) < 0) { NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", @@ -2258,14 +2044,10 @@ int index; int len = sizeof(index); - if (isOldKernel) { - index = (*env)->GetIntField(env, this, pdsi_multicastInterfaceID); - } else { - if (JVM_GetSockOpt(fd, IPPROTO_IPV6, IPV6_MULTICAST_IF, - (char*)&index, &len) < 0) { - NET_ThrowCurrent(env, "getsockopt IPV6_MULTICAST_IF failed"); - return; - } + if (JVM_GetSockOpt(fd, IPPROTO_IPV6, IPV6_MULTICAST_IF, + (char*)&index, &len) < 0) { + NET_ThrowCurrent(env, "getsockopt IPV6_MULTICAST_IF failed"); + return; } mname.imr_multiaddr.s_addr = htonl((*env)->GetIntField(env, iaObj, ia_addressID)); @@ -2279,21 +2061,13 @@ struct in_addr *inP = ∈ socklen_t len = sizeof(struct in_addr); -#ifdef __linux__ - struct ip_mreqn mreqn; - if (isOldKernel) { - inP = (struct in_addr *)&mreqn; - len = sizeof(struct ip_mreqn); - } -#endif if (getsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF, (char *)inP, &len) < 0) { NET_ThrowCurrent(env, "getsockopt IP_MULTICAST_IF failed"); return; } #ifdef __linux__ - mname.imr_address.s_addr = - (isOldKernel ? mreqn.imr_address.s_addr : in.s_addr); + mname.imr_address.s_addr = in.s_addr; #else mname.imr_interface.s_addr = in.s_addr; @@ -2314,10 +2088,10 @@ * If IP_ADD_MEMBERSHIP returns ENOPROTOOPT on Linux and we've got * IPv6 enabled then it's possible that the kernel has been fixed * so we switch to IPV6_ADD_MEMBERSHIP socket option. - * As of 2.4.7 kernel IPV6_ADD_MEMERSHIP can't handle IPv4-mapped - * addresses so we have to use IP_ADD_MEMERSHIP for IPv4 multicast + * As of 2.4.7 kernel IPV6_ADD_MEMBERSHIP can't handle IPv4-mapped + * addresses so we have to use IP_ADD_MEMBERSHIP for IPv4 multicast * groups. However if the socket is an IPv6 socket then then setsockopt - * should reurn ENOPROTOOPT. We assume this will be fixed in Linux + * should return ENOPROTOOPT. We assume this will be fixed in Linux * at some stage. */ #if defined(__linux__) && defined(AF_INET6) @@ -2385,20 +2159,10 @@ int index; int len = sizeof(index); -#ifdef __linux__ - /* - * 2.2 kernel doens't support IPV6_MULTICAST_IF socket option - */ - if (isOldKernel) { - index = (*env)->GetIntField(env, this, pdsi_multicastInterfaceID); - } else -#endif - { - if (JVM_GetSockOpt(fd, IPPROTO_IPV6, IPV6_MULTICAST_IF, - (char*)&index, &len) < 0) { - NET_ThrowCurrent(env, "getsockopt IPV6_MULTICAST_IF failed"); - return; - } + if (JVM_GetSockOpt(fd, IPPROTO_IPV6, IPV6_MULTICAST_IF, + (char*)&index, &len) < 0) { + NET_ThrowCurrent(env, "getsockopt IPV6_MULTICAST_IF failed"); + return; } #ifdef __linux__ @@ -2408,7 +2172,7 @@ * subsequent leave groups to fail as there is no match. Thus we * pick the interface if there is a matching route. */ - if (index == 0 && !isOldKernel) { + if (index == 0) { int rt_index = getDefaultIPv6Interface(&(mname6.ipv6mr_multiaddr)); if (rt_index > 0) { index = rt_index;
--- a/jdk/src/solaris/native/java/net/PlainSocketImpl.c Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/solaris/native/java/net/PlainSocketImpl.c Thu Oct 11 16:59:50 2012 -0700 @@ -128,7 +128,7 @@ /* * The initroto function is called whenever PlainSocketImpl is - * loaded, to cache fieldIds for efficiency. This is called everytime + * loaded, to cache field IDs for efficiency. This is called every time * the Java class is loaded. * * Class: java_net_PlainSocketImpl @@ -589,7 +589,7 @@ /* set the address */ (*env)->SetObjectField(env, this, psi_addressID, iaObj); - /* intialize the local port */ + /* initialize the local port */ if (localport == 0) { /* Now that we're a connected socket, let's extract the port number * that the system chose for us and store it in the Socket object. @@ -909,7 +909,7 @@ } /* - * SO_TIMEOUT is a no-op on Solaris/Linux + * SO_TIMEOUT is a NOOP on Solaris/Linux */ if (cmd == java_net_SocketOptions_SO_TIMEOUT) { return;
--- a/jdk/src/solaris/native/java/net/SocketInputStream.c Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/solaris/native/java/net/SocketInputStream.c Thu Oct 11 16:59:50 2012 -0700 @@ -67,14 +67,14 @@ jint fd, nread; if (IS_NULL(fdObj)) { - /* should't this be a NullPointerException? -br */ + /* shouldn't this be a NullPointerException? -br */ JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed"); return -1; } else { fd = (*env)->GetIntField(env, fdObj, IO_fd_fdID); /* Bug 4086704 - If the Socket associated with this file descriptor - * was closed (sysCloseFD), the the file descriptor is set to -1. + * was closed (sysCloseFD), then the file descriptor is set to -1. */ if (fd == -1) { JNU_ThrowByName(env, "java/net/SocketException", "Socket closed");
--- a/jdk/src/solaris/native/java/net/bsd_close.c Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/solaris/native/java/net/bsd_close.c Thu Oct 11 16:59:50 2012 -0700 @@ -68,7 +68,7 @@ /* * This limit applies if getlimit() returns unlimited. - * Unfortunately, this means if someone wants a higher limt + * Unfortunately, this means if someone wants a higher limit * then they have to set an explicit limit, higher than this, * which is probably counter-intuitive. */
--- a/jdk/src/solaris/native/java/net/net_util_md.c Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/solaris/native/java/net/net_util_md.c Thu Oct 11 16:59:50 2012 -0700 @@ -169,7 +169,7 @@ * for Solaris versions that do not support the ioctl() in getParam(). * Ugly, but only called once (for each sotype). * - * As an optimisation, we make a guess using the default values for Solaris + * As an optimization, we make a guess using the default values for Solaris * assuming they haven't been modified with ndd. */ @@ -217,23 +217,7 @@ #endif #ifdef __linux__ -static int kernelV22 = 0; static int vinit = 0; - -int kernelIsV22 () { - if (!vinit) { - struct utsname sysinfo; - if (uname(&sysinfo) == 0) { - sysinfo.release[3] = '\0'; - if (strcmp(sysinfo.release, "2.2") == 0) { - kernelV22 = JNI_TRUE; - } - } - vinit = 1; - } - return kernelV22; -} - static int kernelV24 = 0; static int vinit24 = 0; @@ -253,17 +237,11 @@ int getScopeID (struct sockaddr *him) { struct sockaddr_in6 *hext = (struct sockaddr_in6 *)him; - if (kernelIsV22()) { - return 0; - } return hext->sin6_scope_id; } int cmpScopeID (unsigned int scope, struct sockaddr *him) { struct sockaddr_in6 *hext = (struct sockaddr_in6 *)him; - if (kernelIsV22()) { - return 1; /* scope is ignored for comparison in 2.2 kernel */ - } return hext->sin6_scope_id == scope; } @@ -843,15 +821,14 @@ * address needs to be routed via the loopback interface. In this case, * we override the specified value with that of the loopback interface. * If no cached value exists and no value was specified by user, then - * we try to determine a value ffrom the routing table. In all these + * we try to determine a value from the routing table. In all these * cases the used value is cached for further use. */ #ifdef __linux__ if (IN6_IS_ADDR_LINKLOCAL(&(him6->sin6_addr))) { int cached_scope_id = 0, scope_id = 0; - int old_kernel = kernelIsV22(); - if (ia6_cachedscopeidID && !old_kernel) { + if (ia6_cachedscopeidID) { cached_scope_id = (int)(*env)->GetIntField(env, iaObj, ia6_cachedscopeidID); /* if cached value exists then use it. Otherwise, check * if scope is set in the address. @@ -891,13 +868,11 @@ * of sockaddr_in6. */ - if (!old_kernel) { - struct sockaddr_in6 *him6 = - (struct sockaddr_in6 *)him; - him6->sin6_scope_id = cached_scope_id != 0 ? - cached_scope_id : scope_id; - *len = sizeof(struct sockaddr_in6); - } + struct sockaddr_in6 *him6 = + (struct sockaddr_in6 *)him; + him6->sin6_scope_id = cached_scope_id != 0 ? + cached_scope_id : scope_id; + *len = sizeof(struct sockaddr_in6); } #else /* handle scope_id for solaris */ @@ -1208,7 +1183,7 @@ /* * Wrapper for getsockopt system routine - does any necessary - * pre/post processing to deal with OS specific oddies :- + * pre/post processing to deal with OS specific oddities :- * * IP_TOS is a no-op with IPv6 sockets as it's setup when * the connection is established. @@ -1287,7 +1262,7 @@ * * For IP_TOS socket option need to mask off bits as this * aren't automatically masked by the kernel and results in - * an error. In addition IP_TOS is a noop with IPv6 as it + * an error. In addition IP_TOS is a NOOP with IPv6 as it * should be setup as connection time. */ int @@ -1321,7 +1296,7 @@ /* * IPPROTO/IP_TOS :- - * 1. IPv6 on Solaris/Mac OS: no-op and will be set + * 1. IPv6 on Solaris/Mac OS: NOOP and will be set * in flowinfo field when connecting TCP socket, * or sending UDP packet. * 2. IPv6 on Linux: By default Linux ignores flowinfo
--- a/jdk/src/solaris/native/java/net/net_util_md.h Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/solaris/native/java/net/net_util_md.h Thu Oct 11 16:59:50 2012 -0700 @@ -144,7 +144,6 @@ * Utilities */ #ifdef __linux__ -extern int kernelIsV22(); extern int kernelIsV24(); #endif
--- a/jdk/src/solaris/native/sun/awt/initIDs.c Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/solaris/native/sun/awt/initIDs.c Thu Oct 11 16:59:50 2012 -0700 @@ -89,6 +89,12 @@ } JNIEXPORT void JNICALL +Java_java_awt_Choice_initIDs + (JNIEnv *env, jclass clazz) +{ +} + +JNIEXPORT void JNICALL Java_java_awt_Dimension_initIDs (JNIEnv *env, jclass clazz) {
--- a/jdk/src/solaris/native/sun/nio/ch/Net.c Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/solaris/native/sun/nio/ch/Net.c Thu Oct 11 16:59:50 2012 -0700 @@ -38,6 +38,7 @@ #include "net_util_md.h" #include "nio_util.h" #include "nio.h" +#include "sun_nio_ch_PollArrayWrapper.h" #ifdef _ALLBSD_SOURCE @@ -627,6 +628,26 @@ handleSocketError(env, errno); } +JNIEXPORT jint JNICALL +Java_sun_nio_ch_Net_poll(JNIEnv* env, jclass this, jobject fdo, jint events, jlong timeout) +{ + struct pollfd pfd; + int rv; + pfd.fd = fdval(env, fdo); + pfd.events = events; + rv = poll(&pfd, 1, timeout); + + if (rv >= 0) { + return pfd.revents; + } else if (errno == EINTR) { + return IOS_INTERRUPTED; + } else if (rv < 0) { + handleSocketError(env, errno); + return IOS_THROWN; + } +} + + /* Declared in nio_util.h */ jint
--- a/jdk/src/windows/native/sun/nio/ch/Net.c Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/windows/native/sun/nio/ch/Net.c Thu Oct 11 16:59:50 2012 -0700 @@ -35,6 +35,7 @@ #include "net_util.h" #include "sun_nio_ch_Net.h" +#include "sun_nio_ch_PollArrayWrapper.h" /** * Definitions to allow for building with older SDK include files. @@ -524,3 +525,49 @@ NET_ThrowNew(env, WSAGetLastError(), "shutdown"); } } + +JNIEXPORT jint JNICALL +Java_sun_nio_ch_Net_poll(JNIEnv* env, jclass this, jobject fdo, jint events, jlong timeout) +{ + int rv; + int revents = 0; + struct timeval t; + int lastError = 0; + fd_set rd, wr, ex; + jint fd = fdval(env, fdo); + + t.tv_sec = timeout / 1000; + t.tv_usec = (timeout % 1000) * 1000; + + FD_ZERO(&rd); + FD_ZERO(&wr); + FD_ZERO(&ex); + if (events & sun_nio_ch_PollArrayWrapper_POLLIN) { + FD_SET(fd, &rd); + } + if (events & sun_nio_ch_PollArrayWrapper_POLLOUT || + events & sun_nio_ch_PollArrayWrapper_POLLCONN) { + FD_SET(fd, &wr); + } + FD_SET(fd, &ex); + + rv = select(fd+1, &rd, &wr, &ex, &t); + + /* save last winsock error */ + if (rv == SOCKET_ERROR) { + handleSocketError(env, lastError); + return IOS_THROWN; + } else if (rv >= 0) { + rv = 0; + if (FD_ISSET(fd, &rd)) { + rv |= sun_nio_ch_PollArrayWrapper_POLLIN; + } + if (FD_ISSET(fd, &wr)) { + rv |= sun_nio_ch_PollArrayWrapper_POLLOUT; + } + if (FD_ISSET(fd, &ex)) { + rv |= sun_nio_ch_PollArrayWrapper_POLLERR; + } + } + return rv; +}
--- a/jdk/src/windows/native/sun/util/locale/provider/HostLocaleProviderAdapter_md.c Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/windows/native/sun/util/locale/provider/HostLocaleProviderAdapter_md.c Thu Oct 11 16:59:50 2012 -0700 @@ -209,31 +209,26 @@ */ JNIEXPORT jstring JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getDateTimePattern (JNIEnv *env, jclass cls, jint dateStyle, jint timeStyle, jstring jlangtag) { - WCHAR datePattern[BUFLEN]; - WCHAR timePattern[BUFLEN]; + WCHAR pattern[BUFLEN]; const jchar *langtag = (*env)->GetStringChars(env, jlangtag, JNI_FALSE); - datePattern[0] = L'\0'; - timePattern[0] = L'\0'; + pattern[0] = L'\0'; if (dateStyle == 0 || dateStyle == 1) { - getLocaleInfoWrapper(langtag, LOCALE_SLONGDATE, datePattern, BUFLEN); + getLocaleInfoWrapper(langtag, LOCALE_SLONGDATE, pattern, BUFLEN); } else if (dateStyle == 2 || dateStyle == 3) { - getLocaleInfoWrapper(langtag, LOCALE_SSHORTDATE, datePattern, BUFLEN); + getLocaleInfoWrapper(langtag, LOCALE_SSHORTDATE, pattern, BUFLEN); } if (timeStyle == 0 || timeStyle == 1) { - getLocaleInfoWrapper(langtag, LOCALE_STIMEFORMAT, timePattern, BUFLEN); + getLocaleInfoWrapper(langtag, LOCALE_STIMEFORMAT, pattern, BUFLEN); } else if (timeStyle == 2 || timeStyle == 3) { - getLocaleInfoWrapper(langtag, LOCALE_SSHORTTIME, timePattern, BUFLEN); + getLocaleInfoWrapper(langtag, LOCALE_SSHORTTIME, pattern, BUFLEN); } - wcscat(datePattern, L" "); - wcscat(datePattern, timePattern); - (*env)->ReleaseStringChars(env, jlangtag, langtag); - return (*env)->NewString(env, datePattern, wcslen(datePattern)); + return (*env)->NewString(env, pattern, wcslen(pattern)); } /*
--- a/jdk/src/windows/native/sun/windows/awt_Choice.cpp Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/windows/native/sun/windows/awt_Choice.cpp Thu Oct 11 16:59:50 2012 -0700 @@ -79,6 +79,10 @@ static const UINT MINIMUM_NUMBER_OF_VISIBLE_ITEMS = 8; +namespace { + jfieldID selectedIndexID; +} + /************************************************************************* * AwtChoice class methods */ @@ -86,7 +90,6 @@ AwtChoice::AwtChoice() { m_hList = NULL; m_listDefWindowProc = NULL; - m_selectedItem = -1; } LPCTSTR AwtChoice::GetClassName() { @@ -102,7 +105,6 @@ AwtChoice* AwtChoice::Create(jobject peer, jobject parent) { - JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); jobject target = NULL; @@ -438,10 +440,14 @@ MsgRouting AwtChoice::WmNotify(UINT notifyCode) { if (notifyCode == CBN_SELCHANGE) { - int selectedItem = (int)SendMessage(CB_GETCURSEL); - if (selectedItem != CB_ERR && m_selectedItem != selectedItem){ - m_selectedItem = selectedItem; - DoCallback("handleAction", "(I)V", selectedItem); + int selectedIndex = (int)SendMessage(CB_GETCURSEL); + + JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); + jobject target = GetTarget(env); + int previousIndex = env->GetIntField(target, selectedIndexID); + + if (selectedIndex != CB_ERR && selectedIndex != previousIndex){ + DoCallback("handleAction", "(I)V", selectedIndex); } } else if (notifyCode == CBN_DROPDOWN) { @@ -695,6 +701,15 @@ extern "C" { +JNIEXPORT void JNICALL +Java_java_awt_Choice_initIDs(JNIEnv *env, jclass cls) +{ + TRY; + selectedIndexID = env->GetFieldID(cls, "selectedIndex", "I"); + DASSERT(selectedIndexID); + CATCH_BAD_ALLOC; +} + /* * Class: sun_awt_windows_WChoicePeer * Method: select
--- a/jdk/src/windows/native/sun/windows/awt_Choice.h Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/windows/native/sun/windows/awt_Choice.h Thu Oct 11 16:59:50 2012 -0700 @@ -94,7 +94,6 @@ static BOOL sm_isMouseMoveInList; HWND m_hList; WNDPROC m_listDefWindowProc; - int m_selectedItem; static LRESULT CALLBACK ListWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); };
--- a/jdk/src/windows/native/sun/windows/awt_Component.cpp Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/windows/native/sun/windows/awt_Component.cpp Thu Oct 11 16:59:50 2012 -0700 @@ -3144,7 +3144,8 @@ return; } -UINT AwtComponent::WindowsKeyToJavaKey(UINT windowsKey, UINT modifiers) +UINT AwtComponent::WindowsKeyToJavaKey(UINT windowsKey, UINT modifiers, UINT character, BOOL isDeadKey) + { // Handle the few cases where we need to take the modifier into // consideration for the Java VK code or where we have to take the keyboard @@ -3171,6 +3172,15 @@ break; }; + // check dead key + if (isDeadKey) { + for (int i = 0; charToDeadVKTable[i].c != 0; i++) { + if (charToDeadVKTable[i].c == character) { + return charToDeadVKTable[i].javaKey; + } + } + } + // for the general case, use a bi-directional table for (int i = 0; keyMapTable[i].windowsKey != 0; i++) { if (keyMapTable[i].windowsKey == windowsKey) { @@ -3384,14 +3394,18 @@ } } -UINT AwtComponent::WindowsKeyToJavaChar(UINT wkey, UINT modifiers, TransOps ops) +UINT AwtComponent::WindowsKeyToJavaChar(UINT wkey, UINT modifiers, TransOps ops, BOOL &isDeadKey) { static Hashtable transTable("VKEY translations"); + static Hashtable deadKeyFlagTable("Dead Key Flags"); + isDeadKey = FALSE; // Try to translate using last saved translation if (ops == LOAD) { + void* deadKeyFlag = deadKeyFlagTable.remove(reinterpret_cast<void*>(static_cast<INT_PTR>(wkey))); void* value = transTable.remove(reinterpret_cast<void*>(static_cast<INT_PTR>(wkey))); if (value != NULL) { + isDeadKey = static_cast<BOOL>(reinterpret_cast<INT_PTR>(deadKeyFlag)); return static_cast<UINT>(reinterpret_cast<INT_PTR>(value)); } } @@ -3484,12 +3498,13 @@ // instead of creating our own conversion tables, I'll let Win32 // convert the character for me. - WORD mbChar; + WORD wChar[2]; UINT scancode = ::MapVirtualKey(wkey, 0); - int converted = ::ToAsciiEx(wkey, scancode, keyboardState, - &mbChar, 0, GetKeyboardLayout()); + int converted = ::ToUnicodeEx(wkey, scancode, keyboardState, + wChar, 2, 0, GetKeyboardLayout()); UINT translation; + BOOL deadKeyFlag = (converted == 2); // Dead Key if (converted < 0) { @@ -3508,16 +3523,16 @@ } else // the caller expects a Unicode character. if (converted > 0) { - WCHAR unicodeChar[2]; - VERIFY(::MultiByteToWideChar(GetCodePage(), MB_PRECOMPOSED, - (LPCSTR)&mbChar, 1, unicodeChar, 1)); - - translation = unicodeChar[0]; + translation = wChar[0]; } if (ops == SAVE) { transTable.put(reinterpret_cast<void*>(static_cast<INT_PTR>(wkey)), reinterpret_cast<void*>(static_cast<INT_PTR>(translation))); - } + deadKeyFlagTable.put(reinterpret_cast<void*>(static_cast<INT_PTR>(wkey)), + reinterpret_cast<void*>(static_cast<INT_PTR>(deadKeyFlag))); + } + + isDeadKey = deadKeyFlag; return translation; } @@ -3537,8 +3552,9 @@ UINT modifiers = GetJavaModifiers(); jint keyLocation = GetKeyLocation(wkey, flags); - UINT jkey = WindowsKeyToJavaKey(wkey, modifiers); - UINT character = WindowsKeyToJavaChar(wkey, modifiers, SAVE); + BOOL isDeadKey = FALSE; + UINT character = WindowsKeyToJavaChar(wkey, modifiers, SAVE, isDeadKey); + UINT jkey = WindowsKeyToJavaKey(wkey, modifiers, character, isDeadKey); UpdateDynPrimaryKeymap(wkey, jkey, keyLocation, modifiers); @@ -3579,8 +3595,9 @@ UINT modifiers = GetJavaModifiers(); jint keyLocation = GetKeyLocation(wkey, flags); - UINT jkey = WindowsKeyToJavaKey(wkey, modifiers); - UINT character = WindowsKeyToJavaChar(wkey, modifiers, LOAD); + BOOL isDeadKey = FALSE; + UINT character = WindowsKeyToJavaChar(wkey, modifiers, LOAD, isDeadKey); + UINT jkey = WindowsKeyToJavaKey(wkey, modifiers, character, isDeadKey); UpdateDynPrimaryKeymap(wkey, jkey, keyLocation, modifiers); SendKeyEventToFocusOwner(java_awt_event_KeyEvent_KEY_RELEASED, @@ -5628,7 +5645,8 @@ } } - modifiedChar = p->WindowsKeyToJavaChar(winKey, modifiers, AwtComponent::NONE); + BOOL isDeadKey = FALSE; + modifiedChar = p->WindowsKeyToJavaChar(winKey, modifiers, AwtComponent::NONE, isDeadKey); bCharChanged = (keyChar != modifiedChar); } break; @@ -7166,4 +7184,4 @@ removedDCs = removedDCs->next; delete tmpDCList; } -} +} \ No newline at end of file
--- a/jdk/src/windows/native/sun/windows/awt_Component.h Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/windows/native/sun/windows/awt_Component.h Thu Oct 11 16:59:50 2012 -0700 @@ -441,7 +441,7 @@ static jint GetJavaModifiers(); static jint GetButton(int mouseButton); static UINT GetButtonMK(int mouseButton); - static UINT WindowsKeyToJavaKey(UINT windowsKey, UINT modifiers); + static UINT WindowsKeyToJavaKey(UINT windowsKey, UINT modifiers, UINT character, BOOL isDeadKey); static void JavaKeyToWindowsKey(UINT javaKey, UINT *windowsKey, UINT *modifiers, UINT originalWindowsKey); static void UpdateDynPrimaryKeymap(UINT wkey, UINT jkeyLegacy, jint keyLocation, UINT modifiers); @@ -453,7 +453,7 @@ enum TransOps {NONE, LOAD, SAVE}; - UINT WindowsKeyToJavaChar(UINT wkey, UINT modifiers, TransOps ops); + UINT WindowsKeyToJavaChar(UINT wkey, UINT modifiers, TransOps ops, BOOL &isDeadKey); /* routines used for input method support */ void SetInputMethod(jobject im, BOOL useNativeCompWindow);
--- a/jdk/src/windows/native/sun/windows/awt_InputMethod.cpp Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/src/windows/native/sun/windows/awt_InputMethod.cpp Thu Oct 11 16:59:50 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -517,10 +517,10 @@ jstring infojStr = NULL; if ((buffSize = ::ImmGetDescription(hkl, szImmDescription, 0)) > 0) { - szImmDescription = (LPTSTR) safe_Malloc(buffSize * sizeof(TCHAR)); + szImmDescription = (LPTSTR) safe_Malloc((buffSize+1) * sizeof(TCHAR)); if (szImmDescription != NULL) { - ImmGetDescription(hkl, szImmDescription, buffSize); + ImmGetDescription(hkl, szImmDescription, (buffSize+1)); infojStr = JNU_NewStringPlatform(env, szImmDescription);
--- a/jdk/test/ProblemList.txt Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/test/ProblemList.txt Thu Oct 11 16:59:50 2012 -0700 @@ -153,9 +153,6 @@ # 7144846 javax/management/remote/mandatory/connection/ReconnectTest.java generic-all -# 7158614, locks up Windows machines at least -sun/management/jmxremote/startstop/JMXStartStopTest.sh windows-all - # 7120365 javax/management/remote/mandatory/notif/DiffHBTest.java generic-all
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/awt/Choice/ItemStateChangeTest/ItemStateChangeTest.java Thu Oct 11 16:59:50 2012 -0700 @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + @test + @bug 7171412 + @summary awt Choice doesn't fire ItemStateChange when selecting item after select() call + @author Oleg Pekhovskiy: area=awt-choice + @library ../../regtesthelpers + @build Util + @run main ItemStateChangeTest +*/ + +import test.java.awt.regtesthelpers.Util; + +import java.awt.*; +import java.awt.event.*; +import sun.awt.OSInfo; + +public class ItemStateChangeTest extends Frame { + + int events = 0; + + public static void main(String args[]) { + new ItemStateChangeTest(); + } + + public ItemStateChangeTest() { + + if (OSInfo.getOSType() != OSInfo.OSType.WINDOWS) { + return; + } + + try { + + final Robot robot = new Robot(); + robot.setAutoDelay(20); + Util.waitForIdle(robot); + + addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + System.exit(0); + } + }); + + final Choice choice = new Choice(); + choice.add("A"); + choice.add("B"); + choice.addItemListener(new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + ++events; + } + }); + + add(choice); + setSize(200, 150); + setVisible(true); + toFront(); + + // choose B + int y = chooseB(choice, robot, 16); + + // reset to A + choice.select(0); + robot.delay(20); + Util.waitForIdle(robot); + + // choose B again + chooseB(choice, robot, y); + + if (events == 2) { + System.out.println("Test passed!"); + } + else { + throw new RuntimeException("Test failed!"); + } + + } + catch (AWTException e) { + throw new RuntimeException("Test failed!"); + } + } + + final int chooseB(Choice choice, Robot robot, int y) { + while (true) { + // show drop-down list + Util.clickOnComp(choice, robot); + Util.waitForIdle(robot); + Point pt = choice.getLocationOnScreen(); + Dimension size = choice.getSize(); + // try to click B item + robot.mouseMove(pt.x + size.width / 2, pt.y + size.height + y); + Util.waitForIdle(robot); + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + Util.waitForIdle(robot); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); + Util.waitForIdle(robot); + if (choice.getSelectedIndex() == 1) { + break; + } + // if it's not B, position cursor lower by 2 pixels and try again + y += 2; + } + return y; + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/awt/List/EmptyListEventTest/EmptyListEventTest.java Thu Oct 11 16:59:50 2012 -0700 @@ -0,0 +1,158 @@ +/* + * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 6366126 + * @summary List throws ArrayIndexOutOfBoundsException when pressing ENTER after removing all the items, Win32 + * @author Dmitry Cherepanov area=awt.list + * @run main EmptyListEventTest + */ +import java.awt.*; +import java.awt.event.*; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; +import sun.awt.SunToolkit; + +public class EmptyListEventTest { + + private static List list; + + public static void main(String[] args) throws Exception { + + SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); + Robot robot = new Robot(); + robot.setAutoDelay(50); + + SwingUtilities.invokeAndWait(new Runnable() { + + @Override + public void run() { + createAndShowGUI(); + } + }); + + toolkit.realSync(); + + // press mouse -> ItemEvent + Point point = getClickPoint(); + robot.mouseMove(point.x, point.y); + robot.mousePress(InputEvent.BUTTON1_MASK); + robot.mouseRelease(InputEvent.BUTTON1_MASK); + + toolkit.realSync(); + + SwingUtilities.invokeAndWait(new Runnable() { + + @Override + public void run() { + list.requestFocusInWindow(); + } + }); + + toolkit.realSync(); + + if (KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner() != list) { + throw new RuntimeException("Test failed - list isn't focus owner."); + } + + // press key ENTER -> ActionEvent + robot.keyPress(KeyEvent.VK_ENTER); + robot.keyRelease(KeyEvent.VK_ENTER); + toolkit.realSync(); + + // press key SPACE -> ItemEvent + robot.keyPress(KeyEvent.VK_SPACE); + robot.keyRelease(KeyEvent.VK_SPACE); + toolkit.realSync(); + + // mouse double click -> ActionEvent + robot.setAutoDelay(10); + robot.mousePress(InputEvent.BUTTON1_MASK); + robot.mouseRelease(InputEvent.BUTTON1_MASK); + robot.mousePress(InputEvent.BUTTON1_MASK); + robot.mouseRelease(InputEvent.BUTTON1_MASK); + toolkit.realSync(); + } + + private static Point getClickPoint() throws Exception { + final Point[] result = new Point[1]; + + SwingUtilities.invokeAndWait(new Runnable() { + + @Override + public void run() { + Point point = list.getLocationOnScreen(); + point.translate(list.getWidth() / 2, list.getHeight() / 2); + result[0] = point; + + } + }); + + return result[0]; + + + } + + private static void createAndShowGUI() { + JFrame frame = new JFrame(); + frame.setSize(200, 200); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + JPanel panel = new JPanel(new BorderLayout()); + + frame.getToolkit().addAWTEventListener(new AWTEventListener() { + + public void eventDispatched(AWTEvent e) { + System.out.println(e); + } + }, AWTEvent.FOCUS_EVENT_MASK | AWTEvent.WINDOW_FOCUS_EVENT_MASK); + + + MyListener listener = new MyListener(); + + list = new List(4, true); + list.addActionListener(listener); + list.addItemListener(listener); + + panel.add(list); + + frame.getContentPane().add(panel); + frame.setVisible(true); + + } + + static class MyListener implements ActionListener, ItemListener { + + public void actionPerformed(ActionEvent ae) { + System.err.println(ae); + throw new RuntimeException("Test failed - list is empty so event is redundant"); + } + + public void itemStateChanged(ItemEvent ie) { + System.err.println(ie); + throw new RuntimeException("Test failed - list is empty so event is redundant"); + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/awt/ScrollPane/ScrollPanePreferredSize/ScrollPanePreferredSize.java Thu Oct 11 16:59:50 2012 -0700 @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.Dimension; +import java.awt.Frame; +import java.awt.ScrollPane; +import java.awt.Toolkit; + +import sun.awt.SunToolkit; + +/** + * @test + * @bug 7124213 + * @author Sergey Bylokhov + */ +public final class ScrollPanePreferredSize { + + public static void main(final String[] args) { + final Dimension expected = new Dimension(300, 300); + final Frame frame = new Frame(); + final ScrollPane sp = new ScrollPane(); + sp.setSize(expected); + frame.add(sp); + frame.pack(); + frame.setLocationRelativeTo(null); + frame.setVisible(true); + sleep(); + final Dimension size = frame.getSize(); + if (size.width < expected.width || size.height < expected.height) { + throw new RuntimeException( + "Expected size: >= " + expected + ", actual size: " + size); + } + frame.dispose(); + } + + private static void sleep() { + ((SunToolkit) Toolkit.getDefaultToolkit()).realSync(); + try { + Thread.sleep(500L); + } catch (InterruptedException ignored) { + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/awt/TextArea/TextAreaTwicePack/TextAreaTwicePack.java Thu Oct 11 16:59:50 2012 -0700 @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.Dimension; +import java.awt.Frame; +import java.awt.TextArea; +import java.awt.Toolkit; + +import sun.awt.SunToolkit; + +/** + * @test + * @bug 7160627 + * @summary We shouldn't get different frame size when we call Frame.pack() + * twice. + * @author Sergey Bylokhov + */ +public final class TextAreaTwicePack { + + public static void main(final String[] args) { + final Frame frame = new Frame(); + final TextArea ta = new TextArea(); + frame.add(ta); + frame.pack(); + frame.setVisible(true); + sleep(); + final Dimension before = frame.getSize(); + frame.pack(); + final Dimension after = frame.getSize(); + if (!after.equals(before)) { + throw new RuntimeException( + "Expected size: " + before + ", actual size: " + after); + } + frame.dispose(); + } + + private static void sleep() { + ((SunToolkit) Toolkit.getDefaultToolkit()).realSync(); + try { + Thread.sleep(500L); + } catch (InterruptedException ignored) { + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/awt/event/KeyEvent/DeadKey/DeadKeyMacOSXInputText.java Thu Oct 11 16:59:50 2012 -0700 @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 7199180 + * @summary [macosx] Dead keys handling for input methods + * @author alexandr.scherbatiy area=awt.event + * @run main DeadKeyMacOSXInputText + */ +import java.awt.*; +import java.awt.event.*; +import java.awt.event.KeyEvent; +import javax.swing.JTextField; +import sun.awt.OSInfo; +import sun.awt.SunToolkit; + +public class DeadKeyMacOSXInputText { + + private static SunToolkit toolkit; + private static volatile int state = 0; + + public static void main(String[] args) throws Exception { + + if (OSInfo.getOSType() != OSInfo.OSType.MACOSX) { + return; + } + + toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); + Robot robot = new Robot(); + robot.setAutoDelay(50); + + createAndShowGUI(); + + // Pressed keys: Alt + E + A + // Results: ALT + VK_DEAD_ACUTE + a with accute accent + robot.keyPress(KeyEvent.VK_ALT); + robot.keyPress(KeyEvent.VK_E); + robot.keyRelease(KeyEvent.VK_E); + robot.keyRelease(KeyEvent.VK_ALT); + + robot.keyPress(KeyEvent.VK_A); + robot.keyRelease(KeyEvent.VK_A); + toolkit.realSync(); + + if (state != 3) { + throw new RuntimeException("Wrong number of key events."); + } + } + + static void createAndShowGUI() { + Frame frame = new Frame(); + frame.setSize(300, 300); + Panel panel = new Panel(new BorderLayout()); + JTextField textField = new JTextField(); + textField.addKeyListener(new DeadKeyListener()); + panel.add(textField, BorderLayout.CENTER); + frame.add(panel); + frame.setVisible(true); + toolkit.realSync(); + + textField.requestFocusInWindow(); + toolkit.realSync(); + + } + + static class DeadKeyListener extends KeyAdapter { + + @Override + public void keyPressed(KeyEvent e) { + int keyCode = e.getKeyCode(); + char keyChar = e.getKeyChar(); + + switch (state) { + case 0: + if (keyCode != KeyEvent.VK_ALT) { + throw new RuntimeException("Alt is not pressed."); + } + state++; + break; + case 1: + if (keyCode != KeyEvent.VK_DEAD_ACUTE) { + throw new RuntimeException("Dead ACUTE is not pressed."); + } + if (keyChar != 0xB4) { + throw new RuntimeException("Pressed char is not dead acute."); + } + state++; + break; + } + } + + @Override + public void keyTyped(KeyEvent e) { + int keyCode = e.getKeyCode(); + char keyChar = e.getKeyChar(); + + if (state == 2) { + if (keyCode != 0) { + throw new RuntimeException("Key code should be undefined."); + } + if (keyChar != 0xE1) { + throw new RuntimeException("A char does not have ACCUTE accent"); + } + state++; + } else { + throw new RuntimeException("Wron number of keyTyped events."); + } + } + } +}
--- a/jdk/test/java/nio/Buffer/Basic-X.java.template Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/test/java/nio/Buffer/Basic-X.java.template Thu Oct 11 16:59:50 2012 -0700 @@ -335,7 +335,7 @@ fail(problem + String.format(": x=%s y=%s", x, y), xb, yb); } - private static void tryCatch(Buffer b, Class ex, Runnable thunk) { + private static void tryCatch(Buffer b, Class<?> ex, Runnable thunk) { boolean caught = false; try { thunk.run(); @@ -350,7 +350,7 @@ fail(ex.getName() + " not thrown", b); } - private static void tryCatch($type$ [] t, Class ex, Runnable thunk) { + private static void tryCatch($type$ [] t, Class<?> ex, Runnable thunk) { tryCatch($Type$Buffer.wrap(t), ex, thunk); } @@ -681,6 +681,14 @@ bulkPutBuffer(rb); }}); + // put($Type$Buffer) should not change source position + final $Type$Buffer src = $Type$Buffer.allocate(1); + tryCatch(b, ReadOnlyBufferException.class, new Runnable() { + public void run() { + rb.put(src); + }}); + ck(src, src.position(), 0); + tryCatch(b, ReadOnlyBufferException.class, new Runnable() { public void run() { rb.compact(); @@ -744,6 +752,22 @@ #end[byte] +#if[char] + + // 7199551 + tryCatch(b, ReadOnlyBufferException.class, new Runnable() { + public void run() { + String s = new String(new char[rb.remaining() + 1]); + rb.put(s); + }}); + tryCatch(b, ReadOnlyBufferException.class, new Runnable() { + public void run() { + String s = new String(new char[rb.remaining() + 1]); + rb.append(s); + }}); + +#end[char] + if (rb.getClass().getName().startsWith("java.nio.Heap")) { tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
--- a/jdk/test/java/nio/Buffer/Basic.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/test/java/nio/Buffer/Basic.java Thu Oct 11 16:59:50 2012 -0700 @@ -25,7 +25,7 @@ * @summary Unit test for buffers * @bug 4413135 4414911 4416536 4416562 4418782 4471053 4472779 4490253 4523725 * 4526177 4463011 4660660 4661219 4663521 4782970 4804304 4938424 6231529 - * 6221101 6234263 6535542 6591971 6593946 6795561 7190219 + * 6221101 6234263 6535542 6591971 6593946 6795561 7190219 7199551 * @author Mark Reinhold */
--- a/jdk/test/java/nio/Buffer/BasicByte.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/test/java/nio/Buffer/BasicByte.java Thu Oct 11 16:59:50 2012 -0700 @@ -335,7 +335,7 @@ fail(problem + String.format(": x=%s y=%s", x, y), xb, yb); } - private static void tryCatch(Buffer b, Class ex, Runnable thunk) { + private static void tryCatch(Buffer b, Class<?> ex, Runnable thunk) { boolean caught = false; try { thunk.run(); @@ -350,7 +350,7 @@ fail(ex.getName() + " not thrown", b); } - private static void tryCatch(byte [] t, Class ex, Runnable thunk) { + private static void tryCatch(byte [] t, Class<?> ex, Runnable thunk) { tryCatch(ByteBuffer.wrap(t), ex, thunk); } @@ -681,6 +681,14 @@ bulkPutBuffer(rb); }}); + // put(ByteBuffer) should not change source position + final ByteBuffer src = ByteBuffer.allocate(1); + tryCatch(b, ReadOnlyBufferException.class, new Runnable() { + public void run() { + rb.put(src); + }}); + ck(src, src.position(), 0); + tryCatch(b, ReadOnlyBufferException.class, new Runnable() { public void run() { rb.compact(); @@ -744,6 +752,22 @@ + + + + + + + + + + + + + + + + if (rb.getClass().getName().startsWith("java.nio.Heap")) { tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
--- a/jdk/test/java/nio/Buffer/BasicChar.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/test/java/nio/Buffer/BasicChar.java Thu Oct 11 16:59:50 2012 -0700 @@ -335,7 +335,7 @@ fail(problem + String.format(": x=%s y=%s", x, y), xb, yb); } - private static void tryCatch(Buffer b, Class ex, Runnable thunk) { + private static void tryCatch(Buffer b, Class<?> ex, Runnable thunk) { boolean caught = false; try { thunk.run(); @@ -350,7 +350,7 @@ fail(ex.getName() + " not thrown", b); } - private static void tryCatch(char [] t, Class ex, Runnable thunk) { + private static void tryCatch(char [] t, Class<?> ex, Runnable thunk) { tryCatch(CharBuffer.wrap(t), ex, thunk); } @@ -681,6 +681,14 @@ bulkPutBuffer(rb); }}); + // put(CharBuffer) should not change source position + final CharBuffer src = CharBuffer.allocate(1); + tryCatch(b, ReadOnlyBufferException.class, new Runnable() { + public void run() { + rb.put(src); + }}); + ck(src, src.position(), 0); + tryCatch(b, ReadOnlyBufferException.class, new Runnable() { public void run() { rb.compact(); @@ -744,6 +752,22 @@ + + + // 7199551 + tryCatch(b, ReadOnlyBufferException.class, new Runnable() { + public void run() { + String s = new String(new char[rb.remaining() + 1]); + rb.put(s); + }}); + tryCatch(b, ReadOnlyBufferException.class, new Runnable() { + public void run() { + String s = new String(new char[rb.remaining() + 1]); + rb.append(s); + }}); + + + if (rb.getClass().getName().startsWith("java.nio.Heap")) { tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
--- a/jdk/test/java/nio/Buffer/BasicDouble.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/test/java/nio/Buffer/BasicDouble.java Thu Oct 11 16:59:50 2012 -0700 @@ -335,7 +335,7 @@ fail(problem + String.format(": x=%s y=%s", x, y), xb, yb); } - private static void tryCatch(Buffer b, Class ex, Runnable thunk) { + private static void tryCatch(Buffer b, Class<?> ex, Runnable thunk) { boolean caught = false; try { thunk.run(); @@ -350,7 +350,7 @@ fail(ex.getName() + " not thrown", b); } - private static void tryCatch(double [] t, Class ex, Runnable thunk) { + private static void tryCatch(double [] t, Class<?> ex, Runnable thunk) { tryCatch(DoubleBuffer.wrap(t), ex, thunk); } @@ -681,6 +681,14 @@ bulkPutBuffer(rb); }}); + // put(DoubleBuffer) should not change source position + final DoubleBuffer src = DoubleBuffer.allocate(1); + tryCatch(b, ReadOnlyBufferException.class, new Runnable() { + public void run() { + rb.put(src); + }}); + ck(src, src.position(), 0); + tryCatch(b, ReadOnlyBufferException.class, new Runnable() { public void run() { rb.compact(); @@ -744,6 +752,22 @@ + + + + + + + + + + + + + + + + if (rb.getClass().getName().startsWith("java.nio.Heap")) { tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
--- a/jdk/test/java/nio/Buffer/BasicFloat.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/test/java/nio/Buffer/BasicFloat.java Thu Oct 11 16:59:50 2012 -0700 @@ -335,7 +335,7 @@ fail(problem + String.format(": x=%s y=%s", x, y), xb, yb); } - private static void tryCatch(Buffer b, Class ex, Runnable thunk) { + private static void tryCatch(Buffer b, Class<?> ex, Runnable thunk) { boolean caught = false; try { thunk.run(); @@ -350,7 +350,7 @@ fail(ex.getName() + " not thrown", b); } - private static void tryCatch(float [] t, Class ex, Runnable thunk) { + private static void tryCatch(float [] t, Class<?> ex, Runnable thunk) { tryCatch(FloatBuffer.wrap(t), ex, thunk); } @@ -681,6 +681,14 @@ bulkPutBuffer(rb); }}); + // put(FloatBuffer) should not change source position + final FloatBuffer src = FloatBuffer.allocate(1); + tryCatch(b, ReadOnlyBufferException.class, new Runnable() { + public void run() { + rb.put(src); + }}); + ck(src, src.position(), 0); + tryCatch(b, ReadOnlyBufferException.class, new Runnable() { public void run() { rb.compact(); @@ -744,6 +752,22 @@ + + + + + + + + + + + + + + + + if (rb.getClass().getName().startsWith("java.nio.Heap")) { tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
--- a/jdk/test/java/nio/Buffer/BasicInt.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/test/java/nio/Buffer/BasicInt.java Thu Oct 11 16:59:50 2012 -0700 @@ -335,7 +335,7 @@ fail(problem + String.format(": x=%s y=%s", x, y), xb, yb); } - private static void tryCatch(Buffer b, Class ex, Runnable thunk) { + private static void tryCatch(Buffer b, Class<?> ex, Runnable thunk) { boolean caught = false; try { thunk.run(); @@ -350,7 +350,7 @@ fail(ex.getName() + " not thrown", b); } - private static void tryCatch(int [] t, Class ex, Runnable thunk) { + private static void tryCatch(int [] t, Class<?> ex, Runnable thunk) { tryCatch(IntBuffer.wrap(t), ex, thunk); } @@ -681,6 +681,14 @@ bulkPutBuffer(rb); }}); + // put(IntBuffer) should not change source position + final IntBuffer src = IntBuffer.allocate(1); + tryCatch(b, ReadOnlyBufferException.class, new Runnable() { + public void run() { + rb.put(src); + }}); + ck(src, src.position(), 0); + tryCatch(b, ReadOnlyBufferException.class, new Runnable() { public void run() { rb.compact(); @@ -744,6 +752,22 @@ + + + + + + + + + + + + + + + + if (rb.getClass().getName().startsWith("java.nio.Heap")) { tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
--- a/jdk/test/java/nio/Buffer/BasicLong.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/test/java/nio/Buffer/BasicLong.java Thu Oct 11 16:59:50 2012 -0700 @@ -335,7 +335,7 @@ fail(problem + String.format(": x=%s y=%s", x, y), xb, yb); } - private static void tryCatch(Buffer b, Class ex, Runnable thunk) { + private static void tryCatch(Buffer b, Class<?> ex, Runnable thunk) { boolean caught = false; try { thunk.run(); @@ -350,7 +350,7 @@ fail(ex.getName() + " not thrown", b); } - private static void tryCatch(long [] t, Class ex, Runnable thunk) { + private static void tryCatch(long [] t, Class<?> ex, Runnable thunk) { tryCatch(LongBuffer.wrap(t), ex, thunk); } @@ -681,6 +681,14 @@ bulkPutBuffer(rb); }}); + // put(LongBuffer) should not change source position + final LongBuffer src = LongBuffer.allocate(1); + tryCatch(b, ReadOnlyBufferException.class, new Runnable() { + public void run() { + rb.put(src); + }}); + ck(src, src.position(), 0); + tryCatch(b, ReadOnlyBufferException.class, new Runnable() { public void run() { rb.compact(); @@ -744,6 +752,22 @@ + + + + + + + + + + + + + + + + if (rb.getClass().getName().startsWith("java.nio.Heap")) { tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
--- a/jdk/test/java/nio/Buffer/BasicShort.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/test/java/nio/Buffer/BasicShort.java Thu Oct 11 16:59:50 2012 -0700 @@ -335,7 +335,7 @@ fail(problem + String.format(": x=%s y=%s", x, y), xb, yb); } - private static void tryCatch(Buffer b, Class ex, Runnable thunk) { + private static void tryCatch(Buffer b, Class<?> ex, Runnable thunk) { boolean caught = false; try { thunk.run(); @@ -350,7 +350,7 @@ fail(ex.getName() + " not thrown", b); } - private static void tryCatch(short [] t, Class ex, Runnable thunk) { + private static void tryCatch(short [] t, Class<?> ex, Runnable thunk) { tryCatch(ShortBuffer.wrap(t), ex, thunk); } @@ -681,6 +681,14 @@ bulkPutBuffer(rb); }}); + // put(ShortBuffer) should not change source position + final ShortBuffer src = ShortBuffer.allocate(1); + tryCatch(b, ReadOnlyBufferException.class, new Runnable() { + public void run() { + rb.put(src); + }}); + ck(src, src.position(), 0); + tryCatch(b, ReadOnlyBufferException.class, new Runnable() { public void run() { rb.compact(); @@ -744,6 +752,22 @@ + + + + + + + + + + + + + + + + if (rb.getClass().getName().startsWith("java.nio.Heap")) { tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/nio/channels/Selector/ChangingInterests.java Thu Oct 11 16:59:50 2012 -0700 @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + * @bug 7200742 + * @summary Test that Selector doesn't spin when changing interest ops + */ + +import java.net.*; +import java.nio.ByteBuffer; +import java.nio.channels.*; +import static java.nio.channels.SelectionKey.*; +import java.io.IOException; + +public class ChangingInterests { + + static int OPS[] = { 0, OP_WRITE, OP_READ, (OP_WRITE|OP_READ) }; + + static String toOpsString(int ops) { + String s = ""; + if ((ops & OP_READ) > 0) + s += "POLLIN"; + if ((ops & OP_WRITE) > 0) { + if (s.length() > 0) + s += "|"; + s += "POLLOUT"; + } + if (s.length() == 0) + s = "0"; + return "(" + s + ")"; + } + + static void write1(SocketChannel peer) throws IOException { + peer.write(ByteBuffer.wrap(new byte[1])); + // give time for other end to be readable + try { + Thread.sleep(50); + } catch (InterruptedException ignore) { } + } + + static void drain(SocketChannel sc) throws IOException { + ByteBuffer buf = ByteBuffer.allocate(100); + int n; + while ((n = sc.read(buf)) > 0) { + buf.rewind(); + } + } + + /** + * Changes the given key's interest set from one set to another and then + * checks the selected key set and the key's channel. + */ + static void testChange(SelectionKey key, int from, int to) throws IOException { + Selector sel = key.selector(); + assertTrue(sel.keys().size() == 1, "Only one channel should be registered"); + + // ensure that channel is registered with the "from" interest set + key.interestOps(from); + sel.selectNow(); + sel.selectedKeys().clear(); + + // change to the "to" interest set + key.interestOps(to); + System.out.println("select..."); + int selected = sel.selectNow(); + System.out.println("" + selected + " channel(s) selected"); + + int expected = (to == 0) ? 0 : 1; + assertTrue(selected == expected, "Expected " + expected); + + // check selected keys + for (SelectionKey k: sel.selectedKeys()) { + assertTrue(k == key, "Unexpected key selected"); + + boolean readable = k.isReadable(); + boolean writable = k.isWritable(); + + System.out.println("key readable: " + readable); + System.out.println("key writable: " + writable); + + if ((to & OP_READ) == 0) { + assertTrue(!readable, "Not expected to be readable"); + } else { + assertTrue(readable, "Expected to be readable"); + } + + if ((to & OP_WRITE) == 0) { + assertTrue(!writable, "Not expected to be writable"); + } else { + assertTrue(writable, "Expected to be writable"); + } + + sel.selectedKeys().clear(); + } + } + + /** + * Tests that given Selector's select method blocks. + */ + static void testForSpin(Selector sel) throws IOException { + System.out.println("Test for spin..."); + long start = System.currentTimeMillis(); + int count = 3; + while (count-- > 0) { + int selected = sel.select(1000); + System.out.println("" + selected + " channel(s) selected"); + assertTrue(selected == 0, "Channel should not be selected"); + } + long dur = System.currentTimeMillis() - start; + assertTrue(dur > 1000, "select was too short"); + } + + public static void main(String[] args) throws IOException { + InetAddress lh = InetAddress.getLocalHost(); + + // create loopback connection + ServerSocketChannel ssc = + ServerSocketChannel.open().bind(new InetSocketAddress(0)); + + final SocketChannel sc = SocketChannel.open(); + sc.connect(new InetSocketAddress(lh, ssc.socket().getLocalPort())); + SocketChannel peer = ssc.accept(); + + sc.configureBlocking(false); + + // ensure that channel "sc" is readable + write1(peer); + + try (Selector sel = Selector.open()) { + SelectionKey key = sc.register(sel, 0); + sel.selectNow(); + + // test all transitions + for (int from: OPS) { + for (int to: OPS) { + + System.out.println(toOpsString(from) + " -> " + toOpsString(to)); + + testChange(key, from, to); + + // if the interst ops is now 0 then Selector should not spin + if (to == 0) + testForSpin(sel); + + // if interest ops is now OP_READ then make non-readable + // and test that Selector does not spin. + if (to == OP_READ) { + System.out.println("Drain channel..."); + drain(sc); + testForSpin(sel); + System.out.println("Make channel readable again"); + write1(peer); + } + + System.out.println(); + } + } + + } finally { + sc.close(); + peer.close(); + ssc.close(); + } + } + + static void assertTrue(boolean v, String msg) { + if (!v) throw new RuntimeException(msg); + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/nio/channels/etc/AdaptorCloseAndInterrupt.java Thu Oct 11 16:59:50 2012 -0700 @@ -0,0 +1,221 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + * @bug 7184932 + * @summary Test asynchronous close and interrupt of timed socket adapter methods + */ + +import java.io.*; +import java.nio.*; +import java.nio.channels.*; +import java.nio.channels.spi.AbstractSelectableChannel; +import java.net.*; +import java.util.concurrent.Callable; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; +import java.util.Random; + + +public class AdaptorCloseAndInterrupt { + private static final ScheduledExecutorService pool = + Executors.newScheduledThreadPool(1); + final ServerSocketChannel listener; + final DatagramChannel peer; + final int port; + + public AdaptorCloseAndInterrupt() { + listener = null; + peer = null; + port = -1; + } + + public AdaptorCloseAndInterrupt(ServerSocketChannel listener) { + this.listener = listener; + this.port = listener.socket().getLocalPort(); + this.peer = null; + } + + public AdaptorCloseAndInterrupt(DatagramChannel listener) { + this.peer = listener; + this.port = peer.socket().getLocalPort(); + this.listener = null; + } + + public static void main(String args[]) throws Exception { + try { + try (ServerSocketChannel listener = ServerSocketChannel.open()) { + listener.socket().bind(null); + new AdaptorCloseAndInterrupt(listener).scReadAsyncClose(); + new AdaptorCloseAndInterrupt(listener).scReadAsyncInterrupt(); + } + + try (DatagramChannel peer = DatagramChannel.open()) { + peer.socket().bind(null); + new AdaptorCloseAndInterrupt(peer).dcReceiveAsyncClose(); + new AdaptorCloseAndInterrupt(peer).dcReceiveAsyncInterrupt(); + } + + new AdaptorCloseAndInterrupt().ssAcceptAsyncClose(); + new AdaptorCloseAndInterrupt().ssAcceptAsyncInterrupt(); + } finally { + pool.shutdown(); + } + System.out.println("Test Passed"); + } + + void scReadAsyncClose() throws IOException { + try { + SocketChannel sc = SocketChannel.open(new InetSocketAddress( + "127.0.0.1", port)); + sc.socket().setSoTimeout(30*1000); + + doAsyncClose(sc); + + try { + sc.socket().getInputStream().read(new byte[100]); + throw new RuntimeException("read should not have completed"); + } catch (ClosedChannelException expected) {} + + if (!sc.socket().isClosed()) + throw new RuntimeException("socket is not closed"); + } finally { + // accept connection and close it. + listener.accept().close(); + } + } + + void scReadAsyncInterrupt() throws IOException { + try { + final SocketChannel sc = SocketChannel.open(new InetSocketAddress( + "127.0.0.1", port)); + sc.socket().setSoTimeout(30*1000); + + doAsyncInterrupt(); + + try { + sc.socket().getInputStream().read(new byte[100]); + throw new RuntimeException("read should not have completed"); + } catch (ClosedByInterruptException expected) { + Thread.currentThread().interrupted(); + } + + if (!sc.socket().isClosed()) + throw new RuntimeException("socket is not closed"); + } finally { + // accept connection and close it. + listener.accept().close(); + } + } + + void dcReceiveAsyncClose() throws IOException { + DatagramChannel dc = DatagramChannel.open(); + dc.connect(new InetSocketAddress( + "127.0.0.1", port)); + dc.socket().setSoTimeout(30*1000); + + doAsyncClose(dc); + + try { + dc.socket().receive(new DatagramPacket(new byte[100], 100)); + throw new RuntimeException("receive should not have completed"); + } catch (ClosedChannelException expected) {} + + if (!dc.socket().isClosed()) + throw new RuntimeException("socket is not closed"); + } + + void dcReceiveAsyncInterrupt() throws IOException { + DatagramChannel dc = DatagramChannel.open(); + dc.connect(new InetSocketAddress( + "127.0.0.1", port)); + dc.socket().setSoTimeout(30*1000); + + doAsyncInterrupt(); + + try { + dc.socket().receive(new DatagramPacket(new byte[100], 100)); + throw new RuntimeException("receive should not have completed"); + } catch (ClosedByInterruptException expected) { + Thread.currentThread().interrupted(); + } + + if (!dc.socket().isClosed()) + throw new RuntimeException("socket is not closed"); + } + + void ssAcceptAsyncClose() throws IOException { + ServerSocketChannel ssc = ServerSocketChannel.open(); + ssc.socket().bind(null); + ssc.socket().setSoTimeout(30*1000); + + doAsyncClose(ssc); + + try { + ssc.socket().accept(); + throw new RuntimeException("accept should not have completed"); + } catch (ClosedChannelException expected) {} + + if (!ssc.socket().isClosed()) + throw new RuntimeException("socket is not closed"); + } + + void ssAcceptAsyncInterrupt() throws IOException { + ServerSocketChannel ssc = ServerSocketChannel.open(); + ssc.socket().bind(null); + ssc.socket().setSoTimeout(30*1000); + + doAsyncInterrupt(); + + try { + ssc.socket().accept(); + throw new RuntimeException("accept should not have completed"); + } catch (ClosedByInterruptException expected) { + Thread.currentThread().interrupted(); + } + + if (!ssc.socket().isClosed()) + throw new RuntimeException("socket is not closed"); + } + + void doAsyncClose(final AbstractSelectableChannel sc) { + AdaptorCloseAndInterrupt.pool.schedule(new Callable<Void>() { + public Void call() throws Exception { + sc.close(); + return null; + } + }, new Random().nextInt(1000), TimeUnit.MILLISECONDS); + } + + void doAsyncInterrupt() { + final Thread current = Thread.currentThread(); + AdaptorCloseAndInterrupt.pool.schedule(new Callable<Void>() { + public Void call() throws Exception { + current.interrupt(); + return null; + } + }, new Random().nextInt(1000), TimeUnit.MILLISECONDS); + } + +}
--- a/jdk/test/java/nio/file/Files/CopyAndMove.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/test/java/nio/file/Files/CopyAndMove.java Thu Oct 11 16:59:50 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,7 +22,7 @@ */ /* @test - * @bug 4313887 6838333 6917021 7006126 + * @bug 4313887 6838333 6917021 7006126 6950237 * @summary Unit test for java.nio.file.Files copy and move methods * @library .. * @build CopyAndMove PassThroughFileSystem @@ -41,12 +41,14 @@ public class CopyAndMove { static final Random rand = new Random(); static boolean heads() { return rand.nextBoolean(); } + private static boolean testPosixAttributes = false; public static void main(String[] args) throws Exception { Path dir1 = TestUtil.createTemporaryDirectory(); try { // Same directory + testPosixAttributes = getFileStore(dir1).supportsFileAttributeView("posix"); testCopyFileToFile(dir1, dir1, TestUtil.supportsLinks(dir1)); testMove(dir1, dir1, TestUtil.supportsLinks(dir1)); @@ -57,6 +59,8 @@ try { boolean testSymbolicLinks = TestUtil.supportsLinks(dir1) && TestUtil.supportsLinks(dir2); + testPosixAttributes = getFileStore(dir1).supportsFileAttributeView("posix") && + getFileStore(dir2).supportsFileAttributeView("posix"); testCopyFileToFile(dir1, dir2, testSymbolicLinks); testMove(dir1, dir2, testSymbolicLinks); } finally { @@ -65,6 +69,8 @@ // Target is location associated with custom provider Path dir3 = PassThroughFileSystem.create().getPath(dir1.toString()); + testPosixAttributes = getFileStore(dir1).supportsFileAttributeView("posix") && + getFileStore(dir3).supportsFileAttributeView("posix"); testCopyFileToFile(dir1, dir3, false); testMove(dir1, dir3, false); @@ -90,7 +96,12 @@ if (!attrs1.isSymbolicLink()) { long time1 = attrs1.lastModifiedTime().toMillis(); long time2 = attrs2.lastModifiedTime().toMillis(); - assertTrue(time1 == time2); + + if (time1 != time2) { + System.err.format("File time for %s is %s\n", attrs1.fileKey(), attrs1.lastModifiedTime()); + System.err.format("File time for %s is %s\n", attrs2.fileKey(), attrs2.lastModifiedTime()); + assertTrue(false); + } } // check size @@ -207,7 +218,10 @@ if (source.getFileSystem().provider() == target.getFileSystem().provider()) { // verify POSIX attributes - if (posixAttributes != null && !basicAttributes.isSymbolicLink()) { + if (posixAttributes != null && + !basicAttributes.isSymbolicLink() && + testPosixAttributes) + { checkPosixAttributes(posixAttributes, readAttributes(target, PosixFileAttributes.class, NOFOLLOW_LINKS)); } @@ -636,7 +650,9 @@ // check POSIX attributes are copied String os = System.getProperty("os.name"); - if (os.equals("SunOS") || os.equals("Linux")) { + if ((os.equals("SunOS") || os.equals("Linux")) && + testPosixAttributes) + { checkPosixAttributes( readAttributes(source, PosixFileAttributes.class, linkOptions), readAttributes(target, PosixFileAttributes.class, linkOptions));
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/text/BreakIterator/Bug7104012.java Thu Oct 11 16:59:50 2012 -0700 @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +/* + * @test + * @bug 7104012 + * @summary Confirm that AIOBE is not thrown. + */ + +import java.text.*; +import java.util.*; + +public class Bug7104012 { + + public static void main(String[] args) { + boolean err = false; + + List<String> data = new ArrayList<>(); + data.add("\udb40"); + data.add(" \udb40"); + data.add("\udc53"); + data.add(" \udc53"); + data.add(" \udb40\udc53"); + data.add("\udb40\udc53"); + data.add("ABC \udb40\udc53 123"); + data.add("\udb40\udc53 ABC \udb40\udc53"); + + for (Locale locale : Locale.getAvailableLocales()) { + List<BreakIterator> breakIterators = new ArrayList<>(); + breakIterators.add(BreakIterator.getCharacterInstance(locale)); + breakIterators.add(BreakIterator.getLineInstance(locale)); + breakIterators.add(BreakIterator.getSentenceInstance(locale)); + breakIterators.add(BreakIterator.getWordInstance(locale)); + + for (BreakIterator bi : breakIterators) { + for (String str : data) { + try { + bi.setText(str); + bi.first(); + while (bi.next() != BreakIterator.DONE) { } + bi.last(); + while (bi.previous() != BreakIterator.DONE) { } + } + catch (ArrayIndexOutOfBoundsException ex) { + System.out.println(" " + data.indexOf(str) + + ": BreakIterator(" + locale + + ") threw AIOBE."); + err = true; + } + } + } + } + + if (err) { + throw new RuntimeException("Unexpected exeption."); + } + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/text/Collator/Bug7200119.java Thu Oct 11 16:59:50 2012 -0700 @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 7200119 + * @summary verify that getAvailableLocales() contains Locale.US + */ +import java.text.*; +import java.util.*; + +public class Bug7200119 { + public static void main(String[] args) { + List<Locale> avail = Arrays.asList(Collator.getAvailableLocales()); + + if (!avail.contains(Locale.US)) { + throw new RuntimeException("Failed."); + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/text/Format/DecimalFormat/Bug7196316.java Thu Oct 11 16:59:50 2012 -0700 @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +/* + * @test + * @bug 7196316 + * @summary Confirm that a non-default rounding mode is used even after deserialization. + */ + + +import java.io.*; +import java.math.*; +import java.text.*; + +public class Bug7196316 { + + private static final String filename = "bug7196316.ser"; + + public static void main(String[] args) throws Exception { + DecimalFormat df; + RoundingMode mode = RoundingMode.DOWN; + double given = 6.6; + String expected; + String actual; + + try (ObjectOutputStream os + = new ObjectOutputStream(new FileOutputStream(filename))) { + df = new DecimalFormat("#"); + df.setRoundingMode(mode); + expected = df.format(given); + os.writeObject(df); + } + + try (ObjectInputStream is + = new ObjectInputStream(new FileInputStream(filename))) { + df = (DecimalFormat)is.readObject(); + } + + RoundingMode newMode = df.getRoundingMode(); + if (mode != newMode) { + throw new RuntimeException("Unexpected roundig mode: " + newMode); + } else { + actual = df.format(given); + if (!expected.equals(actual)) { + throw new RuntimeException("Unexpected formatted result: \"" + + actual + "\""); + } else { + System.out.println("Passed: Expected rounding mode (" + newMode + + ") & formatted result: \"" + actual + "\""); + } + } + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/text/Format/DecimalFormat/FormatMicroBenchmark.java Thu Oct 11 16:59:50 2012 -0700 @@ -0,0 +1,926 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 7050528 + * @summary Set of micro-benchmarks testing throughput of java.text.DecimalFormat.format() + * @author Olivier Lagneau + * @run main FormatMicroBenchmark + */ + +/* This is a set of micro-benchmarks testing throughput of java.text.DecimalFormat.format(). + * It never fails. + * + * Usage and arguments: + * - Run with no argument skips the whole benchmark and exits. + * - Run with "-help" as first argument calls the usage() method and exits. + * - Run with "-doit" runs the benchmark with summary details. + * - Run with "-verbose" provides additional details on the run. + * + * Example run : + * java -Xms500m -Xmx500m -XX:NewSize=400m FormatMicroBenchmark -doit -verbose + * + * Running with jtreg: + * The jtreg header "run" tag options+args must be changed to avoid skipping + * the execution. here is an example of run options: + * "main/othervm -Xms500m -Xmx500m -XX:NewSize=400m FormatMicroBenchmark -doit" + * + * Note: + * - Vm options -Xms, -Xmx, -XX:NewSize must be set correctly for + * getting reliable numbers. Otherwise GC activity may corrupt results. + * As of jdk80b48 using "-Xms500m -Xmx500m -XX:NewSize=400m" covers + * all cases. + * - Optionally using "-XX:+printGC" option provides information that + * helps checking any GC activity while benches are run. + * + * Vm Options: + * - Vm options to use (as of jdk80b48): + * fast-path case : -Xms128m -Xmx128m -XX:NewSize=100m + * non fast-path case: -Xms500m -Xmx500m -XX:NewSize=400m + * or use worst case (non fast-path above) with both types of algorithm. + * + * - use -XX:+PrintGC to verify memory consumption of the benchmarks. + * (See "Checking Memory Consumption" below). + * + * Description: + * + * Fast-path algorithm for format(double...) call stack is very different of + * the standard call stack. Where the standard algorithm for formating double + * uses internal class sun.misc.FloatingDecimal and its dtoa(double) method to + * provide digits, fast-path embeds its own algorithm for binary to decimal + * string conversion. + * + * FloatingDecimal always converts completely the passed double to a string. + * Fast-path converts only to the needed digits since it follows constraints + * on both the pattern rule, the DecimalFormat instance properties, and the + * passed double. + * + * Micro benchmarks below measure the throughput for formating double values + * using NumberFormat.format(double) call stack. The standard DecimalFormat + * call stack as well as the fast-path algorithm implementation are sensitive + * to the nature of the passed double values regarding throughput performance. + * + * These benchmarks are useful both for measuring the global performance gain + * of fast-path and to check that any modification done on fast-path algorithm + * does not bring any regression in the performance boost of fast-path. + * + * Note that these benchmarks will provide numbers without any knowledge of + * the implementation of DecimalFormat class. So to check regression any run + * should be compared to another reference run with a previous JDK, wether or + * not this previous reference JDK contains fast-path implementation. + * + * The eight benchmarks below are dedicated to measure throughput on different + * kinds of double that all fall in the fast-path case (all in Integer range): + * + * - Integer case : used double values are all "integer-like" (ex: -12345.0). + * This is the benchFormatInteger micro-benchmark. + * + * - Fractional case : double values are "fractional" (ex: -0.12345). + * This is the benchFormatFractional micro-benchmark. + * + * - Small integral case : like Integer case but double values are all limited + * in their magnitude, from -500.0 to 500.0 if the number of iterations N is + * set to 500000. + * This is the benchFormatSmallIntegral micro-benchmark. + * + * - Fractional All Nines : doubles values have fractional part that is very + * close to "999" (decimal pattern), or "99" (currency pattern), + * or "0000...". + * This is the benchFormatFractionalAllNines micro-benchmark. + * + * - All Nines : double values are such that both integral and fractional + * part consist only of '9' digits. None of these values are rounded up. + * This is the benchFormatAllNines micro-benchmark. + * + * - Fair simple case : calling J the loop variable and iterating over + * the N number of iterations, used double values are computed as + * d = (double) J + J*seed + * where seed is a very small value that adds a fractional part and adds a + * small number to integral part. Provides fairly distributed double values. + * This is the benchFormatFairSimple micro-benchmark. + * + * - Fair case : this is a combination of small integral case and fair simple + * case. Double values are limited in their magnitude but follow a parabolic + * curve y = x**2 / K, keeping large magnitude only for large values of J. + * The intent is trying to reproduce a distribution of double values as could + * be found in a business application, with most values in either the low + * range or the high range. + * This is the benchFormatFair micro-benchmark. + * + * - Tie cases: values are very close to a tie case (iii...ii.fff5) + * That is the worst situation that can happen for Fast-path algorithm when + * considering throughput. + * This is the benchFormatTie micro-benchmark. + * + * For all of the micro-benchmarks, the throughput load of the eventual + * additional computations inside the loop is calculated prior to running the + * benchmark, and provided in the output. That may be useful since this load + * may vary for each architecture or machine configuration. + * + * The "-verbose" flag, when set, provides the throughput load numbers, the + * time spent for each run of a benchmark, as well as an estimation of the + * memory consumed by the runs. Beware of incremental GCs, see "Checking + * Memory Consumption" section below. Every run should be done with correct + * ms, mx, and NewSize vm options to get fully reliable numbers. + * + * The output provides the mean time needed for a benchmark after the server + * jit compiler has done its optimization work if any. Thus only the last but + * first three runs are taken into account in the time measurement (server jit + * compiler shows to have done full optimization in most cases after the + * second run, given a base number of iterations set to 500000). + * + * The program cleans up memory (stabilizeMemory() method) between each run of + * the benchmarks to make sure that no garbage collection activity happens in + * measurements. However that does not preclude incremental GCs activity that + * may happen during the micro-benchmark if -Xms, -Xmx, and NewSize options + * have not been tuned and set correctly. + * + * Checking Memory Consumption: + * + * For getting confidence in the throughput numbers, there must not give any + * GC activity during the benchmark runs. That means that specific VM options + * related to memory must be tuned for any given implementation of the JDK. + * + * Running with "-verbose" arguments will provide clues of the memory consumed + * but is not enough, since any unexpected incremental GC may lower + * artificially the estimation of the memory consumption. + * + * Options to set are -Xms, -Xmx, -XX:NewSize, plus -XX:+PrintGC to evaluate + * correctly the values of these options. When running "-verbose", varying + * numbers reported for memory consumption may indicate bad choices for these + * options. + * + * For jdk80b25, fast-path shows a consuption of ~60Mbs for 500000 iterations + * while a jdk without fast-path will consume ~260Mbs for each benchmark run. + * Indeed these values will vary depending on the jdk used. + * + * Correct option settings found jdk80b48 were : + * fast-path : -Xms128m -Xmx128m -XX:NewSize=100m + * non fast-path : -Xms500m -Xmx500m -XX:NewSize=400m + * Greater values can be provided safely but not smaller ones. + * ---------------------------------------------------------------------- + */ + +import java.util.*; +import java.text.NumberFormat; +import java.text.DecimalFormat; + +public class FormatMicroBenchmark { + + // The number of times the bench method will be run (must be at least 4). + private static final int NB_RUNS = 20; + + // The bench* methods below all iterates over [-MAX_RANGE , +MAX_RANGE] integer values. + private static final int MAX_RANGE = 500000; + + // Flag for more details on each bench run (default is no). + private static boolean Verbose = false; + + // Should we really execute the benches ? (no by default). + private static boolean DoIt = false; + + // Prints out a message describing how to run the program. + private static void usage() { + System.out.println( + "This is a set of micro-benchmarks testing throughput of " + + "java.text.DecimalFormat.format(). It never fails.\n\n" + + "Usage and arguments:\n" + + " - Run with no argument skips the whole benchmark and exits.\n" + + " - Run with \"-help\" as first argument prints this message and exits.\n" + + " - Run with \"-doit\" runs the benchmark with summary details.\n" + + " - Run with \"-verbose\" provides additional details on the run.\n\n" + + "Example run :\n" + + " java -Xms500m -Xmx500m -XX:NewSize=400m FormatMicroBenchmark -doit -verbose\n\n" + + "Note: \n" + + " - Vm options -Xms, -Xmx, -XX:NewSize must be set correctly for \n" + + " getting reliable numbers. Otherwise GC activity may corrupt results.\n" + + " As of jdk80b48 using \"-Xms500m -Xmx500m -XX:NewSize=400m\" covers \n" + + " all cases.\n" + + " - Optionally using \"-XX:+printGC\" option provides information that \n" + + " helps checking any GC activity while benches are run.\n\n" + + "Look at the heading comments and description in source code for " + + "detailed information.\n"); + } + + /* We will call stabilizeMemory before each call of benchFormat***(). + * This in turn tries to clean up as much memory as possible. + * As a safe bound we limit number of System.gc() calls to 10, + * but most of the time two calls to System.gc() will be enough. + * If memory reporting is asked for, the method returns the difference + * of free memory between entering an leaving the method. + */ + private static long stabilizeMemory(boolean reportConsumedMemory) { + final long oneMegabyte = 1024L * 1024L; + + long refMemory = 0; + long initialMemoryLeft = Runtime.getRuntime().freeMemory(); + long currMemoryLeft = initialMemoryLeft; + int nbGCCalls = 0; + + do { + nbGCCalls++; + + refMemory = currMemoryLeft; + System.gc(); + currMemoryLeft = Runtime.getRuntime().freeMemory(); + + } while ((Math.abs(currMemoryLeft - refMemory) > oneMegabyte) && + (nbGCCalls < 10)); + + if (Verbose && + reportConsumedMemory) + System.out.println("Memory consumed by previous run : " + + (currMemoryLeft - initialMemoryLeft)/oneMegabyte + "Mbs."); + + return currMemoryLeft; + } + + + // ---------- Integer only based bench -------------------- + private static final String INTEGER_BENCH = "benchFormatInteger"; + private static String benchFormatInteger(NumberFormat nf) { + String str = ""; + for (int j = - MAX_RANGE; j <= MAX_RANGE; j++) + str = nf.format((double) j); + return str; + } + + // This reproduces the throughput load added in benchFormatInteger + static double integerThroughputLoad() { + double d = 0.0d; + for (int j = - MAX_RANGE; j <= MAX_RANGE; j++) { + d = (double) j; + } + return d; + } + + // Runs integerThroughputLoad and calculate its mean load + static void calculateIntegerThroughputLoad() { + int nbRuns = NB_RUNS; + long elapsedTime = 0; + double foo; + + for (int i = 1; i <= nbRuns; i++) { + + long startTime = System.nanoTime(); + foo = integerThroughputLoad(); + long estimatedTime = System.nanoTime() - startTime; + if (i > 3) elapsedTime += estimatedTime / 1000; + } + + + if (Verbose) + System.out.println( + "calculated throughput load for " + INTEGER_BENCH + + " bench is = " + (elapsedTime / (nbRuns - 3)) + " microseconds"); + } + + // ---------- Fractional only based bench -------------------- + private static final String FRACTIONAL_BENCH = "benchFormatFractional"; + private static String benchFormatFractional(NumberFormat nf) { + String str = ""; + double floatingN = 1.0d / (double) MAX_RANGE; + for (int j = - MAX_RANGE; j <= MAX_RANGE; j++) + str = nf.format(floatingN * (double) j); + return str; + } + + // This reproduces the throughput load added in benchFormatFractional + static double fractionalThroughputLoad() { + double d = 0.0d; + double floatingN = 1.0d / (double) MAX_RANGE; + for (int j = - MAX_RANGE; j <= MAX_RANGE; j++) { + d = floatingN * (double) j; + } + return d; + } + + // Runs fractionalThroughputLoad and calculate its mean load + static void calculateFractionalThroughputLoad() { + int nbRuns = NB_RUNS; + long elapsedTime = 0; + double foo; + + for (int i = 1; i <= nbRuns; i++) { + + long startTime = System.nanoTime(); + foo = fractionalThroughputLoad(); + long estimatedTime = System.nanoTime() - startTime; + if (i > 3) elapsedTime += estimatedTime / 1000; + } + + if (Verbose) + System.out.println( + "calculated throughput load for " + FRACTIONAL_BENCH + + " bench is = " + (elapsedTime / (nbRuns - 3)) + " microseconds"); + } + + // ---------- An Small Integral bench -------------------- + // that limits the magnitude of tested double values + private static final String SMALL_INTEGRAL_BENCH = "benchFormatSmallIntegral"; + private static String benchFormatSmallIntegral(NumberFormat nf) { + String str = ""; + for (int j = - MAX_RANGE; j <= MAX_RANGE; j++) + str = nf.format(((double) j) / 1000.0d); + return str; + } + + // This reproduces the throughput load added in benchFormatSmallIntegral + static double smallIntegralThroughputLoad() { + double d = 0.0d; + for (int j = - MAX_RANGE; j <= MAX_RANGE; j++) { + d = (double) j / 1000.0d; + } + return d; + } + + // Runs small_integralThroughputLoad and calculate its mean load + static void calculateSmallIntegralThroughputLoad() { + int nbRuns = NB_RUNS; + long elapsedTime = 0; + double foo; + + for (int i = 1; i <= nbRuns; i++) { + + long startTime = System.nanoTime(); + foo = smallIntegralThroughputLoad(); + long estimatedTime = System.nanoTime() - startTime; + if (i > 3) elapsedTime += estimatedTime / 1000; + } + + if (Verbose) + System.out.println( + "calculated throughput load for " + SMALL_INTEGRAL_BENCH + + " bench is = " + (elapsedTime / (nbRuns - 3)) + " microseconds"); + } + + // ---------- A fair and simple bench -------------------- + private static final String FAIR_SIMPLE_BENCH = "benchFormatFairSimple"; + private static String benchFormatFairSimple(NumberFormat nf, boolean isCurrency) { + String str = ""; + double seed = isCurrency ? 0.0010203040506070809 : 0.00010203040506070809; + double d = (double) -MAX_RANGE; + for (int j = - MAX_RANGE; j <= MAX_RANGE; j++) { + d = d + 1.0d + seed; + str = nf.format(d); + } + return str; + } + + // This reproduces the throughput load added in benchFormatFairSimple + static double fairSimpleThroughputLoad() { + double seed = 0.00010203040506070809; + double delta = 0.0d; + double d = (double) -MAX_RANGE; + for (int j = - MAX_RANGE; j <= MAX_RANGE; j++) { + d = d + 1.0d + seed; + } + return d; + } + + // Runs fairThroughputLoad and calculate its mean load + static void calculateFairSimpleThroughputLoad() { + int nbRuns = NB_RUNS; + long elapsedTime = 0; + double foo; + + for (int i = 1; i <= nbRuns; i++) { + + long startTime = System.nanoTime(); + foo = fairSimpleThroughputLoad(); + long estimatedTime = System.nanoTime() - startTime; + if (i > 3) elapsedTime += estimatedTime / 1000; + } + + if (Verbose) + System.out.println( + "calculated throughput load for " + FAIR_SIMPLE_BENCH + + " bench is = " + (elapsedTime / (nbRuns - 3)) + " microseconds"); + } + + // ---------- Fractional part is only made of nines bench -------------- + private static final String FRACTIONAL_ALL_NINES_BENCH = "benchFormatFractionalAllNines"; + private static String benchFormatFractionalAllNines(NumberFormat nf, boolean isCurrency) { + String str = ""; + double fractionalEven = isCurrency ? 0.993000001 : 0.99930000001; + double fractionalOdd = isCurrency ? 0.996000001 : 0.99960000001; + double fractional; + double d; + for (int j = - MAX_RANGE; j <= MAX_RANGE; j++) { + if ((j & 1) == 0) + fractional = fractionalEven; + else + fractional = fractionalOdd; + if ( j >= 0) + d = (double ) j + fractional; + else d = (double) j - fractional; + str = nf.format(d); + } + return str; + } + + // This reproduces the throughput load added in benchFormatFractionalAllNines + static double fractionalAllNinesThroughputLoad() { + double fractionalEven = 0.99930000001; + double fractionalOdd = 0.99960000001; + double fractional; + double d = 0.0d; + for (int j = - MAX_RANGE; j <= MAX_RANGE; j++) { + if ((j & 1) == 0) + fractional = fractionalEven; + else fractional = fractionalOdd; + if ( j >= 0) + d = (double ) j + fractional; + else d = (double) j - fractional; + } + return d; + } + + // Runs fractionalAllNinesThroughputLoad and calculate its mean load + static void calculateFractionalAllNinesThroughputLoad() { + int nbRuns = NB_RUNS; + long elapsedTime = 0; + double foo; + + for (int i = 1; i <= nbRuns; i++) { + + long startTime = System.nanoTime(); + foo = fractionalAllNinesThroughputLoad(); + long estimatedTime = System.nanoTime() - startTime; + if (i > 3) elapsedTime += estimatedTime / 1000; + } + + if (Verbose) + System.out.println( + "calculated throughput load for " + FRACTIONAL_ALL_NINES_BENCH + + " bench is = " + (elapsedTime / (nbRuns - 3)) + " microseconds"); + } + + // ---------- Number is only made of nines bench -------------- + private static final String ALL_NINES_BENCH = "benchFormatAllNines"; + private static String benchFormatAllNines(NumberFormat nf, boolean isCurrency) { + String str = ""; + double[] decimaAllNines = + {9.9993, 99.9993, 999.9993, 9999.9993, 99999.9993, + 999999.9993, 9999999.9993, 99999999.9993, 999999999.9993}; + double[] currencyAllNines = + {9.993, 99.993, 999.993, 9999.993, 99999.993, + 999999.993, 9999999.993, 99999999.993, 999999999.993}; + double[] valuesArray = (isCurrency) ? currencyAllNines : decimaAllNines; + double seed = 1.0 / (double) MAX_RANGE; + double d; + int id; + for (int j = - MAX_RANGE; j <= MAX_RANGE; j++) { + id = (j >= 0) ? j % 9 : -j % 9; + if ((j & 1) == 0) + d = valuesArray[id] + id * seed; + else + d = valuesArray[id] - id * seed; + str = nf.format(d); + } + return str; + } + + // This reproduces the throughput load added in benchFormatAllNines + static double allNinesThroughputLoad() { + double[] decimaAllNines = + {9.9993, 99.9993, 999.9993, 9999.9993, 99999.9993, + 999999.9993, 9999999.9993, 99999999.9993, 999999999.9993}; + double[] valuesArray = decimaAllNines; + double seed = 1.0 / (double) MAX_RANGE; + double d = 0.0d; + int id; + for (int j = - MAX_RANGE; j <= MAX_RANGE; j++) { + id = (j >= 0) ? j % 9 : -j % 9; + if ((j & 1) == 0) + d = valuesArray[id] + id * seed; + else + d = valuesArray[id] - id * seed; + } + return d; + } + + // Runs allNinesThroughputLoad and calculate its mean load + static void calculateAllNinesThroughputLoad() { + int nbRuns = NB_RUNS; + long elapsedTime = 0; + double foo; + + for (int i = 1; i <= nbRuns; i++) { + + long startTime = System.nanoTime(); + foo = allNinesThroughputLoad(); + long estimatedTime = System.nanoTime() - startTime; + if (i > 3) elapsedTime += estimatedTime / 1000; + } + + if (Verbose) + System.out.println( + "calculated throughput load for " + ALL_NINES_BENCH + + " bench is = " + (elapsedTime / (nbRuns - 3)) + " microseconds"); + } + + + + // --- A fair bench trying (hopefully) to reproduce business applicatons --- + + /* benchFormatFair uses the following formula : + * y = F(x) = sign(x) * x**2 * ((1000/MAX_RANGE)**2). + * + * which converts in the loop as (if j is the loop index) : + * x = double(j) + * k = 1000.0d * double(MAX_RANGE) + * y = sign(j) * x**2 * k**2 + * + * This is a flattened parabolic curve where only the j values + * in [-1000, 1000] will provide y results in [-1, +1] interval, + * and for abs(j) >= 1000 the result y will be greater than 1. + * + * The difference with benchFormatSmallIntegral is that since y results + * follow a parabolic curve the magnitude of y grows much more rapidly + * and closer to j values when abs(j) >= 1000: + * - for |j| < 1000, SmallIntegral(j) < 1.0 and fair(j) < 1.0 + * - for j in [1000, 10000[ + * SmallIntegral(j) is in [1, 10[ + * Fair(j) is in [4, 400[ + * - for j in [10000,100000[ + * SmallIntegral(j) is in [10, 100[ + * Fair(j) is in [400,40000[ + * - for j in [100000,1000000[ + * SmallIntegral(j) is in [100, 1000[ + * Fair(j) is in [40000, 4000000[ + * + * Since double values for j less than 100000 provide only 4 digits in the + * integral, values greater than 250000 provide at least 6 digits, and 500000 + * computes to 1000000, the distribution is roughly half with less than 5 + * digits and half with at least 6 digits in the integral part. + * + * Compared to FairSimple bench, this represents an application where 20% of + * the double values to format are less than 40000.0 absolute value. + * + * Fair(j) is close to the magnitude of j when j > 100000 and is hopefully + * more representative of what may be found in general in business apps. + * (assumption : there will be mainly either small or large values, and + * less values in middle range). + * + * We could get even more precise distribution of values using formula : + * y = sign(x) * abs(x)**n * ((1000 / MAX_RANGE)**n) where n > 2, + * or even well-known statistics function to fine target such distribution, + * but we have considred that the throughput load for calculating y would + * then be too high. We thus restrain the use of a power of 2 formula. + */ + + private static final String FAIR_BENCH = "benchFormatFair"; + private static String benchFormatFair(NumberFormat nf) { + String str = ""; + double k = 1000.0d / (double) MAX_RANGE; + k *= k; + + double d; + double absj; + double jPowerOf2; + for (int j = - MAX_RANGE; j <= MAX_RANGE; j++) { + absj = (double) j; + jPowerOf2 = absj * absj; + d = k * jPowerOf2; + if (j < 0) d = -d; + str = nf.format(d); + } + return str; + } + + // This is the exact throughput load added in benchFormatFair + static double fairThroughputLoad() { + double k = 1000.0d / (double) MAX_RANGE; + k *= k; + + double d = 0.0d; + double absj; + double jPowerOf2; + for (int j = - MAX_RANGE; j <= MAX_RANGE; j++) { + absj = (double) j; + jPowerOf2 = absj * absj; + d = k * jPowerOf2; + if (j < 0) d = -d; + } + return d; + } + + // Runs fairThroughputLoad and calculate its mean load + static void calculateFairThroughputLoad() { + int nbRuns = NB_RUNS; + long elapsedTime = 0; + double foo; + + for (int i = 1; i <= nbRuns; i++) { + + long startTime = System.nanoTime(); + foo = fairThroughputLoad(); + long estimatedTime = System.nanoTime() - startTime; + if (i > 3) elapsedTime += estimatedTime / 1000; + } + + if (Verbose) + System.out.println( + "calculated throughput load for " + FAIR_BENCH + + " bench is = " + (elapsedTime / (nbRuns - 3)) + " microseconds"); + } + + // ---------- All double values are very close to a tie -------------------- + // i.e. like 123.1235 (for decimal case) or 123.125 (for currency case). + + private static final String TIE_BENCH = "benchFormatTie"; + private static String benchFormatTie(NumberFormat nf, boolean isCurrency) { + double d; + String str = ""; + double fractionaScaling = (isCurrency) ? 1000.0d : 10000.0d; + int fixedFractionalPart = (isCurrency) ? 125 : 1235; + for (int j = - MAX_RANGE; j <= MAX_RANGE; j++) { + d = (((double) j * fractionaScaling) + + (double) fixedFractionalPart) / fractionaScaling; + str = nf.format(d); + } + return str; + } + + // This is the exact throughput load added in benchFormatTie + static double tieThroughputLoad(boolean isCurrency) { + double d = 0.0d; + double fractionaScaling = (isCurrency) ? 1000.0d : 10000.0d; + int fixedFractionalPart = (isCurrency) ? 125 : 1235; + for (int j = - MAX_RANGE; j <= MAX_RANGE; j++) { + d = (((double) j * fractionaScaling) + + (double) fixedFractionalPart) / fractionaScaling; + } + return d; + } + + // Runs tieThroughputLoad and calculate its mean load + static void calculateTieThroughputLoad(boolean isCurrency) { + int nbRuns = NB_RUNS; + long elapsedTime = 0; + double foo; + + for (int i = 1; i <= nbRuns; i++) { + + long startTime = System.nanoTime(); + foo = tieThroughputLoad(isCurrency); + long estimatedTime = System.nanoTime() - startTime; + if (i > 3) elapsedTime += estimatedTime / 1000; + } + + if (Verbose) + System.out.println( + "calculated throughput load for " + TIE_BENCH + + " bench is = " + (elapsedTime / (nbRuns - 3)) + " microseconds"); + } + + + // Print statistics for passed times results of benchName. + static void printPerfResults(long[] times, String benchName) { + int nbBenches = times.length; + + long totalTimeSpent = 0; + long meanTimeSpent; + + double variance = 0; + double standardDeviation = 0; + + // Calculates mean spent time + for (int i = 1; i <= nbBenches; i++) + totalTimeSpent += times[i-1]; + meanTimeSpent = totalTimeSpent / nbBenches; + + // Calculates standard deviation + for (int j = 1; j <= nbBenches; j++) + variance += Math.pow(((double)times[j-1] - (double)meanTimeSpent), 2); + variance = variance / (double) times.length; + standardDeviation = Math.sqrt(variance) / meanTimeSpent; + + // Print result and statistics for benchName + System.out.println( + "Statistics (starting at 4th bench) for bench " + benchName + + "\n for last " + nbBenches + + " runs out of " + NB_RUNS + + " , each with 2x" + MAX_RANGE + " format(double) calls : " + + "\n mean exec time = " + meanTimeSpent + " microseconds" + + "\n standard deviation = " + String.format("%.3f", standardDeviation) + "% \n"); + } + + public static void main(String[] args) { + + if (args.length >= 1) { + // Parse args, just checks expected ones. Ignore others or dups. + if (args[0].equals("-help")) { + usage(); + return; + } + + for (String s : args) { + if (s.equals("-doit")) + DoIt = true; + else if (s.equals("-verbose")) + Verbose = true; + } + } else { + // No arguments, skips the benchmarks and exits. + System.out.println( + "Test skipped with success by default. See -help for details."); + return; + } + + if (!DoIt) { + if (Verbose) + usage(); + System.out.println( + "Test skipped and considered successful."); + return; + } + + System.out.println("Single Threaded micro benchmark evaluating " + + "the throughput of java.text.DecimalFormat.format() call stack.\n"); + + String fooString = ""; + + // Run benches for decimal instance + DecimalFormat df = (DecimalFormat) NumberFormat.getInstance(Locale.US); + System.out.println("Running with a decimal instance of DecimalFormat."); + + calculateIntegerThroughputLoad(); + fooString = + BenchType.INTEGER_BENCH.runBenchAndPrintStatistics(NB_RUNS, df, false); + + calculateFractionalThroughputLoad(); + fooString = + BenchType.FRACTIONAL_BENCH.runBenchAndPrintStatistics(NB_RUNS, df, false); + + calculateSmallIntegralThroughputLoad(); + fooString = + BenchType.SMALL_INTEGRAL_BENCH.runBenchAndPrintStatistics(NB_RUNS, df, false); + + calculateFractionalAllNinesThroughputLoad(); + fooString = + BenchType.FRACTIONAL_ALL_NINES_BENCH.runBenchAndPrintStatistics(NB_RUNS, df, false); + + calculateAllNinesThroughputLoad(); + fooString = + BenchType.ALL_NINES_BENCH.runBenchAndPrintStatistics(NB_RUNS, df, false); + + calculateFairSimpleThroughputLoad(); + fooString = + BenchType.FAIR_SIMPLE_BENCH.runBenchAndPrintStatistics(NB_RUNS, df, false); + + calculateFairThroughputLoad(); + fooString = + BenchType.FAIR_BENCH.runBenchAndPrintStatistics(NB_RUNS, df, false); + + calculateTieThroughputLoad(false); + fooString = + BenchType.TIE_BENCH.runBenchAndPrintStatistics(NB_RUNS, df, false); + + // Run benches for currency instance + DecimalFormat cf = (DecimalFormat) NumberFormat.getCurrencyInstance(Locale.US); + System.out.println("Running with a currency instance of DecimalFormat."); + + calculateIntegerThroughputLoad(); + fooString = + BenchType.INTEGER_BENCH.runBenchAndPrintStatistics(NB_RUNS, cf, false); + + calculateFractionalThroughputLoad(); + fooString = + BenchType.FRACTIONAL_BENCH.runBenchAndPrintStatistics(NB_RUNS, cf, false); + + calculateSmallIntegralThroughputLoad(); + fooString = + BenchType.SMALL_INTEGRAL_BENCH.runBenchAndPrintStatistics(NB_RUNS, cf, false); + + calculateFractionalAllNinesThroughputLoad(); + fooString = + BenchType.FRACTIONAL_ALL_NINES_BENCH.runBenchAndPrintStatistics(NB_RUNS, cf, false); + + calculateAllNinesThroughputLoad(); + fooString = + BenchType.ALL_NINES_BENCH.runBenchAndPrintStatistics(NB_RUNS, cf, false); + + calculateFairSimpleThroughputLoad(); + fooString = + BenchType.FAIR_SIMPLE_BENCH.runBenchAndPrintStatistics(NB_RUNS, cf, false); + + calculateFairThroughputLoad(); + fooString = + BenchType.FAIR_BENCH.runBenchAndPrintStatistics(NB_RUNS, cf, false); + + calculateTieThroughputLoad(false); + fooString = + BenchType.TIE_BENCH.runBenchAndPrintStatistics(NB_RUNS, cf, false); + + } + + // This class to factorise what would be duplicated otherwise. + static enum BenchType { + + INTEGER_BENCH("benchFormatInteger"), + FRACTIONAL_BENCH("benchFormatFractional"), + SMALL_INTEGRAL_BENCH("benchFormatSmallIntegral"), + FAIR_SIMPLE_BENCH("benchFormatFairSimple"), + FRACTIONAL_ALL_NINES_BENCH("benchFormatFractionalAllNines"), + ALL_NINES_BENCH("benchFormatAllNines"), + FAIR_BENCH("benchFormatFair"), + TIE_BENCH("benchFormatTie"); + + private final String name; + + BenchType(String name) { + this.name = name; + } + + String runBenchAndPrintStatistics(int nbRuns, + NumberFormat nf, + boolean isCurrency) { + + // We eliminate the first 3 runs in the time measurements + // to let C2 do complete compilation and optimization work. + long[] elapsedTimes = new long[nbRuns - 3]; + + System.out.println("Now running " + nbRuns + " times bench " + name); + + String str = ""; + for (int i = 1; i <= nbRuns; i++) { + + stabilizeMemory(false); + long startTime = System.nanoTime(); + + switch(this) { + case INTEGER_BENCH : + str = benchFormatInteger(nf); + break; + case FRACTIONAL_BENCH : + str = benchFormatFractional(nf); + break; + case SMALL_INTEGRAL_BENCH : + str = benchFormatSmallIntegral(nf); + break; + case FRACTIONAL_ALL_NINES_BENCH : + str = benchFormatFractionalAllNines(nf, isCurrency); + break; + case ALL_NINES_BENCH : + str = benchFormatAllNines(nf, isCurrency); + break; + case FAIR_SIMPLE_BENCH : + str = benchFormatFairSimple(nf, isCurrency); + break; + case FAIR_BENCH : + str = benchFormatFair(nf); + break; + case TIE_BENCH : + str = benchFormatTie(nf, isCurrency); + break; + + default: + } + + + long estimatedTime = System.nanoTime() - startTime; + if (i > 3) + elapsedTimes[i-4] = estimatedTime / 1000; + + if (Verbose) + System.out.println( + "calculated time for " + name + + " bench " + i + " is = " + + (estimatedTime / 1000) + " microseconds"); + else System.out.print("."); + + stabilizeMemory(true); + } + + System.out.println(name + " Done."); + + printPerfResults(elapsedTimes, name); + + return str; + } + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/text/Format/DecimalFormat/GoldenDoubleValues.java Thu Oct 11 16:59:50 2012 -0700 @@ -0,0 +1,965 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* Set of constants and values used in RoundingAndPropertyTest.java. + * + * There are 5 different information in this class: + * - TestLocale is the locale used by RoundingAndPropertyTest regression test + * when calling DecimalFormat.format() on either the set of DecimalGoldenValues + * or CurrencyGoldenValues. + * See main method of RoundingAndPropertyTest. + * + * - FullLocalizationTestLocale is the locale used by RoundingAndPropertyTest + * regression test when calling DecimalFormat.format() on the set of values + * (DecimalLocalizationValues) used to test that localization of digits + * happens correctly when needed. + * See main method of RoundingAndPropertyTest. + * + * - DecimalLocalizationValues is an array containing all the double values used + * to check that localization of digits happens correctly when needed. + * See RoundingAndPropertyTest.testLocalizationValues() method. + * + * - DecimalGoldenValues and CurrencyGoldenValues are arrays containing all the + * double values that will be used as input when checking correctness of + * results returned by DecimalFormat.format(). + * 2 arrays are needed since decimal and currency formatting patterns require + * a different number of digits after decimal point. + * See RoundingAndPropertyTest.testGoldenValues() method. + * + * - PROPERTY_CHECK_POSITIVE_VALUE and PROPERTY_CHECK_NEGATIVE_VALUE are the + * double values used for testing the validity of the property changes call + * in the fast-path case. The locale used in that case is TestLocale. + * See RoundingAndPropertyTest.testSettersAndFastPath() method. + */ + +import java.util.*; + +class GoldenDoubleValues { + + // TestLocale is the testing locale used by RoundingAndPropertyTest test, + // when testing the golden double values + static final Locale TestLocale = new Locale("en", "US"); + + + // FullTestLocale is the testing locale used by RoundingAndPropertyTest test, + // when testing full localization of double values. + static final Locale FullLocalizationTestLocale = new Locale("hi", "IN"); + + + /* Below are the two double values used for exercising the changes of + * of DecimalFormat properties and symbols. These values are also used + * as golden values (see golden arrays below). + */ + + /* PROPERTY_CHECK_NEGATIVE_VALUE is the negative double value used for + * testing the validity of the property changes for fast-path. + * See testSettersAndFastPath() in RoundingAndPropertyTest test. + */ + static final double PROPERTY_CHECK_NEGATIVE_VALUE = -2147483646.2334997d; + + /* PROPERTY_CHECK_POSITIVE_VALUE is the positive double value used for + * testing the validity of the property changes for fast-path. + * See testSettersAndFastPath() in RoundingAndPropertyTest test. + */ + static final double PROPERTY_CHECK_POSITIVE_VALUE = 2147483646.2335003d; + + /* --- Array of double values to test localization ------------------------ + * + * For most locales, effective localization does not happen on digits, i.e. + * the digits are not changed due to localization. In order to check that + * fast-path localize correctly digits in such a case, the array of double + * values below deals with all the case of localization that may happen on + * digits + */ + static final double[] DecimalLocalizationValues = { + 1.123, + 12.123, + 123.123, + 1234.123, + 12345.123, + 123456.123, + 1234567.123, + 12345678.123, + 123456789.123, + 1234567890.123, + 1234.0, + 1234.9, + 1234.99, + 1234.999 + }; + + + /* --- Arrays of golden double values ---------------------------------- + * + * The GoldenValues arrays are used as input values for checking the + * correctness of the DecimalFormat.format() call results done in + * RoundingAndPropertyTest regression test. The results are compared to the + * expected ones found in GoldenFormattedValues. For each value in the + * arrays there is a corresponding expected string result found, + * represented as an array of unicode values, at the same index in the + * related GoldenFormattedValues array. The string returned by the format + * call and the found in GoldenFormattedValues array must be equal for the + * result to be considered valid. + * See RoundingAndPropertyTest.testGoldenValues() method. + * + * We need 2 such GoldenValues arrays since the decimal and currency + * formatting rules require different number of digits after decimal point. + * + * Thus we have two different arrays of golden values: + * - DecimalGoldenValues for the decimal case. + * - CurrencyGoldenValues for the currency case. + * + * They are associated to related GoldenFormattedValues arrays, generated by + * running RoundingAndPropertyTest with a "gengold" argument: + * - DecimalGoldenFormattedValues for the decimal case. + * - CurrencyGoldenFormattedValues for the currency case. + * These two generated arrays are found in GoldenFormattedValues.java file. + * + * The impact of the formatting rules is as follows, because the pattern + * rule for the fractional part is different for decimal and currency + * patterns: + * - in decimal case one must output the first non-zero 3 digits of + * fractional part 1.1232 => "1.123" and 1.12016789 => "1.12" + * - in currency case the first 2 fractional digits are always output + * 1.1232 => "1.12" and 1.0016789 => "1.00" + * + * Thus we need a different number of fractional digits when we specify + * below the golden double values to check, and most of the decimal and + * currency golden values differ only in the number of fractional digits. + * + * The list below exercises almost all code pathes of the fast-path + * algorithm except localization of digits. + */ + + // --- The set of golden values for the Decimal formatting case -------- + static final double[] DecimalGoldenValues = { + // Testing of specific values + +0.0, + -0.0, + Double.MIN_VALUE, + Double.MIN_NORMAL, + PROPERTY_CHECK_NEGATIVE_VALUE, + PROPERTY_CHECK_POSITIVE_VALUE, + -2147483647.9996, + 2147483647.9996, + -1999999999.9994997, + 1999999999.9995003, + // Testing fast-path range checks (all outside bounds) + Double.NaN, + Double.POSITIVE_INFINITY, + Double.NEGATIVE_INFINITY, + Double.MAX_VALUE, + -9876543210.9876543, + 9876543210.9876543, + -1234567890.1234567E128, + 1234567890.1234567E128, + // Testing of integral string size + 1.123, + 12.123, + 123.123, + 1234.123, + 12345.123, + 123456.123, + 1234567.123, + 12345678.123, + 123456789.123, + 1234567890.123, + -1.123, + -12.123, + -123.123, + -1234.123, + -12345.123, + -123456.123, + -1234567.123, + -12345678.123, + -123456789.123, + -1234567890.123, + // Testing of fractional string size + 0.1, + 0.12, + 0.123, + 0.1234, + 10.1, + 10.12, + 10.123, + 10.1234, + 100.1, + 100.12, + 100.123, + 100.1234, + 1000.1, + 1000.12, + 1000.123, + 1000.1234, + 10000.1, + 10000.12, + 10000.123, + 10000.1234, + 100000.1, + 100000.12, + 100000.123, + 100000.1234, + 1000000.1, + 1000000.12, + 1000000.123, + 1000000.1234, + 10000000.1, + 10000000.12, + 10000000.123, + 10000000.1234, + 100000000.1, + 100000000.12, + 100000000.123, + 100000000.1234, + 1000000000.1, + 1000000000.12, + 1000000000.123, + 1000000000.1234, + -0.1, + -0.12, + -0.123, + -0.1234, + -10.1, + -10.12, + -10.123, + -10.1234, + -100.1, + -100.12, + -100.123, + -100.1234, + -1000.1, + -1000.12, + -1000.123, + -1000.1234, + -10000.1, + -10000.12, + -10000.123, + -10000.1234, + -100000.1, + -100000.12, + -100000.123, + -100000.1234, + -1000000.1, + -1000000.12, + -1000000.123, + -1000000.1234, + -10000000.1, + -10000000.12, + -10000000.123, + -10000000.1234, + -100000000.1, + -100000000.12, + -100000000.123, + -100000000.1234, + -1000000000.1, + -1000000000.12, + -1000000000.123, + -1000000000.1234, + // Testing of special rounding cases + 1.9993, + 12.9993, + 123.9993, + 1234.9993, + 12345.9993, + 123456.9993, + 1234567.9993, + 12345678.9993, + 123456789.9993, + 1234567890.9993, + 1.9996, + 12.9996, + 123.9996, + 1234.9996, + 12345.9996, + 123456.9996, + 1234567.9996, + 12345678.9996, + 123456789.9996, + 1234567890.9996, + -1.9993, + -12.9993, + -123.9993, + -1234.9993, + -12345.9993, + -123456.9993, + -1234567.9993, + -12345678.9993, + -123456789.9993, + -1234567890.9993, + -1.9996, + -12.9996, + -123.9996, + -1234.9996, + -12345.9996, + -123456.9996, + -1234567.9996, + -12345678.9996, + -123456789.9996, + -1234567890.9996, + 109.9996, + 1099.9996, + 10999.9996, + 109999.9996, + 1099999.9996, + 10999999.9996, + 109999999.9996, + 1099999999.9996, + -109.9996, + -1099.9996, + -10999.9996, + -109999.9996, + -1099999.9996, + -10999999.9996, + -109999999.9996, + -1099999999.9996, + 1.9996, + 19.9996, + 199.9996, + 1999.9996, + 19999.9996, + 199999.9996, + 1999999.9996, + 19999999.9996, + 199999999.9996, + 1999999999.9996, + -1.9996, + -19.9996, + -199.9996, + -1999.9996, + -19999.9996, + -199999.9996, + -1999999.9996, + -19999999.9996, + -199999999.9996, + -1999999999.9996, + // Testing for all nines cases + 9.9996, + 99.9996, + 999.9996, + 9999.9996, + 99999.9996, + 999999.9996, + 9999999.9996, + 99999999.9996, + 999999999.9996, + 9.999, + 99.999, + 999.999, + 9999.999, + 99999.999, + 999999.999, + 9999999.999, + 99999999.999, + 999999999.999, + -9.9996, + -99.9996, + -999.9996, + -9999.9996, + -99999.9996, + -999999.9996, + -9999999.9996, + -99999999.9996, + -999999999.9996, + -9.999, + -99.999, + -999.999, + -9999.999, + -99999.999, + -999999.999, + -9999999.999, + -99999999.999, + -999999999.999, + // Testing for no Fractional part cases + 1.0, + 12.0, + 123.0, + 1234.0, + 12345.0, + 123456.0, + 1234567.0, + 12345678.0, + 123456789.0, + 1234567890.0, + -1.0, + -12.0, + -123.0, + -1234.0, + -12345.0, + -123456.0, + -1234567.0, + -12345678.0, + -123456789.0, + -1234567890.0, + // Testing of tricky cases + -2599.399999990123, + -2599.339999990123, + -2599.333999990123, + 1.000099999999818, + 1.000199999999818, + 1.000299999999818, + 1.000399999999818, + 1.000499999999818, + 1.000599999999818, + 1.000699999999818, + 1.000799999999818, + 1.000899999999818, + 1.000999999999818, + 1.2224999999999980, + 1.2224999999999981, + 1.2224999999999982, + 1.2224999999999983, + 1.2224999999999984, + 1.2224999999999985, + 1.2224999999999986, + 1.2224999999999987, + 1.2224999999999988, + 1.2224999999999989, + 1.2224999999999990, + 1.2224999999999991, + 1.2224999999999992, + 1.2224999999999993, + 1.2224999999999994, + 1.2224999999999995, + 1.2224999999999996, + 1.2224999999999997, + 1.2224999999999998, + // 1.2225 and 1.2224999999999999 have the same double approximation + 1.2225, + 1.2225000000000001, + 1.2225000000000002, + 1.2225000000000003, + 1.2225000000000004, + 1.2225000000000005, + 1.2225000000000006, + 1.2225000000000007, + 1.2225000000000008, + 1.2225000000000009, + 1.2225000000000010, + 1.2225000000000011, + 1.2225000000000012, + 1.2225000000000013, + 1.2225000000000014, + 1.2225000000000015, + 1.2225000000000016, + 1.2225000000000017, + 1.2225000000000018, + 1.2225000000000019, + // Tricky rounding cases around tie values + 100913.67050000005, + 199999.99895901306, + 251846.3465, + 253243.8825000001, + 365045.85349999997, + 314734.9615, + 541133.9755, + 858372.1225, + 1000999.9995000001, + 1347505.7825, + 3358844.1975, + 9997979.4085, + 9993743.1585, + 9938671.9085, + 3385302.5465, + 3404642.6605, + 3431280.0865, + 3438756.4754999997, + 3446053.7874999996, + 3457917.5125, + 3465393.9014999997, + 3484734.0154999997, + 3492031.3274999997, + 3503895.0525, + 3511371.4414999997, + 3518668.7534999996, + 3530532.4785, + 3538008.8674999997, + 3545306.1794999996, + 3557169.9045, + 3557348.9814999998, + 3564646.2934999997, + 3583986.4074999997, + 3591283.7194999997, + 3603147.4445, + 3610623.8334999997, + 3617921.1454999996, + 3629784.8705, + 3637261.2594999997, + 3656422.2965, + 3656601.3734999998, + 3663898.6854999997, + 3675762.4105, + 3683238.7994999997, + 3690536.1114999996, + 3702399.8365, + 3709876.2254999997, + 3717173.5374999996, + 3729037.2625, + 3736513.6514999997, + 3755853.7654999997, + 3763151.0774999997, + 3775014.8025, + 3782491.1914999997, + 3789788.5034999996, + 3801652.2285, + 3809128.6174999997, + 3816425.9294999996, + 3828289.6545, + 3828468.7314999998, + 3835766.0434999997, + 3855106.1574999997, + 3862403.4694999997, + 3874267.1945, + 3881743.5834999997, + 3889040.8954999996, + 3900904.6205, + 3908381.0094999997, + 3927542.0465, + 3927721.1234999998, + 3935018.4354999997, + 3946882.1605, + 3954358.5494999997, + 3961655.8614999996, + 3973519.5865, + 3980995.9754999997, + 3988293.2874999996, + 4000157.0125, + 4007633.4014999997, + 4026973.5154999997, + 4034270.8274999997, + 4046134.5525, + 4053610.9414999997, + 4060908.2534999996, + 4072771.9785, + 4080248.3674999997, + 4087545.6794999996, + 4099409.4045, + 4099588.4814999998, + 4106885.7934999997, + 4126225.9074999997, + 4133523.2194999997, + 4145386.9445, + 4152863.3334999997, + 4160160.6454999996, + 4172024.3705, + 4179500.7594999997, + 4198661.7965, + 4203407.2865, + 4210704.5985, + 4213435.4975 + }; + + // --- The set of golden values for the currency formatting case -------- + static final double[] CurrencyGoldenValues = { + // Testing of specific values + +0.0, + -0.0, + Double.MIN_VALUE, + Double.MIN_NORMAL, + PROPERTY_CHECK_NEGATIVE_VALUE, + PROPERTY_CHECK_POSITIVE_VALUE, + -2147483647.996, + 2147483647.996, + -1999999999.9949997, + 1999999999.9950003, + // Testing fast-path range checks (all outside bounds) + Double.NaN, + Double.POSITIVE_INFINITY, + Double.NEGATIVE_INFINITY, + Double.MAX_VALUE, + -9876543210.9876543, + 9876543210.9876543, + -1234567890.1234567E128, + 1234567890.1234567E128, + // Testing of integral string size + 1.12, + 12.12, + 123.12, + 1234.12, + 12345.12, + 123456.12, + 1234567.12, + 12345678.12, + 123456789.12, + 1234567890.12, + -1.12, + -12.12, + -123.12, + -1234.12, + -12345.12, + -123456.12, + -1234567.12, + -12345678.12, + -123456789.12, + -1234567890.12, + // Testing of fractional string size + 0.1, + 0.12, + 0.123, + 10.1, + 10.12, + 10.123, + 100.1, + 100.12, + 100.123, + 1000.1, + 1000.12, + 1000.123, + 10000.1, + 10000.12, + 10000.123, + 100000.1, + 100000.12, + 100000.123, + 1000000.1, + 1000000.12, + 1000000.123, + 10000000.1, + 10000000.12, + 10000000.123, + 100000000.1, + 100000000.12, + 100000000.123, + 1000000000.1, + 1000000000.12, + 1000000000.123, + -0.1, + -0.12, + -0.123, + -10.1, + -10.12, + -10.123, + -100.1, + -100.12, + -100.123, + -1000.1, + -1000.12, + -1000.123, + -10000.1, + -10000.12, + -10000.123, + -100000.1, + -100000.12, + -100000.123, + -1000000.1, + -1000000.12, + -1000000.123, + -10000000.1, + -10000000.12, + -10000000.123, + -100000000.1, + -100000000.12, + -100000000.123, + -1000000000.1, + -1000000000.12, + -1000000000.123, + // Testing of special rounding cases + 1.993, + 12.993, + 123.993, + 1234.993, + 12345.993, + 123456.993, + 1234567.993, + 12345678.993, + 123456789.993, + 1234567890.993, + 1.996, + 12.996, + 123.996, + 1234.996, + 12345.996, + 123456.996, + 1234567.996, + 12345678.996, + 123456789.996, + 1234567890.996, + -1.993, + -12.993, + -123.993, + -1234.993, + -12345.993, + -123456.993, + -1234567.993, + -12345678.993, + -123456789.993, + -1234567890.993, + -1.996, + -12.996, + -123.996, + -1234.996, + -12345.996, + -123456.996, + -1234567.996, + -12345678.996, + -123456789.996, + -1234567890.996, + 109.996, + 1099.996, + 10999.996, + 109999.996, + 1099999.996, + 10999999.996, + 109999999.996, + 1099999999.996, + -109.996, + -1099.996, + -10999.996, + -109999.996, + -1099999.996, + -10999999.996, + -109999999.996, + -1099999999.996, + 1.996, + 19.996, + 199.996, + 1999.996, + 19999.996, + 199999.996, + 1999999.996, + 19999999.996, + 199999999.996, + 1999999999.996, + -1.996, + -19.996, + -199.996, + -1999.996, + -19999.996, + -199999.996, + -1999999.996, + -19999999.996, + -199999999.996, + -1999999999.996, + // Testing of all nines cases + 9.996, + 99.996, + 999.996, + 9999.996, + 99999.996, + 999999.996, + 9999999.996, + 99999999.996, + 999999999.996, + 9.99, + 99.99, + 999.99, + 9999.99, + 99999.99, + 999999.99, + 9999999.99, + 99999999.99, + 999999999.99, + -9.996, + -99.996, + -999.996, + -9999.996, + -99999.996, + -999999.996, + -9999999.996, + -99999999.996, + -999999999.996, + -9.99, + -99.99, + -999.99, + -9999.99, + -99999.99, + -999999.99, + -9999999.99, + -99999999.99, + -999999999.99, + // Testing of no Fractional part cases + 1.0, + 12.0, + 123.0, + 1234.0, + 12345.0, + 123456.0, + 1234567.0, + 12345678.0, + 123456789.0, + 1234567890.0, + -1.0, + -12.0, + -123.0, + -1234.0, + -12345.0, + -123456.0, + -1234567.0, + -12345678.0, + -123456789.0, + -1234567890.0, + // Testing of tricky cases + -2599.399999990123, + -2599.339999990123, + -2599.333999990123, + 1.000999999999818, + 1.001999999999818, + 1.002999999999818, + 1.003999999999818, + 1.004999999999818, + 1.005999999999818, + 1.006999999999818, + 1.007999999999818, + 1.008999999999818, + 1.009999999999818, + 1.224999999999980, + 1.224999999999981, + 1.224999999999982, + 1.224999999999983, + 1.224999999999984, + 1.224999999999985, + 1.224999999999986, + 1.224999999999987, + 1.224999999999988, + 1.224999999999989, + 1.224999999999990, + 1.224999999999991, + 1.224999999999992, + 1.224999999999993, + 1.224999999999994, + 1.224999999999995, + 1.224999999999996, + 1.224999999999997, + 1.224999999999998, + 1.224999999999999, + 1.225, + 1.225000000000001, + 1.225000000000002, + 1.225000000000003, + 1.225000000000004, + 1.225000000000005, + 1.225000000000006, + 1.225000000000007, + 1.225000000000008, + 1.225000000000009, + 1.225000000000010, + 1.225000000000011, + 1.225000000000012, + 1.225000000000013, + 1.225000000000014, + 1.225000000000015, + 1.225000000000016, + 1.225000000000017, + 1.225000000000018, + 1.225000000000019, + // Tricky rounding cases around tie values + 1009136.7050000005, + 2518463.465, + 2532438.825000001, + 3650458.5349999997, + 3147349.615, + 5411339.755, + 8583721.225, + 13475057.825, + 33588441.975, + 99979794.085, + 99937431.585, + 99386719.085, + 33853025.465, + 34046426.605, + 34312800.865, + 34387564.754999997, + 34460537.874999996, + 34579175.125, + 34653939.014999997, + 34847340.154999997, + 34920313.274999997, + 35038950.525, + 35113714.414999997, + 35186687.534999996, + 35305324.785, + 35380088.674999997, + 35453061.794999996, + 35571699.045, + 35573489.814999998, + 35646462.934999997, + 35839864.074999997, + 35912837.194999997, + 36031474.445, + 36106238.334999997, + 36179211.454999996, + 36297848.705, + 36372612.594999997, + 36564222.965, + 36566013.734999998, + 36638986.854999997, + 36757624.105, + 36832387.994999997, + 36905361.114999996, + 37023998.365, + 37098762.254999997, + 37171735.374999996, + 37290372.625, + 37365136.514999997, + 37558537.654999997, + 37631510.774999997, + 37750148.025, + 37824911.914999997, + 37897885.034999996, + 38016522.285, + 38091286.174999997, + 38164259.294999996, + 38282896.545, + 38284687.314999998, + 38357660.434999997, + 38551061.574999997, + 38624034.694999997, + 38742671.945, + 38817435.834999997, + 38890408.954999996, + 39009046.205, + 39083810.094999997, + 39275420.465, + 39277211.234999998, + 39350184.354999997, + 39468821.605, + 39543585.494999997, + 39616558.614999996, + 39735195.865, + 39809959.754999997, + 39882932.874999996, + 40001570.125, + 40076334.014999997, + 40269735.154999997, + 40342708.274999997, + 40461345.525, + 40536109.414999997, + 40609082.534999996, + 40727719.785, + 40802483.674999997, + 40875456.794999996, + 40994094.045, + 40995884.814999998, + 41068857.934999997, + 41262259.074999997, + 41335232.194999997, + 41453869.445, + 41528633.334999997, + 41601606.454999996, + 41720243.705, + 41795007.594999997, + 41986617.965, + 42034072.865, + 42107045.985, + 42134354.975 + }; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/text/Format/DecimalFormat/GoldenFormattedValues.java Thu Oct 11 16:59:50 2012 -0700 @@ -0,0 +1,868 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* This is a machine generated file - Please DO NOT EDIT ! + * Change RoundingAndPropertyTest instead, + * and run with "-gengold" argument to regenerate (without copyright header). + */ + +/* This file contains the set of result Strings expected from calling inside + * RoundingAndPropertyTest the method NumberFormat.format() upon the set of + * double values provided in GoldenDoubleValues.java. It contains three arrays, + * each containing arrays of unicode values representing the expected string + * result when calling format() on the corresponding (i.e. same index) double + * value found in GoldenDoubleValues arrays : + * - DecimalDigitsLocalizedFormattedValues corresponds to DecimalLocalizationValues, + * when using FullLocalizationTestLocale to format. + * - DecimalGoldenFormattedValues corresponds to DecimalGoldenValues, when used + * in the decimal pattern case together with TestLocale. + * - CurrencyGoldenFormattedValues corresponds to CurrencyGoldenValues. when used + * in the currency pattern case together with TestLocale. + * Please see documentation in RoundingAndPropertyTest.java for more details. + * + * This file generated by running RoundingAndPropertyTest with "-gengold" argument. + */ + +class GoldenFormattedValues { + + // The formatted values below were generated from golden values + // listed in GoldenDoubleValues.java, using the following jvm version : + // Oracle Corporation Java HotSpot(TM) Server VM 1.8.0-ea + // locale for golden double values : en_US + // locale for testing digit localization : hi_IN + + // The array of int[] unicode values storing the expected results + // when experiencing full localization of digits on DecimalLocalizationValues. + static int[][] DecimalDigitsLocalizedFormattedValues = { + { 2407, 46, 2407, 2408, 2409 }, + { 2407, 2408, 46, 2407, 2408, 2409 }, + { 2407, 2408, 2409, 46, 2407, 2408, 2409 }, + { 2407, 44, 2408, 2409, 2410, 46, 2407, 2408, 2409 }, + { 2407, 2408, 44, 2409, 2410, 2411, 46, 2407, 2408, 2409 }, + { 2407, 2408, 2409, 44, 2410, 2411, 2412, 46, 2407, 2408, 2409 }, + { 2407, 44, 2408, 2409, 2410, 44, 2411, 2412, 2413, 46, 2407, 2408, 2409 }, + { 2407, 2408, 44, 2409, 2410, 2411, 44, 2412, 2413, 2414, 46, 2407, 2408, 2409 }, + { 2407, 2408, 2409, 44, 2410, 2411, 2412, 44, 2413, 2414, 2415, 46, 2407, 2408, 2409 }, + { 2407, 44, 2408, 2409, 2410, 44, 2411, 2412, 2413, 44, 2414, 2415, 2406, 46, 2407, 2408, 2409 }, + { 2407, 44, 2408, 2409, 2410 }, + { 2407, 44, 2408, 2409, 2410, 46, 2415 }, + { 2407, 44, 2408, 2409, 2410, 46, 2415, 2415 }, + { 2407, 44, 2408, 2409, 2410, 46, 2415, 2415, 2415 }, + }; + + // The array of int[] unicode values storing the expected results + // when calling Decimal.format(double) on the decimal GoldenDoubleValues. + static int[][] DecimalGoldenFormattedValues = { + { 48 }, + { 45, 48 }, + { 48 }, + { 48 }, + { 45, 50, 44, 49, 52, 55, 44, 52, 56, 51, 44, 54, 52, 54, 46, 50, 51, 51 }, + { 50, 44, 49, 52, 55, 44, 52, 56, 51, 44, 54, 52, 54, 46, 50, 51, 52 }, + { 45, 50, 44, 49, 52, 55, 44, 52, 56, 51, 44, 54, 52, 56 }, + { 50, 44, 49, 52, 55, 44, 52, 56, 51, 44, 54, 52, 56 }, + { 45, 49, 44, 57, 57, 57, 44, 57, 57, 57, 44, 57, 57, 57, 46, 57, 57, 57 }, + { 50, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48 }, + { 65533 }, + { 8734 }, + { 45, 8734 }, + { 49, 55, 57, 44, 55, 54, 57, 44, 51, 49, 51, 44, 52, 56, 54, 44, 50, 51, 49, 44, 53, 55, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48 }, + { 45, 57, 44, 56, 55, 54, 44, 53, 52, 51, 44, 50, 49, 48, 46, 57, 56, 56 }, + { 57, 44, 56, 55, 54, 44, 53, 52, 51, 44, 50, 49, 48, 46, 57, 56, 56 }, + { 45, 49, 50, 51, 44, 52, 53, 54, 44, 55, 56, 57, 44, 48, 49, 50, 44, 51, 52, 53, 44, 54, 55, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48 }, + { 49, 50, 51, 44, 52, 53, 54, 44, 55, 56, 57, 44, 48, 49, 50, 44, 51, 52, 53, 44, 54, 55, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48 }, + { 49, 46, 49, 50, 51 }, + { 49, 50, 46, 49, 50, 51 }, + { 49, 50, 51, 46, 49, 50, 51 }, + { 49, 44, 50, 51, 52, 46, 49, 50, 51 }, + { 49, 50, 44, 51, 52, 53, 46, 49, 50, 51 }, + { 49, 50, 51, 44, 52, 53, 54, 46, 49, 50, 51 }, + { 49, 44, 50, 51, 52, 44, 53, 54, 55, 46, 49, 50, 51 }, + { 49, 50, 44, 51, 52, 53, 44, 54, 55, 56, 46, 49, 50, 51 }, + { 49, 50, 51, 44, 52, 53, 54, 44, 55, 56, 57, 46, 49, 50, 51 }, + { 49, 44, 50, 51, 52, 44, 53, 54, 55, 44, 56, 57, 48, 46, 49, 50, 51 }, + { 45, 49, 46, 49, 50, 51 }, + { 45, 49, 50, 46, 49, 50, 51 }, + { 45, 49, 50, 51, 46, 49, 50, 51 }, + { 45, 49, 44, 50, 51, 52, 46, 49, 50, 51 }, + { 45, 49, 50, 44, 51, 52, 53, 46, 49, 50, 51 }, + { 45, 49, 50, 51, 44, 52, 53, 54, 46, 49, 50, 51 }, + { 45, 49, 44, 50, 51, 52, 44, 53, 54, 55, 46, 49, 50, 51 }, + { 45, 49, 50, 44, 51, 52, 53, 44, 54, 55, 56, 46, 49, 50, 51 }, + { 45, 49, 50, 51, 44, 52, 53, 54, 44, 55, 56, 57, 46, 49, 50, 51 }, + { 45, 49, 44, 50, 51, 52, 44, 53, 54, 55, 44, 56, 57, 48, 46, 49, 50, 51 }, + { 48, 46, 49 }, + { 48, 46, 49, 50 }, + { 48, 46, 49, 50, 51 }, + { 48, 46, 49, 50, 51 }, + { 49, 48, 46, 49 }, + { 49, 48, 46, 49, 50 }, + { 49, 48, 46, 49, 50, 51 }, + { 49, 48, 46, 49, 50, 51 }, + { 49, 48, 48, 46, 49 }, + { 49, 48, 48, 46, 49, 50 }, + { 49, 48, 48, 46, 49, 50, 51 }, + { 49, 48, 48, 46, 49, 50, 51 }, + { 49, 44, 48, 48, 48, 46, 49 }, + { 49, 44, 48, 48, 48, 46, 49, 50 }, + { 49, 44, 48, 48, 48, 46, 49, 50, 51 }, + { 49, 44, 48, 48, 48, 46, 49, 50, 51 }, + { 49, 48, 44, 48, 48, 48, 46, 49 }, + { 49, 48, 44, 48, 48, 48, 46, 49, 50 }, + { 49, 48, 44, 48, 48, 48, 46, 49, 50, 51 }, + { 49, 48, 44, 48, 48, 48, 46, 49, 50, 51 }, + { 49, 48, 48, 44, 48, 48, 48, 46, 49 }, + { 49, 48, 48, 44, 48, 48, 48, 46, 49, 50 }, + { 49, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 }, + { 49, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 }, + { 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49 }, + { 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50 }, + { 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 }, + { 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 }, + { 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49 }, + { 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50 }, + { 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 }, + { 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 }, + { 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49 }, + { 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50 }, + { 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 }, + { 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 }, + { 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49 }, + { 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50 }, + { 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 }, + { 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 }, + { 45, 48, 46, 49 }, + { 45, 48, 46, 49, 50 }, + { 45, 48, 46, 49, 50, 51 }, + { 45, 48, 46, 49, 50, 51 }, + { 45, 49, 48, 46, 49 }, + { 45, 49, 48, 46, 49, 50 }, + { 45, 49, 48, 46, 49, 50, 51 }, + { 45, 49, 48, 46, 49, 50, 51 }, + { 45, 49, 48, 48, 46, 49 }, + { 45, 49, 48, 48, 46, 49, 50 }, + { 45, 49, 48, 48, 46, 49, 50, 51 }, + { 45, 49, 48, 48, 46, 49, 50, 51 }, + { 45, 49, 44, 48, 48, 48, 46, 49 }, + { 45, 49, 44, 48, 48, 48, 46, 49, 50 }, + { 45, 49, 44, 48, 48, 48, 46, 49, 50, 51 }, + { 45, 49, 44, 48, 48, 48, 46, 49, 50, 51 }, + { 45, 49, 48, 44, 48, 48, 48, 46, 49 }, + { 45, 49, 48, 44, 48, 48, 48, 46, 49, 50 }, + { 45, 49, 48, 44, 48, 48, 48, 46, 49, 50, 51 }, + { 45, 49, 48, 44, 48, 48, 48, 46, 49, 50, 51 }, + { 45, 49, 48, 48, 44, 48, 48, 48, 46, 49 }, + { 45, 49, 48, 48, 44, 48, 48, 48, 46, 49, 50 }, + { 45, 49, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 }, + { 45, 49, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 }, + { 45, 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49 }, + { 45, 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50 }, + { 45, 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 }, + { 45, 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 }, + { 45, 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49 }, + { 45, 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50 }, + { 45, 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 }, + { 45, 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 }, + { 45, 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49 }, + { 45, 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50 }, + { 45, 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 }, + { 45, 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 }, + { 45, 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49 }, + { 45, 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50 }, + { 45, 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 }, + { 45, 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 }, + { 49, 46, 57, 57, 57 }, + { 49, 50, 46, 57, 57, 57 }, + { 49, 50, 51, 46, 57, 57, 57 }, + { 49, 44, 50, 51, 52, 46, 57, 57, 57 }, + { 49, 50, 44, 51, 52, 53, 46, 57, 57, 57 }, + { 49, 50, 51, 44, 52, 53, 54, 46, 57, 57, 57 }, + { 49, 44, 50, 51, 52, 44, 53, 54, 55, 46, 57, 57, 57 }, + { 49, 50, 44, 51, 52, 53, 44, 54, 55, 56, 46, 57, 57, 57 }, + { 49, 50, 51, 44, 52, 53, 54, 44, 55, 56, 57, 46, 57, 57, 57 }, + { 49, 44, 50, 51, 52, 44, 53, 54, 55, 44, 56, 57, 48, 46, 57, 57, 57 }, + { 50 }, + { 49, 51 }, + { 49, 50, 52 }, + { 49, 44, 50, 51, 53 }, + { 49, 50, 44, 51, 52, 54 }, + { 49, 50, 51, 44, 52, 53, 55 }, + { 49, 44, 50, 51, 52, 44, 53, 54, 56 }, + { 49, 50, 44, 51, 52, 53, 44, 54, 55, 57 }, + { 49, 50, 51, 44, 52, 53, 54, 44, 55, 57, 48 }, + { 49, 44, 50, 51, 52, 44, 53, 54, 55, 44, 56, 57, 49 }, + { 45, 49, 46, 57, 57, 57 }, + { 45, 49, 50, 46, 57, 57, 57 }, + { 45, 49, 50, 51, 46, 57, 57, 57 }, + { 45, 49, 44, 50, 51, 52, 46, 57, 57, 57 }, + { 45, 49, 50, 44, 51, 52, 53, 46, 57, 57, 57 }, + { 45, 49, 50, 51, 44, 52, 53, 54, 46, 57, 57, 57 }, + { 45, 49, 44, 50, 51, 52, 44, 53, 54, 55, 46, 57, 57, 57 }, + { 45, 49, 50, 44, 51, 52, 53, 44, 54, 55, 56, 46, 57, 57, 57 }, + { 45, 49, 50, 51, 44, 52, 53, 54, 44, 55, 56, 57, 46, 57, 57, 57 }, + { 45, 49, 44, 50, 51, 52, 44, 53, 54, 55, 44, 56, 57, 48, 46, 57, 57, 57 }, + { 45, 50 }, + { 45, 49, 51 }, + { 45, 49, 50, 52 }, + { 45, 49, 44, 50, 51, 53 }, + { 45, 49, 50, 44, 51, 52, 54 }, + { 45, 49, 50, 51, 44, 52, 53, 55 }, + { 45, 49, 44, 50, 51, 52, 44, 53, 54, 56 }, + { 45, 49, 50, 44, 51, 52, 53, 44, 54, 55, 57 }, + { 45, 49, 50, 51, 44, 52, 53, 54, 44, 55, 57, 48 }, + { 45, 49, 44, 50, 51, 52, 44, 53, 54, 55, 44, 56, 57, 49 }, + { 49, 49, 48 }, + { 49, 44, 49, 48, 48 }, + { 49, 49, 44, 48, 48, 48 }, + { 49, 49, 48, 44, 48, 48, 48 }, + { 49, 44, 49, 48, 48, 44, 48, 48, 48 }, + { 49, 49, 44, 48, 48, 48, 44, 48, 48, 48 }, + { 49, 49, 48, 44, 48, 48, 48, 44, 48, 48, 48 }, + { 49, 44, 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48 }, + { 45, 49, 49, 48 }, + { 45, 49, 44, 49, 48, 48 }, + { 45, 49, 49, 44, 48, 48, 48 }, + { 45, 49, 49, 48, 44, 48, 48, 48 }, + { 45, 49, 44, 49, 48, 48, 44, 48, 48, 48 }, + { 45, 49, 49, 44, 48, 48, 48, 44, 48, 48, 48 }, + { 45, 49, 49, 48, 44, 48, 48, 48, 44, 48, 48, 48 }, + { 45, 49, 44, 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48 }, + { 50 }, + { 50, 48 }, + { 50, 48, 48 }, + { 50, 44, 48, 48, 48 }, + { 50, 48, 44, 48, 48, 48 }, + { 50, 48, 48, 44, 48, 48, 48 }, + { 50, 44, 48, 48, 48, 44, 48, 48, 48 }, + { 50, 48, 44, 48, 48, 48, 44, 48, 48, 48 }, + { 50, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48 }, + { 50, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48 }, + { 45, 50 }, + { 45, 50, 48 }, + { 45, 50, 48, 48 }, + { 45, 50, 44, 48, 48, 48 }, + { 45, 50, 48, 44, 48, 48, 48 }, + { 45, 50, 48, 48, 44, 48, 48, 48 }, + { 45, 50, 44, 48, 48, 48, 44, 48, 48, 48 }, + { 45, 50, 48, 44, 48, 48, 48, 44, 48, 48, 48 }, + { 45, 50, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48 }, + { 45, 50, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48 }, + { 49, 48 }, + { 49, 48, 48 }, + { 49, 44, 48, 48, 48 }, + { 49, 48, 44, 48, 48, 48 }, + { 49, 48, 48, 44, 48, 48, 48 }, + { 49, 44, 48, 48, 48, 44, 48, 48, 48 }, + { 49, 48, 44, 48, 48, 48, 44, 48, 48, 48 }, + { 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48 }, + { 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48 }, + { 57, 46, 57, 57, 57 }, + { 57, 57, 46, 57, 57, 57 }, + { 57, 57, 57, 46, 57, 57, 57 }, + { 57, 44, 57, 57, 57, 46, 57, 57, 57 }, + { 57, 57, 44, 57, 57, 57, 46, 57, 57, 57 }, + { 57, 57, 57, 44, 57, 57, 57, 46, 57, 57, 57 }, + { 57, 44, 57, 57, 57, 44, 57, 57, 57, 46, 57, 57, 57 }, + { 57, 57, 44, 57, 57, 57, 44, 57, 57, 57, 46, 57, 57, 57 }, + { 57, 57, 57, 44, 57, 57, 57, 44, 57, 57, 57, 46, 57, 57, 57 }, + { 45, 49, 48 }, + { 45, 49, 48, 48 }, + { 45, 49, 44, 48, 48, 48 }, + { 45, 49, 48, 44, 48, 48, 48 }, + { 45, 49, 48, 48, 44, 48, 48, 48 }, + { 45, 49, 44, 48, 48, 48, 44, 48, 48, 48 }, + { 45, 49, 48, 44, 48, 48, 48, 44, 48, 48, 48 }, + { 45, 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48 }, + { 45, 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48 }, + { 45, 57, 46, 57, 57, 57 }, + { 45, 57, 57, 46, 57, 57, 57 }, + { 45, 57, 57, 57, 46, 57, 57, 57 }, + { 45, 57, 44, 57, 57, 57, 46, 57, 57, 57 }, + { 45, 57, 57, 44, 57, 57, 57, 46, 57, 57, 57 }, + { 45, 57, 57, 57, 44, 57, 57, 57, 46, 57, 57, 57 }, + { 45, 57, 44, 57, 57, 57, 44, 57, 57, 57, 46, 57, 57, 57 }, + { 45, 57, 57, 44, 57, 57, 57, 44, 57, 57, 57, 46, 57, 57, 57 }, + { 45, 57, 57, 57, 44, 57, 57, 57, 44, 57, 57, 57, 46, 57, 57, 57 }, + { 49 }, + { 49, 50 }, + { 49, 50, 51 }, + { 49, 44, 50, 51, 52 }, + { 49, 50, 44, 51, 52, 53 }, + { 49, 50, 51, 44, 52, 53, 54 }, + { 49, 44, 50, 51, 52, 44, 53, 54, 55 }, + { 49, 50, 44, 51, 52, 53, 44, 54, 55, 56 }, + { 49, 50, 51, 44, 52, 53, 54, 44, 55, 56, 57 }, + { 49, 44, 50, 51, 52, 44, 53, 54, 55, 44, 56, 57, 48 }, + { 45, 49 }, + { 45, 49, 50 }, + { 45, 49, 50, 51 }, + { 45, 49, 44, 50, 51, 52 }, + { 45, 49, 50, 44, 51, 52, 53 }, + { 45, 49, 50, 51, 44, 52, 53, 54 }, + { 45, 49, 44, 50, 51, 52, 44, 53, 54, 55 }, + { 45, 49, 50, 44, 51, 52, 53, 44, 54, 55, 56 }, + { 45, 49, 50, 51, 44, 52, 53, 54, 44, 55, 56, 57 }, + { 45, 49, 44, 50, 51, 52, 44, 53, 54, 55, 44, 56, 57, 48 }, + { 45, 50, 44, 53, 57, 57, 46, 52 }, + { 45, 50, 44, 53, 57, 57, 46, 51, 52 }, + { 45, 50, 44, 53, 57, 57, 46, 51, 51, 52 }, + { 49 }, + { 49 }, + { 49 }, + { 49 }, + { 49 }, + { 49, 46, 48, 48, 49 }, + { 49, 46, 48, 48, 49 }, + { 49, 46, 48, 48, 49 }, + { 49, 46, 48, 48, 49 }, + { 49, 46, 48, 48, 49 }, + { 49, 46, 50, 50, 50 }, + { 49, 46, 50, 50, 50 }, + { 49, 46, 50, 50, 50 }, + { 49, 46, 50, 50, 50 }, + { 49, 46, 50, 50, 50 }, + { 49, 46, 50, 50, 50 }, + { 49, 46, 50, 50, 50 }, + { 49, 46, 50, 50, 50 }, + { 49, 46, 50, 50, 50 }, + { 49, 46, 50, 50, 50 }, + { 49, 46, 50, 50, 50 }, + { 49, 46, 50, 50, 50 }, + { 49, 46, 50, 50, 50 }, + { 49, 46, 50, 50, 50 }, + { 49, 46, 50, 50, 50 }, + { 49, 46, 50, 50, 50 }, + { 49, 46, 50, 50, 50 }, + { 49, 46, 50, 50, 50 }, + { 49, 46, 50, 50, 50 }, + { 49, 46, 50, 50, 50 }, + { 49, 46, 50, 50, 51 }, + { 49, 46, 50, 50, 51 }, + { 49, 46, 50, 50, 51 }, + { 49, 46, 50, 50, 51 }, + { 49, 46, 50, 50, 51 }, + { 49, 46, 50, 50, 51 }, + { 49, 46, 50, 50, 51 }, + { 49, 46, 50, 50, 51 }, + { 49, 46, 50, 50, 51 }, + { 49, 46, 50, 50, 51 }, + { 49, 46, 50, 50, 51 }, + { 49, 46, 50, 50, 51 }, + { 49, 46, 50, 50, 51 }, + { 49, 46, 50, 50, 51 }, + { 49, 46, 50, 50, 51 }, + { 49, 46, 50, 50, 51 }, + { 49, 46, 50, 50, 51 }, + { 49, 46, 50, 50, 51 }, + { 49, 46, 50, 50, 51 }, + { 49, 48, 48, 44, 57, 49, 51, 46, 54, 55, 49 }, + { 49, 57, 57, 44, 57, 57, 57, 46, 57, 57, 57 }, + { 50, 53, 49, 44, 56, 52, 54, 46, 51, 52, 55 }, + { 50, 53, 51, 44, 50, 52, 51, 46, 56, 56, 51 }, + { 51, 54, 53, 44, 48, 52, 53, 46, 56, 53, 51 }, + { 51, 49, 52, 44, 55, 51, 52, 46, 57, 54, 49 }, + { 53, 52, 49, 44, 49, 51, 51, 46, 57, 55, 53 }, + { 56, 53, 56, 44, 51, 55, 50, 46, 49, 50, 51 }, + { 49, 44, 48, 48, 49, 44, 48, 48, 48 }, + { 49, 44, 51, 52, 55, 44, 53, 48, 53, 46, 55, 56, 50 }, + { 51, 44, 51, 53, 56, 44, 56, 52, 52, 46, 49, 57, 55 }, + { 57, 44, 57, 57, 55, 44, 57, 55, 57, 46, 52, 48, 57 }, + { 57, 44, 57, 57, 51, 44, 55, 52, 51, 46, 49, 53, 57 }, + { 57, 44, 57, 51, 56, 44, 54, 55, 49, 46, 57, 48, 57 }, + { 51, 44, 51, 56, 53, 44, 51, 48, 50, 46, 53, 52, 55 }, + { 51, 44, 52, 48, 52, 44, 54, 52, 50, 46, 54, 54, 49 }, + { 51, 44, 52, 51, 49, 44, 50, 56, 48, 46, 48, 56, 55 }, + { 51, 44, 52, 51, 56, 44, 55, 53, 54, 46, 52, 55, 53 }, + { 51, 44, 52, 52, 54, 44, 48, 53, 51, 46, 55, 56, 55 }, + { 51, 44, 52, 53, 55, 44, 57, 49, 55, 46, 53, 49, 51 }, + { 51, 44, 52, 54, 53, 44, 51, 57, 51, 46, 57, 48, 49 }, + { 51, 44, 52, 56, 52, 44, 55, 51, 52, 46, 48, 49, 53 }, + { 51, 44, 52, 57, 50, 44, 48, 51, 49, 46, 51, 50, 55 }, + { 51, 44, 53, 48, 51, 44, 56, 57, 53, 46, 48, 53, 51 }, + { 51, 44, 53, 49, 49, 44, 51, 55, 49, 46, 52, 52, 49 }, + { 51, 44, 53, 49, 56, 44, 54, 54, 56, 46, 55, 53, 51 }, + { 51, 44, 53, 51, 48, 44, 53, 51, 50, 46, 52, 55, 57 }, + { 51, 44, 53, 51, 56, 44, 48, 48, 56, 46, 56, 54, 55 }, + { 51, 44, 53, 52, 53, 44, 51, 48, 54, 46, 49, 55, 57 }, + { 51, 44, 53, 53, 55, 44, 49, 54, 57, 46, 57, 48, 53 }, + { 51, 44, 53, 53, 55, 44, 51, 52, 56, 46, 57, 56, 49 }, + { 51, 44, 53, 54, 52, 44, 54, 52, 54, 46, 50, 57, 51 }, + { 51, 44, 53, 56, 51, 44, 57, 56, 54, 46, 52, 48, 55 }, + { 51, 44, 53, 57, 49, 44, 50, 56, 51, 46, 55, 49, 57 }, + { 51, 44, 54, 48, 51, 44, 49, 52, 55, 46, 52, 52, 53 }, + { 51, 44, 54, 49, 48, 44, 54, 50, 51, 46, 56, 51, 51 }, + { 51, 44, 54, 49, 55, 44, 57, 50, 49, 46, 49, 52, 53 }, + { 51, 44, 54, 50, 57, 44, 55, 56, 52, 46, 56, 55, 49 }, + { 51, 44, 54, 51, 55, 44, 50, 54, 49, 46, 50, 53, 57 }, + { 51, 44, 54, 53, 54, 44, 52, 50, 50, 46, 50, 57, 55 }, + { 51, 44, 54, 53, 54, 44, 54, 48, 49, 46, 51, 55, 51 }, + { 51, 44, 54, 54, 51, 44, 56, 57, 56, 46, 54, 56, 53 }, + { 51, 44, 54, 55, 53, 44, 55, 54, 50, 46, 52, 49, 49 }, + { 51, 44, 54, 56, 51, 44, 50, 51, 56, 46, 55, 57, 57 }, + { 51, 44, 54, 57, 48, 44, 53, 51, 54, 46, 49, 49, 49 }, + { 51, 44, 55, 48, 50, 44, 51, 57, 57, 46, 56, 51, 55 }, + { 51, 44, 55, 48, 57, 44, 56, 55, 54, 46, 50, 50, 53 }, + { 51, 44, 55, 49, 55, 44, 49, 55, 51, 46, 53, 51, 55 }, + { 51, 44, 55, 50, 57, 44, 48, 51, 55, 46, 50, 54, 51 }, + { 51, 44, 55, 51, 54, 44, 53, 49, 51, 46, 54, 53, 49 }, + { 51, 44, 55, 53, 53, 44, 56, 53, 51, 46, 55, 54, 53 }, + { 51, 44, 55, 54, 51, 44, 49, 53, 49, 46, 48, 55, 55 }, + { 51, 44, 55, 55, 53, 44, 48, 49, 52, 46, 56, 48, 51 }, + { 51, 44, 55, 56, 50, 44, 52, 57, 49, 46, 49, 57, 49 }, + { 51, 44, 55, 56, 57, 44, 55, 56, 56, 46, 53, 48, 51 }, + { 51, 44, 56, 48, 49, 44, 54, 53, 50, 46, 50, 50, 57 }, + { 51, 44, 56, 48, 57, 44, 49, 50, 56, 46, 54, 49, 55 }, + { 51, 44, 56, 49, 54, 44, 52, 50, 53, 46, 57, 50, 57 }, + { 51, 44, 56, 50, 56, 44, 50, 56, 57, 46, 54, 53, 53 }, + { 51, 44, 56, 50, 56, 44, 52, 54, 56, 46, 55, 51, 49 }, + { 51, 44, 56, 51, 53, 44, 55, 54, 54, 46, 48, 52, 51 }, + { 51, 44, 56, 53, 53, 44, 49, 48, 54, 46, 49, 53, 55 }, + { 51, 44, 56, 54, 50, 44, 52, 48, 51, 46, 52, 54, 57 }, + { 51, 44, 56, 55, 52, 44, 50, 54, 55, 46, 49, 57, 53 }, + { 51, 44, 56, 56, 49, 44, 55, 52, 51, 46, 53, 56, 51 }, + { 51, 44, 56, 56, 57, 44, 48, 52, 48, 46, 56, 57, 53 }, + { 51, 44, 57, 48, 48, 44, 57, 48, 52, 46, 54, 50, 49 }, + { 51, 44, 57, 48, 56, 44, 51, 56, 49, 46, 48, 48, 57 }, + { 51, 44, 57, 50, 55, 44, 53, 52, 50, 46, 48, 52, 55 }, + { 51, 44, 57, 50, 55, 44, 55, 50, 49, 46, 49, 50, 51 }, + { 51, 44, 57, 51, 53, 44, 48, 49, 56, 46, 52, 51, 53 }, + { 51, 44, 57, 52, 54, 44, 56, 56, 50, 46, 49, 54, 49 }, + { 51, 44, 57, 53, 52, 44, 51, 53, 56, 46, 53, 52, 57 }, + { 51, 44, 57, 54, 49, 44, 54, 53, 53, 46, 56, 54, 49 }, + { 51, 44, 57, 55, 51, 44, 53, 49, 57, 46, 53, 56, 55 }, + { 51, 44, 57, 56, 48, 44, 57, 57, 53, 46, 57, 55, 53 }, + { 51, 44, 57, 56, 56, 44, 50, 57, 51, 46, 50, 56, 55 }, + { 52, 44, 48, 48, 48, 44, 49, 53, 55, 46, 48, 49, 51 }, + { 52, 44, 48, 48, 55, 44, 54, 51, 51, 46, 52, 48, 49 }, + { 52, 44, 48, 50, 54, 44, 57, 55, 51, 46, 53, 49, 53 }, + { 52, 44, 48, 51, 52, 44, 50, 55, 48, 46, 56, 50, 55 }, + { 52, 44, 48, 52, 54, 44, 49, 51, 52, 46, 53, 53, 51 }, + { 52, 44, 48, 53, 51, 44, 54, 49, 48, 46, 57, 52, 49 }, + { 52, 44, 48, 54, 48, 44, 57, 48, 56, 46, 50, 53, 51 }, + { 52, 44, 48, 55, 50, 44, 55, 55, 49, 46, 57, 55, 57 }, + { 52, 44, 48, 56, 48, 44, 50, 52, 56, 46, 51, 54, 55 }, + { 52, 44, 48, 56, 55, 44, 53, 52, 53, 46, 54, 55, 57 }, + { 52, 44, 48, 57, 57, 44, 52, 48, 57, 46, 52, 48, 53 }, + { 52, 44, 48, 57, 57, 44, 53, 56, 56, 46, 52, 56, 49 }, + { 52, 44, 49, 48, 54, 44, 56, 56, 53, 46, 55, 57, 51 }, + { 52, 44, 49, 50, 54, 44, 50, 50, 53, 46, 57, 48, 55 }, + { 52, 44, 49, 51, 51, 44, 53, 50, 51, 46, 50, 49, 57 }, + { 52, 44, 49, 52, 53, 44, 51, 56, 54, 46, 57, 52, 53 }, + { 52, 44, 49, 53, 50, 44, 56, 54, 51, 46, 51, 51, 51 }, + { 52, 44, 49, 54, 48, 44, 49, 54, 48, 46, 54, 52, 53 }, + { 52, 44, 49, 55, 50, 44, 48, 50, 52, 46, 51, 55, 49 }, + { 52, 44, 49, 55, 57, 44, 53, 48, 48, 46, 55, 53, 57 }, + { 52, 44, 49, 57, 56, 44, 54, 54, 49, 46, 55, 57, 55 }, + { 52, 44, 50, 48, 51, 44, 52, 48, 55, 46, 50, 56, 55 }, + { 52, 44, 50, 49, 48, 44, 55, 48, 52, 46, 53, 57, 57 }, + { 52, 44, 50, 49, 51, 44, 52, 51, 53, 46, 52, 57, 55 }, + }; + + // The array of int[] unicode values storing the expected results + // when calling Decimal.format(double) on the currency GoldenDoubleValues. + static int[][] CurrencyGoldenFormattedValues = { + { 36, 48, 46, 48, 48 }, + { 40, 36, 48, 46, 48, 48, 41 }, + { 36, 48, 46, 48, 48 }, + { 36, 48, 46, 48, 48 }, + { 40, 36, 50, 44, 49, 52, 55, 44, 52, 56, 51, 44, 54, 52, 54, 46, 50, 51, 41 }, + { 36, 50, 44, 49, 52, 55, 44, 52, 56, 51, 44, 54, 52, 54, 46, 50, 51 }, + { 40, 36, 50, 44, 49, 52, 55, 44, 52, 56, 51, 44, 54, 52, 56, 46, 48, 48, 41 }, + { 36, 50, 44, 49, 52, 55, 44, 52, 56, 51, 44, 54, 52, 56, 46, 48, 48 }, + { 40, 36, 49, 44, 57, 57, 57, 44, 57, 57, 57, 44, 57, 57, 57, 46, 57, 57, 41 }, + { 36, 50, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48 }, + { 65533 }, + { 36, 8734 }, + { 40, 36, 8734, 41 }, + { 36, 49, 55, 57, 44, 55, 54, 57, 44, 51, 49, 51, 44, 52, 56, 54, 44, 50, 51, 49, 44, 53, 55, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48 }, + { 40, 36, 57, 44, 56, 55, 54, 44, 53, 52, 51, 44, 50, 49, 48, 46, 57, 57, 41 }, + { 36, 57, 44, 56, 55, 54, 44, 53, 52, 51, 44, 50, 49, 48, 46, 57, 57 }, + { 40, 36, 49, 50, 51, 44, 52, 53, 54, 44, 55, 56, 57, 44, 48, 49, 50, 44, 51, 52, 53, 44, 54, 55, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48, 41 }, + { 36, 49, 50, 51, 44, 52, 53, 54, 44, 55, 56, 57, 44, 48, 49, 50, 44, 51, 52, 53, 44, 54, 55, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48 }, + { 36, 49, 46, 49, 50 }, + { 36, 49, 50, 46, 49, 50 }, + { 36, 49, 50, 51, 46, 49, 50 }, + { 36, 49, 44, 50, 51, 52, 46, 49, 50 }, + { 36, 49, 50, 44, 51, 52, 53, 46, 49, 50 }, + { 36, 49, 50, 51, 44, 52, 53, 54, 46, 49, 50 }, + { 36, 49, 44, 50, 51, 52, 44, 53, 54, 55, 46, 49, 50 }, + { 36, 49, 50, 44, 51, 52, 53, 44, 54, 55, 56, 46, 49, 50 }, + { 36, 49, 50, 51, 44, 52, 53, 54, 44, 55, 56, 57, 46, 49, 50 }, + { 36, 49, 44, 50, 51, 52, 44, 53, 54, 55, 44, 56, 57, 48, 46, 49, 50 }, + { 40, 36, 49, 46, 49, 50, 41 }, + { 40, 36, 49, 50, 46, 49, 50, 41 }, + { 40, 36, 49, 50, 51, 46, 49, 50, 41 }, + { 40, 36, 49, 44, 50, 51, 52, 46, 49, 50, 41 }, + { 40, 36, 49, 50, 44, 51, 52, 53, 46, 49, 50, 41 }, + { 40, 36, 49, 50, 51, 44, 52, 53, 54, 46, 49, 50, 41 }, + { 40, 36, 49, 44, 50, 51, 52, 44, 53, 54, 55, 46, 49, 50, 41 }, + { 40, 36, 49, 50, 44, 51, 52, 53, 44, 54, 55, 56, 46, 49, 50, 41 }, + { 40, 36, 49, 50, 51, 44, 52, 53, 54, 44, 55, 56, 57, 46, 49, 50, 41 }, + { 40, 36, 49, 44, 50, 51, 52, 44, 53, 54, 55, 44, 56, 57, 48, 46, 49, 50, 41 }, + { 36, 48, 46, 49, 48 }, + { 36, 48, 46, 49, 50 }, + { 36, 48, 46, 49, 50 }, + { 36, 49, 48, 46, 49, 48 }, + { 36, 49, 48, 46, 49, 50 }, + { 36, 49, 48, 46, 49, 50 }, + { 36, 49, 48, 48, 46, 49, 48 }, + { 36, 49, 48, 48, 46, 49, 50 }, + { 36, 49, 48, 48, 46, 49, 50 }, + { 36, 49, 44, 48, 48, 48, 46, 49, 48 }, + { 36, 49, 44, 48, 48, 48, 46, 49, 50 }, + { 36, 49, 44, 48, 48, 48, 46, 49, 50 }, + { 36, 49, 48, 44, 48, 48, 48, 46, 49, 48 }, + { 36, 49, 48, 44, 48, 48, 48, 46, 49, 50 }, + { 36, 49, 48, 44, 48, 48, 48, 46, 49, 50 }, + { 36, 49, 48, 48, 44, 48, 48, 48, 46, 49, 48 }, + { 36, 49, 48, 48, 44, 48, 48, 48, 46, 49, 50 }, + { 36, 49, 48, 48, 44, 48, 48, 48, 46, 49, 50 }, + { 36, 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 48 }, + { 36, 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50 }, + { 36, 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50 }, + { 36, 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 48 }, + { 36, 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50 }, + { 36, 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50 }, + { 36, 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 48 }, + { 36, 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50 }, + { 36, 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50 }, + { 36, 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 48 }, + { 36, 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50 }, + { 36, 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50 }, + { 40, 36, 48, 46, 49, 48, 41 }, + { 40, 36, 48, 46, 49, 50, 41 }, + { 40, 36, 48, 46, 49, 50, 41 }, + { 40, 36, 49, 48, 46, 49, 48, 41 }, + { 40, 36, 49, 48, 46, 49, 50, 41 }, + { 40, 36, 49, 48, 46, 49, 50, 41 }, + { 40, 36, 49, 48, 48, 46, 49, 48, 41 }, + { 40, 36, 49, 48, 48, 46, 49, 50, 41 }, + { 40, 36, 49, 48, 48, 46, 49, 50, 41 }, + { 40, 36, 49, 44, 48, 48, 48, 46, 49, 48, 41 }, + { 40, 36, 49, 44, 48, 48, 48, 46, 49, 50, 41 }, + { 40, 36, 49, 44, 48, 48, 48, 46, 49, 50, 41 }, + { 40, 36, 49, 48, 44, 48, 48, 48, 46, 49, 48, 41 }, + { 40, 36, 49, 48, 44, 48, 48, 48, 46, 49, 50, 41 }, + { 40, 36, 49, 48, 44, 48, 48, 48, 46, 49, 50, 41 }, + { 40, 36, 49, 48, 48, 44, 48, 48, 48, 46, 49, 48, 41 }, + { 40, 36, 49, 48, 48, 44, 48, 48, 48, 46, 49, 50, 41 }, + { 40, 36, 49, 48, 48, 44, 48, 48, 48, 46, 49, 50, 41 }, + { 40, 36, 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 48, 41 }, + { 40, 36, 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 41 }, + { 40, 36, 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 41 }, + { 40, 36, 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 48, 41 }, + { 40, 36, 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 41 }, + { 40, 36, 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 41 }, + { 40, 36, 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 48, 41 }, + { 40, 36, 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 41 }, + { 40, 36, 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 41 }, + { 40, 36, 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 48, 41 }, + { 40, 36, 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 41 }, + { 40, 36, 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 41 }, + { 36, 49, 46, 57, 57 }, + { 36, 49, 50, 46, 57, 57 }, + { 36, 49, 50, 51, 46, 57, 57 }, + { 36, 49, 44, 50, 51, 52, 46, 57, 57 }, + { 36, 49, 50, 44, 51, 52, 53, 46, 57, 57 }, + { 36, 49, 50, 51, 44, 52, 53, 54, 46, 57, 57 }, + { 36, 49, 44, 50, 51, 52, 44, 53, 54, 55, 46, 57, 57 }, + { 36, 49, 50, 44, 51, 52, 53, 44, 54, 55, 56, 46, 57, 57 }, + { 36, 49, 50, 51, 44, 52, 53, 54, 44, 55, 56, 57, 46, 57, 57 }, + { 36, 49, 44, 50, 51, 52, 44, 53, 54, 55, 44, 56, 57, 48, 46, 57, 57 }, + { 36, 50, 46, 48, 48 }, + { 36, 49, 51, 46, 48, 48 }, + { 36, 49, 50, 52, 46, 48, 48 }, + { 36, 49, 44, 50, 51, 53, 46, 48, 48 }, + { 36, 49, 50, 44, 51, 52, 54, 46, 48, 48 }, + { 36, 49, 50, 51, 44, 52, 53, 55, 46, 48, 48 }, + { 36, 49, 44, 50, 51, 52, 44, 53, 54, 56, 46, 48, 48 }, + { 36, 49, 50, 44, 51, 52, 53, 44, 54, 55, 57, 46, 48, 48 }, + { 36, 49, 50, 51, 44, 52, 53, 54, 44, 55, 57, 48, 46, 48, 48 }, + { 36, 49, 44, 50, 51, 52, 44, 53, 54, 55, 44, 56, 57, 49, 46, 48, 48 }, + { 40, 36, 49, 46, 57, 57, 41 }, + { 40, 36, 49, 50, 46, 57, 57, 41 }, + { 40, 36, 49, 50, 51, 46, 57, 57, 41 }, + { 40, 36, 49, 44, 50, 51, 52, 46, 57, 57, 41 }, + { 40, 36, 49, 50, 44, 51, 52, 53, 46, 57, 57, 41 }, + { 40, 36, 49, 50, 51, 44, 52, 53, 54, 46, 57, 57, 41 }, + { 40, 36, 49, 44, 50, 51, 52, 44, 53, 54, 55, 46, 57, 57, 41 }, + { 40, 36, 49, 50, 44, 51, 52, 53, 44, 54, 55, 56, 46, 57, 57, 41 }, + { 40, 36, 49, 50, 51, 44, 52, 53, 54, 44, 55, 56, 57, 46, 57, 57, 41 }, + { 40, 36, 49, 44, 50, 51, 52, 44, 53, 54, 55, 44, 56, 57, 48, 46, 57, 57, 41 }, + { 40, 36, 50, 46, 48, 48, 41 }, + { 40, 36, 49, 51, 46, 48, 48, 41 }, + { 40, 36, 49, 50, 52, 46, 48, 48, 41 }, + { 40, 36, 49, 44, 50, 51, 53, 46, 48, 48, 41 }, + { 40, 36, 49, 50, 44, 51, 52, 54, 46, 48, 48, 41 }, + { 40, 36, 49, 50, 51, 44, 52, 53, 55, 46, 48, 48, 41 }, + { 40, 36, 49, 44, 50, 51, 52, 44, 53, 54, 56, 46, 48, 48, 41 }, + { 40, 36, 49, 50, 44, 51, 52, 53, 44, 54, 55, 57, 46, 48, 48, 41 }, + { 40, 36, 49, 50, 51, 44, 52, 53, 54, 44, 55, 57, 48, 46, 48, 48, 41 }, + { 40, 36, 49, 44, 50, 51, 52, 44, 53, 54, 55, 44, 56, 57, 49, 46, 48, 48, 41 }, + { 36, 49, 49, 48, 46, 48, 48 }, + { 36, 49, 44, 49, 48, 48, 46, 48, 48 }, + { 36, 49, 49, 44, 48, 48, 48, 46, 48, 48 }, + { 36, 49, 49, 48, 44, 48, 48, 48, 46, 48, 48 }, + { 36, 49, 44, 49, 48, 48, 44, 48, 48, 48, 46, 48, 48 }, + { 36, 49, 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48 }, + { 36, 49, 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48 }, + { 36, 49, 44, 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48 }, + { 40, 36, 49, 49, 48, 46, 48, 48, 41 }, + { 40, 36, 49, 44, 49, 48, 48, 46, 48, 48, 41 }, + { 40, 36, 49, 49, 44, 48, 48, 48, 46, 48, 48, 41 }, + { 40, 36, 49, 49, 48, 44, 48, 48, 48, 46, 48, 48, 41 }, + { 40, 36, 49, 44, 49, 48, 48, 44, 48, 48, 48, 46, 48, 48, 41 }, + { 40, 36, 49, 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48, 41 }, + { 40, 36, 49, 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48, 41 }, + { 40, 36, 49, 44, 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48, 41 }, + { 36, 50, 46, 48, 48 }, + { 36, 50, 48, 46, 48, 48 }, + { 36, 50, 48, 48, 46, 48, 48 }, + { 36, 50, 44, 48, 48, 48, 46, 48, 48 }, + { 36, 50, 48, 44, 48, 48, 48, 46, 48, 48 }, + { 36, 50, 48, 48, 44, 48, 48, 48, 46, 48, 48 }, + { 36, 50, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48 }, + { 36, 50, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48 }, + { 36, 50, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48 }, + { 36, 50, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48 }, + { 40, 36, 50, 46, 48, 48, 41 }, + { 40, 36, 50, 48, 46, 48, 48, 41 }, + { 40, 36, 50, 48, 48, 46, 48, 48, 41 }, + { 40, 36, 50, 44, 48, 48, 48, 46, 48, 48, 41 }, + { 40, 36, 50, 48, 44, 48, 48, 48, 46, 48, 48, 41 }, + { 40, 36, 50, 48, 48, 44, 48, 48, 48, 46, 48, 48, 41 }, + { 40, 36, 50, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48, 41 }, + { 40, 36, 50, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48, 41 }, + { 40, 36, 50, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48, 41 }, + { 40, 36, 50, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48, 41 }, + { 36, 49, 48, 46, 48, 48 }, + { 36, 49, 48, 48, 46, 48, 48 }, + { 36, 49, 44, 48, 48, 48, 46, 48, 48 }, + { 36, 49, 48, 44, 48, 48, 48, 46, 48, 48 }, + { 36, 49, 48, 48, 44, 48, 48, 48, 46, 48, 48 }, + { 36, 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48 }, + { 36, 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48 }, + { 36, 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48 }, + { 36, 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48 }, + { 36, 57, 46, 57, 57 }, + { 36, 57, 57, 46, 57, 57 }, + { 36, 57, 57, 57, 46, 57, 57 }, + { 36, 57, 44, 57, 57, 57, 46, 57, 57 }, + { 36, 57, 57, 44, 57, 57, 57, 46, 57, 57 }, + { 36, 57, 57, 57, 44, 57, 57, 57, 46, 57, 57 }, + { 36, 57, 44, 57, 57, 57, 44, 57, 57, 57, 46, 57, 57 }, + { 36, 57, 57, 44, 57, 57, 57, 44, 57, 57, 57, 46, 57, 57 }, + { 36, 57, 57, 57, 44, 57, 57, 57, 44, 57, 57, 57, 46, 57, 57 }, + { 40, 36, 49, 48, 46, 48, 48, 41 }, + { 40, 36, 49, 48, 48, 46, 48, 48, 41 }, + { 40, 36, 49, 44, 48, 48, 48, 46, 48, 48, 41 }, + { 40, 36, 49, 48, 44, 48, 48, 48, 46, 48, 48, 41 }, + { 40, 36, 49, 48, 48, 44, 48, 48, 48, 46, 48, 48, 41 }, + { 40, 36, 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48, 41 }, + { 40, 36, 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48, 41 }, + { 40, 36, 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48, 41 }, + { 40, 36, 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48, 41 }, + { 40, 36, 57, 46, 57, 57, 41 }, + { 40, 36, 57, 57, 46, 57, 57, 41 }, + { 40, 36, 57, 57, 57, 46, 57, 57, 41 }, + { 40, 36, 57, 44, 57, 57, 57, 46, 57, 57, 41 }, + { 40, 36, 57, 57, 44, 57, 57, 57, 46, 57, 57, 41 }, + { 40, 36, 57, 57, 57, 44, 57, 57, 57, 46, 57, 57, 41 }, + { 40, 36, 57, 44, 57, 57, 57, 44, 57, 57, 57, 46, 57, 57, 41 }, + { 40, 36, 57, 57, 44, 57, 57, 57, 44, 57, 57, 57, 46, 57, 57, 41 }, + { 40, 36, 57, 57, 57, 44, 57, 57, 57, 44, 57, 57, 57, 46, 57, 57, 41 }, + { 36, 49, 46, 48, 48 }, + { 36, 49, 50, 46, 48, 48 }, + { 36, 49, 50, 51, 46, 48, 48 }, + { 36, 49, 44, 50, 51, 52, 46, 48, 48 }, + { 36, 49, 50, 44, 51, 52, 53, 46, 48, 48 }, + { 36, 49, 50, 51, 44, 52, 53, 54, 46, 48, 48 }, + { 36, 49, 44, 50, 51, 52, 44, 53, 54, 55, 46, 48, 48 }, + { 36, 49, 50, 44, 51, 52, 53, 44, 54, 55, 56, 46, 48, 48 }, + { 36, 49, 50, 51, 44, 52, 53, 54, 44, 55, 56, 57, 46, 48, 48 }, + { 36, 49, 44, 50, 51, 52, 44, 53, 54, 55, 44, 56, 57, 48, 46, 48, 48 }, + { 40, 36, 49, 46, 48, 48, 41 }, + { 40, 36, 49, 50, 46, 48, 48, 41 }, + { 40, 36, 49, 50, 51, 46, 48, 48, 41 }, + { 40, 36, 49, 44, 50, 51, 52, 46, 48, 48, 41 }, + { 40, 36, 49, 50, 44, 51, 52, 53, 46, 48, 48, 41 }, + { 40, 36, 49, 50, 51, 44, 52, 53, 54, 46, 48, 48, 41 }, + { 40, 36, 49, 44, 50, 51, 52, 44, 53, 54, 55, 46, 48, 48, 41 }, + { 40, 36, 49, 50, 44, 51, 52, 53, 44, 54, 55, 56, 46, 48, 48, 41 }, + { 40, 36, 49, 50, 51, 44, 52, 53, 54, 44, 55, 56, 57, 46, 48, 48, 41 }, + { 40, 36, 49, 44, 50, 51, 52, 44, 53, 54, 55, 44, 56, 57, 48, 46, 48, 48, 41 }, + { 40, 36, 50, 44, 53, 57, 57, 46, 52, 48, 41 }, + { 40, 36, 50, 44, 53, 57, 57, 46, 51, 52, 41 }, + { 40, 36, 50, 44, 53, 57, 57, 46, 51, 51, 41 }, + { 36, 49, 46, 48, 48 }, + { 36, 49, 46, 48, 48 }, + { 36, 49, 46, 48, 48 }, + { 36, 49, 46, 48, 48 }, + { 36, 49, 46, 48, 48 }, + { 36, 49, 46, 48, 49 }, + { 36, 49, 46, 48, 49 }, + { 36, 49, 46, 48, 49 }, + { 36, 49, 46, 48, 49 }, + { 36, 49, 46, 48, 49 }, + { 36, 49, 46, 50, 50 }, + { 36, 49, 46, 50, 50 }, + { 36, 49, 46, 50, 50 }, + { 36, 49, 46, 50, 50 }, + { 36, 49, 46, 50, 50 }, + { 36, 49, 46, 50, 50 }, + { 36, 49, 46, 50, 50 }, + { 36, 49, 46, 50, 50 }, + { 36, 49, 46, 50, 50 }, + { 36, 49, 46, 50, 50 }, + { 36, 49, 46, 50, 50 }, + { 36, 49, 46, 50, 50 }, + { 36, 49, 46, 50, 50 }, + { 36, 49, 46, 50, 50 }, + { 36, 49, 46, 50, 50 }, + { 36, 49, 46, 50, 50 }, + { 36, 49, 46, 50, 50 }, + { 36, 49, 46, 50, 50 }, + { 36, 49, 46, 50, 50 }, + { 36, 49, 46, 50, 50 }, + { 36, 49, 46, 50, 51 }, + { 36, 49, 46, 50, 51 }, + { 36, 49, 46, 50, 51 }, + { 36, 49, 46, 50, 51 }, + { 36, 49, 46, 50, 51 }, + { 36, 49, 46, 50, 51 }, + { 36, 49, 46, 50, 51 }, + { 36, 49, 46, 50, 51 }, + { 36, 49, 46, 50, 51 }, + { 36, 49, 46, 50, 51 }, + { 36, 49, 46, 50, 51 }, + { 36, 49, 46, 50, 51 }, + { 36, 49, 46, 50, 51 }, + { 36, 49, 46, 50, 51 }, + { 36, 49, 46, 50, 51 }, + { 36, 49, 46, 50, 51 }, + { 36, 49, 46, 50, 51 }, + { 36, 49, 46, 50, 51 }, + { 36, 49, 46, 50, 51 }, + { 36, 49, 46, 50, 51 }, + { 36, 49, 44, 48, 48, 57, 44, 49, 51, 54, 46, 55, 49 }, + { 36, 50, 44, 53, 49, 56, 44, 52, 54, 51, 46, 52, 54 }, + { 36, 50, 44, 53, 51, 50, 44, 52, 51, 56, 46, 56, 51 }, + { 36, 51, 44, 54, 53, 48, 44, 52, 53, 56, 46, 53, 51 }, + { 36, 51, 44, 49, 52, 55, 44, 51, 52, 57, 46, 54, 50 }, + { 36, 53, 44, 52, 49, 49, 44, 51, 51, 57, 46, 55, 53 }, + { 36, 56, 44, 53, 56, 51, 44, 55, 50, 49, 46, 50, 50 }, + { 36, 49, 51, 44, 52, 55, 53, 44, 48, 53, 55, 46, 56, 50 }, + { 36, 51, 51, 44, 53, 56, 56, 44, 52, 52, 49, 46, 57, 56 }, + { 36, 57, 57, 44, 57, 55, 57, 44, 55, 57, 52, 46, 48, 56 }, + { 36, 57, 57, 44, 57, 51, 55, 44, 52, 51, 49, 46, 53, 56 }, + { 36, 57, 57, 44, 51, 56, 54, 44, 55, 49, 57, 46, 48, 56 }, + { 36, 51, 51, 44, 56, 53, 51, 44, 48, 50, 53, 46, 52, 55 }, + { 36, 51, 52, 44, 48, 52, 54, 44, 52, 50, 54, 46, 54, 48 }, + { 36, 51, 52, 44, 51, 49, 50, 44, 56, 48, 48, 46, 56, 55 }, + { 36, 51, 52, 44, 51, 56, 55, 44, 53, 54, 52, 46, 55, 53 }, + { 36, 51, 52, 44, 52, 54, 48, 44, 53, 51, 55, 46, 56, 55 }, + { 36, 51, 52, 44, 53, 55, 57, 44, 49, 55, 53, 46, 49, 50 }, + { 36, 51, 52, 44, 54, 53, 51, 44, 57, 51, 57, 46, 48, 50 }, + { 36, 51, 52, 44, 56, 52, 55, 44, 51, 52, 48, 46, 49, 53 }, + { 36, 51, 52, 44, 57, 50, 48, 44, 51, 49, 51, 46, 50, 55 }, + { 36, 51, 53, 44, 48, 51, 56, 44, 57, 53, 48, 46, 53, 50 }, + { 36, 51, 53, 44, 49, 49, 51, 44, 55, 49, 52, 46, 52, 49 }, + { 36, 51, 53, 44, 49, 56, 54, 44, 54, 56, 55, 46, 53, 51 }, + { 36, 51, 53, 44, 51, 48, 53, 44, 51, 50, 52, 46, 55, 56 }, + { 36, 51, 53, 44, 51, 56, 48, 44, 48, 56, 56, 46, 54, 55 }, + { 36, 51, 53, 44, 52, 53, 51, 44, 48, 54, 49, 46, 55, 57 }, + { 36, 51, 53, 44, 53, 55, 49, 44, 54, 57, 57, 46, 48, 53 }, + { 36, 51, 53, 44, 53, 55, 51, 44, 52, 56, 57, 46, 56, 49 }, + { 36, 51, 53, 44, 54, 52, 54, 44, 52, 54, 50, 46, 57, 51 }, + { 36, 51, 53, 44, 56, 51, 57, 44, 56, 54, 52, 46, 48, 55 }, + { 36, 51, 53, 44, 57, 49, 50, 44, 56, 51, 55, 46, 50, 48 }, + { 36, 51, 54, 44, 48, 51, 49, 44, 52, 55, 52, 46, 52, 53 }, + { 36, 51, 54, 44, 49, 48, 54, 44, 50, 51, 56, 46, 51, 51 }, + { 36, 51, 54, 44, 49, 55, 57, 44, 50, 49, 49, 46, 52, 53 }, + { 36, 51, 54, 44, 50, 57, 55, 44, 56, 52, 56, 46, 55, 48 }, + { 36, 51, 54, 44, 51, 55, 50, 44, 54, 49, 50, 46, 53, 57 }, + { 36, 51, 54, 44, 53, 54, 52, 44, 50, 50, 50, 46, 57, 55 }, + { 36, 51, 54, 44, 53, 54, 54, 44, 48, 49, 51, 46, 55, 51 }, + { 36, 51, 54, 44, 54, 51, 56, 44, 57, 56, 54, 46, 56, 53 }, + { 36, 51, 54, 44, 55, 53, 55, 44, 54, 50, 52, 46, 49, 48 }, + { 36, 51, 54, 44, 56, 51, 50, 44, 51, 56, 55, 46, 57, 57 }, + { 36, 51, 54, 44, 57, 48, 53, 44, 51, 54, 49, 46, 49, 49 }, + { 36, 51, 55, 44, 48, 50, 51, 44, 57, 57, 56, 46, 51, 55 }, + { 36, 51, 55, 44, 48, 57, 56, 44, 55, 54, 50, 46, 50, 53 }, + { 36, 51, 55, 44, 49, 55, 49, 44, 55, 51, 53, 46, 51, 55 }, + { 36, 51, 55, 44, 50, 57, 48, 44, 51, 55, 50, 46, 54, 50 }, + { 36, 51, 55, 44, 51, 54, 53, 44, 49, 51, 54, 46, 53, 50 }, + { 36, 51, 55, 44, 53, 53, 56, 44, 53, 51, 55, 46, 54, 53 }, + { 36, 51, 55, 44, 54, 51, 49, 44, 53, 49, 48, 46, 55, 55 }, + { 36, 51, 55, 44, 55, 53, 48, 44, 49, 52, 56, 46, 48, 50 }, + { 36, 51, 55, 44, 56, 50, 52, 44, 57, 49, 49, 46, 57, 49 }, + { 36, 51, 55, 44, 56, 57, 55, 44, 56, 56, 53, 46, 48, 51 }, + { 36, 51, 56, 44, 48, 49, 54, 44, 53, 50, 50, 46, 50, 56 }, + { 36, 51, 56, 44, 48, 57, 49, 44, 50, 56, 54, 46, 49, 55 }, + { 36, 51, 56, 44, 49, 54, 52, 44, 50, 53, 57, 46, 50, 57 }, + { 36, 51, 56, 44, 50, 56, 50, 44, 56, 57, 54, 46, 53, 53 }, + { 36, 51, 56, 44, 50, 56, 52, 44, 54, 56, 55, 46, 51, 49 }, + { 36, 51, 56, 44, 51, 53, 55, 44, 54, 54, 48, 46, 52, 51 }, + { 36, 51, 56, 44, 53, 53, 49, 44, 48, 54, 49, 46, 53, 55 }, + { 36, 51, 56, 44, 54, 50, 52, 44, 48, 51, 52, 46, 55, 48 }, + { 36, 51, 56, 44, 55, 52, 50, 44, 54, 55, 49, 46, 57, 53 }, + { 36, 51, 56, 44, 56, 49, 55, 44, 52, 51, 53, 46, 56, 51 }, + { 36, 51, 56, 44, 56, 57, 48, 44, 52, 48, 56, 46, 57, 53 }, + { 36, 51, 57, 44, 48, 48, 57, 44, 48, 52, 54, 46, 50, 48 }, + { 36, 51, 57, 44, 48, 56, 51, 44, 56, 49, 48, 46, 48, 57 }, + { 36, 51, 57, 44, 50, 55, 53, 44, 52, 50, 48, 46, 52, 55 }, + { 36, 51, 57, 44, 50, 55, 55, 44, 50, 49, 49, 46, 50, 51 }, + { 36, 51, 57, 44, 51, 53, 48, 44, 49, 56, 52, 46, 51, 53 }, + { 36, 51, 57, 44, 52, 54, 56, 44, 56, 50, 49, 46, 54, 48 }, + { 36, 51, 57, 44, 53, 52, 51, 44, 53, 56, 53, 46, 52, 57 }, + { 36, 51, 57, 44, 54, 49, 54, 44, 53, 53, 56, 46, 54, 49 }, + { 36, 51, 57, 44, 55, 51, 53, 44, 49, 57, 53, 46, 56, 55 }, + { 36, 51, 57, 44, 56, 48, 57, 44, 57, 53, 57, 46, 55, 53 }, + { 36, 51, 57, 44, 56, 56, 50, 44, 57, 51, 50, 46, 56, 55 }, + { 36, 52, 48, 44, 48, 48, 49, 44, 53, 55, 48, 46, 49, 50 }, + { 36, 52, 48, 44, 48, 55, 54, 44, 51, 51, 52, 46, 48, 50 }, + { 36, 52, 48, 44, 50, 54, 57, 44, 55, 51, 53, 46, 49, 53 }, + { 36, 52, 48, 44, 51, 52, 50, 44, 55, 48, 56, 46, 50, 55 }, + { 36, 52, 48, 44, 52, 54, 49, 44, 51, 52, 53, 46, 53, 50 }, + { 36, 52, 48, 44, 53, 51, 54, 44, 49, 48, 57, 46, 52, 49 }, + { 36, 52, 48, 44, 54, 48, 57, 44, 48, 56, 50, 46, 53, 51 }, + { 36, 52, 48, 44, 55, 50, 55, 44, 55, 49, 57, 46, 55, 56 }, + { 36, 52, 48, 44, 56, 48, 50, 44, 52, 56, 51, 46, 54, 55 }, + { 36, 52, 48, 44, 56, 55, 53, 44, 52, 53, 54, 46, 55, 57 }, + { 36, 52, 48, 44, 57, 57, 52, 44, 48, 57, 52, 46, 48, 53 }, + { 36, 52, 48, 44, 57, 57, 53, 44, 56, 56, 52, 46, 56, 49 }, + { 36, 52, 49, 44, 48, 54, 56, 44, 56, 53, 55, 46, 57, 51 }, + { 36, 52, 49, 44, 50, 54, 50, 44, 50, 53, 57, 46, 48, 55 }, + { 36, 52, 49, 44, 51, 51, 53, 44, 50, 51, 50, 46, 50, 48 }, + { 36, 52, 49, 44, 52, 53, 51, 44, 56, 54, 57, 46, 52, 53 }, + { 36, 52, 49, 44, 53, 50, 56, 44, 54, 51, 51, 46, 51, 51 }, + { 36, 52, 49, 44, 54, 48, 49, 44, 54, 48, 54, 46, 52, 53 }, + { 36, 52, 49, 44, 55, 50, 48, 44, 50, 52, 51, 46, 55, 48 }, + { 36, 52, 49, 44, 55, 57, 53, 44, 48, 48, 55, 46, 53, 57 }, + { 36, 52, 49, 44, 57, 56, 54, 44, 54, 49, 55, 46, 57, 55 }, + { 36, 52, 50, 44, 48, 51, 52, 44, 48, 55, 50, 46, 56, 55 }, + { 36, 52, 50, 44, 49, 48, 55, 44, 48, 52, 53, 46, 57, 56 }, + { 36, 52, 50, 44, 49, 51, 52, 44, 51, 53, 52, 46, 57, 56 }, + }; + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/text/Format/DecimalFormat/RoundingAndPropertyTest.java Thu Oct 11 16:59:50 2012 -0700 @@ -0,0 +1,795 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + * @bug 7050528 + * @summary Test java.text.DecimalFormat fast-path for format(double...) + * @author Olivier Lagneau + * @run main RoundingAndPropertyTest + * + */ + +/* ----------------------------------------------------------------------------- + * Note : + * Since fast-path algorithm does not modify any feature of DecimalFormat, + * some tests or values in this program may have to be adapted/added/removed + * when any change has been done in the fast-path source code, because the + * conditions for exercising fast-path may change. + * + * This is specially true if the set of constraints to fall in the fast-path + * case is relaxed in any manner. + * + * Usage : + * - Run main without any argument to test against a set of golden values and + * associated results hard-coded in the source code. That will do the tests + * described below + * See below comment section named "Description". + * + * or + * + * - Run main with string argument "-gengold" to output source code of + * GoldenFormattedValues.java class file with the jdk version used while + * generating the code. + * See below comment section named : "Modifying Golden Values". + * + * In case of error while running the test, a Runtime exception is generated + * providing the numbers of errors detected (format of golden values checks and + * property changes checks), and the program exit. + * + * Description : + * + * This test first checks that localization of digits is done correctly when + * calling DecimalFormat.format() on the array of values DecimalLocalizationValues + * found in GoldenDoubleValues, using the locale FullLocalizationTestLocale + * (from GoldenDoubleValues) that implies localization of digits. it checks the + * the results against expected returned string. In case of formatting error, + * it provides a message informing which value was wrongly formatted. + * + * Then it checks the results of calling NumberFormat.format(double) on a set + * of predefined golden values and checks results against expected returned + * string. It does this both for the decimal case, with an instance returned + * NumberFormat.getInstance() call and for the currency case, with an instance + * returned by NumberFormat.getCurrencyInstance(). Almost all the tested double + * values satisfy the constraints assumed by the fast-path algorithm for + * format(double ...). Some are voluntarily outside the scope of fast-path to + * check that the algorithm correctly eliminate them. In case of formatting + * error a message provides information on the golden value raising the error + * (value, exact decimal value (using BidDecimal), expected result, formatted result). + * + * Last the test checks the status and behavior of a DecimalFormat instance + * when changing properties that make this instance satisfy/invalidate its + * fast-path status, depending on the predefined set of fast-path constraints. + * + * The golden results are predefined arrays of int[] containing the unicode + * ints of the chars in the expected formatted string, when using locale + * provided in GoldenDoubleValues class. The results are those obtained by + * using a reference jdk version (for example one that does not contains the + * DecimalFormat fast-path algorithm, like jdk80-b25). + * + * The double values from which we get golden results are stored inside two + * arrays of double values: + * - DecimalGoldenValues for testing NumberFormat.getInstance(). + * - CurrencyGoldenValues for testing NumberFormat.getCurrencyInstance(). + * These arrays are located in GoldenDoubleValues.java source file. + * + * For each double value in the arrays above, there is an associated golden + * result. These results are stored in arrays of int[]: + * - DecimalGoldenFormattedValues for expected decimal golden results. + * - CurrencyGoldenFormattedValues for expected currency golden results. + * - DecimalDigitsLocalizedFormattedValues for expected localized digit results. + * + * We store the results in int[] arrays containing the expected unicode values + * because the compiler that will compile the containing java file may use a + * different locale than the one registered in GoldenDoubleValues.java. These + * arrays are located in a separate GoldenFormattedValues.java source file + * that is generated by RoundingAndPropertyTest using "-gengold" parameter. + * See below "Modifying Golden Values". + * + * The golden value arrays can be expanded, modified ... to test additional + * or different double values. In that case, the source file of class + * GoldenFormattedValues must be regenerated to replace the existing one.. + * + * Modifying Golden Values : + * + * In order to ease further modification of the list of double values checked + * and associated golden results, the test includes the method + * generatesGoldenFormattedValuesClass() that writes on standard output stream + * the source code for GoldenFormattedValues class that includes the expected + * results arrays. + * + * Here are the steps to follow for updating/modifying golden values and results: + * 1- Edit GoldenDoubleValues.java to add/remove/modify golden or localization + * values. + * 2- Run main with "-gengold" string argument with a target jdk. + * (at the creation of this test file, the target jdk used was jdk1.8.0-ea). + * 2- Copy this java code that has been writen on standard output and replace + * GoldenFormattedValues.java contents by the generated output. + * 3- Check that this updated code compiles. + * [4]- If needed replaces existing GoldenDoubleValues and GoldenFormattedValues + * files in jdk/test section, respectively by the one modified at step 1 and + * generated at step 2. + * ----------------------------------------------------------------------------- + */ + +import java.util.*; +import java.text.NumberFormat; +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; +import java.math.RoundingMode; +import java.math.BigDecimal; + + +public class RoundingAndPropertyTest { + + + // Prints on standard output stream the unicode values of chars as a + // comma-separated list of int values + private static void printUnicodeValuesArray(char[] chars) { + for (int i = 0; i < chars.length; i++) { + System.out.print((int) chars[i]); + if (i != (chars.length - 1)) + System.out.print(", "); + } + } + + // Converts given array of unicode values as an array of chars. + // Returns this converted array. + private static char[] getCharsFromUnicodeArray(int[] unicodeValues) { + char[] chars = new char[unicodeValues.length]; + + for (int i = 0; i < unicodeValues.length; i++) { + chars[i] = (char) unicodeValues[i]; + } + return chars; + } + + /* Prints on standard output stream the java code of resulting + * GoldenFormattedValues class for the golden values found in + * class GoldenDoubleValues. + */ + private static void generatesGoldenFormattedValuesClass() { + + String fourWhiteSpaces = " "; + String eightWhiteSpaces = " "; + + // Prints header without Copyright header. + System.out.println("/* This is a machine generated file - Please DO NOT EDIT !"); + System.out.println(" * Change RoundingAndPropertyTest instead,"); + System.out.println(" * and run with \"-gengold\" argument to regenerate (without copyright header)."); + System.out.println(" */"); + System.out.println(); + + System.out.println("/* This file contains the set of result Strings expected from calling inside"); + System.out.println(" * RoundingAndPropertyTest the method NumberFormat.format() upon the set of"); + System.out.println(" * double values provided in GoldenDoubleValues.java. It contains three arrays,"); + System.out.println(" * each containing arrays of unicode values representing the expected string"); + System.out.println(" * result when calling format() on the corresponding (i.e. same index) double"); + System.out.println(" * value found in GoldenDoubleValues arrays :"); + System.out.println(" * - DecimalDigitsLocalizedFormattedValues corresponds to DecimalLocalizationValues,"); + System.out.println(" * when using FullLocalizationTestLocale to format."); + System.out.println(" * - DecimalGoldenFormattedValues corresponds to DecimalGoldenValues, when used"); + System.out.println(" * in the decimal pattern case together with TestLocale."); + System.out.println(" * - CurrencyGoldenFormattedValues corresponds to CurrencyGoldenValues. when used"); + System.out.println(" * in the currency pattern case together with TestLocale."); + System.out.println(" * Please see documentation in RoundingAndPropertyTest.java for more details."); + System.out.println(" *"); + System.out.println(" * This file generated by running RoundingAndPropertyTest with \"-gengold\" argument."); + System.out.println(" */"); + System.out.println(); + + // Prints beginning of class GoldenFormattedValues. + System.out.println("class GoldenFormattedValues {"); + System.out.println(); + System.out.println( + fourWhiteSpaces + + "// The formatted values below were generated from golden values"); + System.out.print( + fourWhiteSpaces + + "// listed in GoldenDoubleValues.java,"); + System.out.println(" using the following jvm version :"); + System.out.println( + fourWhiteSpaces + "// " + + System.getProperty("java.vendor") + + " " + + System.getProperty("java.vm.name") + + " " + + System.getProperty("java.version")); + System.out.println( + fourWhiteSpaces + + "// locale for golden double values : " + GoldenDoubleValues.TestLocale); + System.out.println( + fourWhiteSpaces + + "// locale for testing digit localization : " + GoldenDoubleValues.FullLocalizationTestLocale); + System.out.println(); + + // Prints the expected results when digit localization happens + System.out.println( + fourWhiteSpaces + + "// The array of int[] unicode values storing the expected results"); + System.out.print( + fourWhiteSpaces + + "// when experiencing full localization of digits"); + System.out.println(" on DecimalLocalizationValues."); + System.out.println( + fourWhiteSpaces + + "static int[][] DecimalDigitsLocalizedFormattedValues = {"); + NumberFormat df = + NumberFormat.getInstance(GoldenDoubleValues.FullLocalizationTestLocale); + for (int i = 0; + i < GoldenDoubleValues.DecimalLocalizationValues.length; + i++) { + double d = GoldenDoubleValues.DecimalLocalizationValues[i]; + String formatted = df.format(d); + char[] decFmtChars = formatted.toCharArray(); + + System.out.print(eightWhiteSpaces + "{ "); + printUnicodeValuesArray(decFmtChars); + System.out.println(" },"); + } + System.out.println(fourWhiteSpaces + "};"); + System.out.println(); + + // Prints the golden expected results for the decimal pattern case + System.out.println( + fourWhiteSpaces + + "// The array of int[] unicode values storing the expected results"); + System.out.print( + fourWhiteSpaces + + "// when calling Decimal.format(double)"); + System.out.println(" on the decimal GoldenDoubleValues."); + System.out.println( + fourWhiteSpaces + + "static int[][] DecimalGoldenFormattedValues = {"); + df = NumberFormat.getInstance(GoldenDoubleValues.TestLocale); + for (int i = 0; + i < GoldenDoubleValues.DecimalGoldenValues.length; + i++) { + double d = GoldenDoubleValues.DecimalGoldenValues[i]; + String formatted = df.format(d); + char[] decFmtChars = formatted.toCharArray(); + + System.out.print(eightWhiteSpaces + "{ "); + printUnicodeValuesArray(decFmtChars); + System.out.println(" },"); + } + System.out.println(fourWhiteSpaces + "};"); + System.out.println(); + + // Prints the golden expected results for the currency pattern case + System.out.println( + fourWhiteSpaces + + "// The array of int[] unicode values storing the expected results"); + System.out.print( + fourWhiteSpaces + + "// when calling Decimal.format(double)"); + System.out.println(" on the currency GoldenDoubleValues."); + System.out.println( + fourWhiteSpaces + + "static int[][] CurrencyGoldenFormattedValues = {"); + NumberFormat cf = + NumberFormat.getCurrencyInstance(GoldenDoubleValues.TestLocale); + for (int i = 0; + i < GoldenDoubleValues.CurrencyGoldenValues.length; + i++) { + double d = GoldenDoubleValues.CurrencyGoldenValues[i]; + String formatted = cf.format(d); + char[] decFmtChars = formatted.toCharArray(); + + System.out.print(eightWhiteSpaces + "{ "); + printUnicodeValuesArray(decFmtChars); + System.out.println(" },"); + } + System.out.println(fourWhiteSpaces + "};"); + System.out.println(); + + // Prints end of GoldenFormattedValues class. + System.out.println("}"); + } + + private static int testLocalizationValues() { + + DecimalFormat df = (DecimalFormat) + NumberFormat.getInstance(GoldenDoubleValues.FullLocalizationTestLocale); + + double[] localizationValues = GoldenDoubleValues.DecimalLocalizationValues; + int size = localizationValues.length; + int successCounter = 0; + int failureCounter = 0; + for (int i = 0; i < size; i++) { + + double d = localizationValues[i]; + String formatted = df.format(d); + + char[] expectedUnicodeArray = + getCharsFromUnicodeArray( + GoldenFormattedValues.DecimalDigitsLocalizedFormattedValues[i]); + String expected = new String(expectedUnicodeArray); + + if (!formatted.equals(expected)) { + failureCounter++; + System.out.println( + "--- Localization error for value d = " + d + + ". Exact value = " + new BigDecimal(d).toString() + + ". Expected result = " + expected + + ". Output result = " + formatted); + } else successCounter++; + } + System.out.println("Checked positively " + successCounter + + " golden decimal values out of " + size + + " tests. There were " + failureCounter + + " format failure"); + + return failureCounter; + } + + private static int testGoldenValues(java.text.DecimalFormat df, + java.text.DecimalFormat cf) { + + double[] goldenDecimalValues = GoldenDoubleValues.DecimalGoldenValues; + int decimalSize = goldenDecimalValues.length; + int decimalSuccessCounter = 0; + int decimalFailureCounter = 0; + for (int i = 0; i < decimalSize; i++) { + + double d = goldenDecimalValues[i]; + String formatted = df.format(d); + + char[] expectedUnicodeArray = + getCharsFromUnicodeArray( + GoldenFormattedValues.DecimalGoldenFormattedValues[i]); + String expected = new String(expectedUnicodeArray); + + if (!formatted.equals(expected)) { + decimalFailureCounter++; + System.out.println( + "--- Error for golden value d = " + d + + ". Exact value = " + new BigDecimal(d).toString() + + ". Expected result = " + expected + + ". Output result = " + formatted); + } else decimalSuccessCounter++; + } + System.out.println("Checked positively " + decimalSuccessCounter + + " golden decimal values out of " + decimalSize + + " tests. There were " + decimalFailureCounter + + " format failure"); + + double[] goldenCurrencyValues = GoldenDoubleValues.CurrencyGoldenValues; + int currencySize = goldenCurrencyValues.length; + int currencySuccessCounter = 0; + int currencyFailureCounter = 0; + for (int i = 0; i < currencySize; i++) { + double d = goldenCurrencyValues[i]; + String formatted = cf.format(d); + + char[] expectedUnicodeArray = + getCharsFromUnicodeArray( + GoldenFormattedValues.CurrencyGoldenFormattedValues[i]); + String expected = new String(expectedUnicodeArray); + + if (!formatted.equals(expected)) { + currencyFailureCounter++; + System.out.println( + "--- Error for golden value d = " + d + + ". Exact value = " + new BigDecimal(d).toString() + + ". Expected result = " + expected + + ". Output result = " + formatted); + } else currencySuccessCounter++; + } + System.out.println("Checked positively " + currencySuccessCounter + + " golden currency values out of " + currencySize + + " tests. There were " + currencyFailureCounter + + " format failure"); + + return (decimalFailureCounter + currencyFailureCounter); + } + + // Checks that the two passed s1 and s2 string are equal, and prints + // out message in case of error. + private static boolean resultsEqual(String propertyName, + String s1, + String s2) { + + boolean equality = s1.equals(s2); + if (!equality) + System.out.println( + "\n*** Error while reverting to default " + + propertyName + " property.\n" + + " initial output = " + s1 + + ". reverted output = " + s2 + "."); + else System.out.println(" Test passed."); + + return equality; + + } + + /* This methods checks the behaviour of the management of properties + * of a DecimalFormat instance that satisfies fast-path constraints. + * + * It does this by comparing the results of the format(double) output + * obtained from initial fast-path state with the output provided by + * the same instance that has been pushed and exercised outside + * fast-path rules and finally "reverted" to its initial fast-path state. + * + * The schema of actions is this : + * - Call format(double) on a known DecimalFormat fast-path instance, + * and store this result. + * - Record the current state of a given property. + * - Change the property to invalidate the fast-path state. + * - Call again format(double) on the instance. + * - Revert state of property to validate again fast-path context. + * - Call format(double) again. + * - Check that first and last call to format(double) provide same result + * - Record failure if any. + * - Do the same for another property with the same instance. + * So all the property changes are chained one after the other on only the + * same instance. + * + * Some properties that currently do not influence the fast-path state + * are also tested. This is not useful with current fast-path source + * but is here for testing the whole set of properties. This is the case + * for prefixes and suffixes, and parseBigDecimal properties. + */ + private static int testSettersAndFastPath(DecimalFormat df, + boolean isCurrency) { + + final double d1 = GoldenDoubleValues.PROPERTY_CHECK_POSITIVE_VALUE; + final double d2 = GoldenDoubleValues.PROPERTY_CHECK_NEGATIVE_VALUE; + + int errors = 0; + boolean testSucceeded = false; + String firstFormatResult; + String secondFormatResult; + String propertyName; + + // ---- positivePrefix property test ---- + testSucceeded = false; + propertyName = "positivePrefix"; + System.out.print("Checking " + propertyName + " property."); + String initialPrefix = df.getPositivePrefix(); + firstFormatResult = df.format(d1); + df.setPositivePrefix("positivePrefix:"); + df.format(d1); + df.setPositivePrefix(initialPrefix); + secondFormatResult = df.format(d1); + testSucceeded = + resultsEqual(propertyName, firstFormatResult, secondFormatResult); + if (!testSucceeded) + errors++; + + // ---- positiveSuffix property test ---- + testSucceeded = false; + propertyName = "positiveSuffix"; + System.out.print("Checking " + propertyName + " property."); + String initialSuffix = df.getPositiveSuffix(); + firstFormatResult = df.format(d1); + df.setPositiveSuffix("positiveSuffix:"); + df.format(d1); + df.setPositiveSuffix(initialSuffix); + secondFormatResult = df.format(d1); + testSucceeded = + resultsEqual(propertyName,firstFormatResult, secondFormatResult); + if (!testSucceeded) + errors++; + + // ---- negativePrefix property test ---- + testSucceeded = false; + propertyName = "negativePrefix"; + System.out.print("Checking " + propertyName + " property."); + initialPrefix = df.getNegativePrefix(); + firstFormatResult = df.format(d1); + df.setNegativePrefix("negativePrefix:"); + df.format(d1); + df.setNegativePrefix(initialPrefix); + secondFormatResult = df.format(d1); + testSucceeded = + resultsEqual(propertyName, firstFormatResult, secondFormatResult); + if (!testSucceeded) + errors++; + + // ---- negativeSuffix property test ---- + testSucceeded = false; + propertyName = "negativeSuffix"; + System.out.print("Checking " + propertyName + " property."); + initialSuffix = df.getNegativeSuffix(); + firstFormatResult = df.format(d1); + df.setNegativeSuffix("negativeSuffix:"); + df.format(d1); + df.setNegativeSuffix(initialSuffix); + secondFormatResult = df.format(d1); + testSucceeded = + resultsEqual(propertyName, firstFormatResult, secondFormatResult); + if (!testSucceeded) + errors++; + + // ---- multiplier property test ---- + testSucceeded = false; + propertyName = "multiplier"; + System.out.print("Checking " + propertyName + " property."); + int initialMultiplier = df.getMultiplier(); + firstFormatResult = df.format(d1); + df.setMultiplier(10); + df.format(d1); + df.setMultiplier(initialMultiplier); + secondFormatResult = df.format(d1); + testSucceeded = + resultsEqual(propertyName, firstFormatResult, secondFormatResult); + if (!testSucceeded) + errors++; + + // ---- groupingUsed property test ---- + testSucceeded = false; + propertyName = "groupingUsed"; + System.out.print("Checking " + propertyName + " property."); + boolean initialGroupingUsed = df.isGroupingUsed(); + firstFormatResult = df.format(d1); + df.setGroupingUsed(!initialGroupingUsed); + df.format(d1); + df.setGroupingUsed(initialGroupingUsed); + secondFormatResult = df.format(d1); + testSucceeded = + resultsEqual(propertyName, firstFormatResult, secondFormatResult); + if (!testSucceeded) + errors++; + + // ---- groupingSize property test ---- + testSucceeded = false; + propertyName = "groupingSize"; + System.out.print("Checking " + propertyName + " property."); + int initialGroupingSize = df.getGroupingSize(); + firstFormatResult = df.format(d1); + df.setGroupingSize(initialGroupingSize + 1); + df.format(d1); + df.setGroupingSize(initialGroupingSize); + secondFormatResult = df.format(d1); + testSucceeded = + resultsEqual(propertyName, firstFormatResult, secondFormatResult); + if (!testSucceeded) + errors++; + + // ---- decimalSeparatorAlwaysShown property test ---- + testSucceeded = false; + propertyName = "decimalSeparatorAlwaysShown"; + System.out.print("Checking " + propertyName + " property."); + boolean initialDSShown = df.isDecimalSeparatorAlwaysShown(); + firstFormatResult = df.format(d1); + df.setDecimalSeparatorAlwaysShown(!initialDSShown); + df.format(d1); + df.setDecimalSeparatorAlwaysShown(initialDSShown); + secondFormatResult = df.format(d1); + testSucceeded = + resultsEqual(propertyName, firstFormatResult, secondFormatResult); + if (!testSucceeded) + errors++; + + // ---- parseBigDecimal property test ---- + testSucceeded = false; + propertyName = "parseBigDecimal"; + System.out.print("Checking " + propertyName + " property."); + boolean initialParseBigdecimal = df.isParseBigDecimal(); + firstFormatResult = df.format(d1); + df.setParseBigDecimal(!initialParseBigdecimal); + df.format(d1); + df.setParseBigDecimal(initialParseBigdecimal); + secondFormatResult = df.format(d1); + testSucceeded = + resultsEqual(propertyName, firstFormatResult, secondFormatResult); + if (!testSucceeded) + errors++; + + // ---- maximumIntegerDigits property test ---- + testSucceeded = false; + propertyName = "maximumIntegerDigits"; + System.out.print("Checking " + propertyName + " property."); + int initialMaxIDs = df.getMaximumIntegerDigits(); + firstFormatResult = df.format(d1); + df.setMaximumIntegerDigits(8); + df.format(d1); + df.setMaximumIntegerDigits(initialMaxIDs); + secondFormatResult = df.format(d1); + testSucceeded = + resultsEqual(propertyName, firstFormatResult, secondFormatResult); + if (!testSucceeded) + errors++; + + // ---- minimumIntegerDigits property test ---- + testSucceeded = false; + propertyName = "minimumIntegerDigits"; + System.out.print("Checking " + propertyName + " property."); + int initialMinIDs = df.getMinimumIntegerDigits(); + firstFormatResult = df.format(d1); + df.setMinimumIntegerDigits(2); + df.format(d1); + df.setMinimumIntegerDigits(initialMinIDs); + secondFormatResult = df.format(d1); + testSucceeded = + resultsEqual(propertyName, firstFormatResult, secondFormatResult); + if (!testSucceeded) + errors++; + + // ---- maximumFractionDigits property test ---- + testSucceeded = false; + propertyName = "maximumFractionDigits"; + System.out.print("Checking " + propertyName + " property."); + firstFormatResult = df.format(d1); + df.setMaximumFractionDigits(8); + df.format(d1); + if (isCurrency) { + df.setMinimumFractionDigits(2); + df.setMaximumFractionDigits(2); + } else { + df.setMinimumFractionDigits(0); + df.setMaximumFractionDigits(3); + } + secondFormatResult = df.format(d1); + testSucceeded = + resultsEqual(propertyName, firstFormatResult, secondFormatResult); + if (!testSucceeded) + errors++; + + // ---- minimumFractionDigits property test ---- + testSucceeded = false; + propertyName = "minimumFractionDigits"; + System.out.print("Checking " + propertyName + " property."); + firstFormatResult = df.format(d1); + df.setMinimumFractionDigits(1); + df.format(d1); + if (isCurrency) { + df.setMinimumFractionDigits(2); + df.setMaximumFractionDigits(2); + } else { + df.setMinimumFractionDigits(0); + df.setMaximumFractionDigits(3); + } + secondFormatResult = df.format(d1); + testSucceeded = + resultsEqual(propertyName, firstFormatResult, secondFormatResult); + if (!testSucceeded) + errors++; + + // ---- currency property test ---- + testSucceeded = false; + propertyName = "currency"; + System.out.print("Checking " + propertyName + " property."); + Currency initialCurrency = df.getCurrency(); + Currency japanCur = java.util.Currency.getInstance(Locale.JAPAN); + firstFormatResult = df.format(d1); + df.setCurrency(japanCur); + df.format(d1); + df.setCurrency(initialCurrency); + secondFormatResult = df.format(d1); + testSucceeded = + resultsEqual(propertyName, firstFormatResult, secondFormatResult); + if (!testSucceeded) + errors++; + + // ---- roundingMode property test ---- + testSucceeded = false; + propertyName = "roundingMode"; + System.out.print("Checking " + propertyName + " property."); + RoundingMode initialRMode = df.getRoundingMode(); + firstFormatResult = df.format(d1); + df.setRoundingMode(RoundingMode.HALF_UP); + df.format(d1); + df.setRoundingMode(RoundingMode.HALF_EVEN); + secondFormatResult = df.format(d1); + testSucceeded = + resultsEqual(propertyName, firstFormatResult, secondFormatResult); + if (!testSucceeded) + errors++; + + // ---- decimalFormatSymbols property test ---- + testSucceeded = false; + propertyName = "decimalFormatSymbols"; + System.out.print("Checking " + propertyName + " property."); + DecimalFormatSymbols initialDecimalFormatSymbols = df.getDecimalFormatSymbols(); + firstFormatResult = df.format(d1); + Locale bizarreLocale = new Locale("fr", "FR"); + DecimalFormatSymbols unusualSymbols = new DecimalFormatSymbols(bizarreLocale); + unusualSymbols.setDecimalSeparator('@'); + unusualSymbols.setGroupingSeparator('|'); + df.setDecimalFormatSymbols(unusualSymbols); + df.format(d1); + df.setDecimalFormatSymbols(initialDecimalFormatSymbols); + secondFormatResult = df.format(d1); + testSucceeded = + resultsEqual(propertyName, firstFormatResult, secondFormatResult); + if (!testSucceeded) + errors++; + + testSucceeded = false; + System.out.print("Checking " + propertyName + " property."); + initialDecimalFormatSymbols = df.getDecimalFormatSymbols(); + firstFormatResult = df.format(d1); + Locale japanLocale = Locale.JAPAN; + unusualSymbols = new DecimalFormatSymbols(japanLocale); + unusualSymbols.setDecimalSeparator('9'); + unusualSymbols.setGroupingSeparator('0'); + df.setDecimalFormatSymbols(unusualSymbols); + df.format(d1); + df.setDecimalFormatSymbols(initialDecimalFormatSymbols); + secondFormatResult = df.format(d1); + testSucceeded = + resultsEqual(propertyName, firstFormatResult, secondFormatResult); + if (!testSucceeded) + errors++; + + return errors; + } + + // Main for RoundingAndPropertyTest. We test first the golden values, + // and then the property setters and getters. + public static void main(String[] args) { + + if ((args.length >= 1) && + (args[0].equals("-gengold"))) + generatesGoldenFormattedValuesClass(); + else { + System.out.println("\nChecking correctness of formatting with digit localization."); + System.out.println("============================================================="); + int localizationErrors = testLocalizationValues(); + if (localizationErrors != 0) + System.out.println("*** Failure in localization tests : " + + localizationErrors + " errors detected "); + else System.out.println(" Tests for full localization of digits all passed."); + + DecimalFormat df = (DecimalFormat) + NumberFormat.getInstance(GoldenDoubleValues.TestLocale); + DecimalFormat cf = (DecimalFormat) + NumberFormat.getCurrencyInstance(GoldenDoubleValues.TestLocale); + + System.out.println("\nChecking correctness of formating for golden values."); + System.out.println("============================================================="); + int goldenValuesErrors = testGoldenValues(df,cf); + if (goldenValuesErrors != 0) + System.out.println("*** Failure in goldenValues tests : " + + goldenValuesErrors + " errors detected "); + else System.out.println(" Tests for golden values all passed."); + + System.out.println("\nChecking behavior of property changes for decimal case."); + System.out.println("============================================================="); + int decimalTestsErrors = testSettersAndFastPath(df, false); + if (decimalTestsErrors != 0) + System.out.println("*** Failure in decimal property changes tests : " + + decimalTestsErrors + " errors detected "); + else System.out.println(" Tests for decimal property changes all passed."); + + System.out.println("\nChecking behavior of property changes for currency case."); + System.out.println("============================================================="); + int currencyTestsErrors = testSettersAndFastPath(cf, true); + if (currencyTestsErrors != 0) + System.out.println("*** Failure in currency property changes tests : " + + currencyTestsErrors + " errors detected "); + else System.out.println(" Tests for currency property chamges all passed."); + + if ((localizationErrors > 0) || + (goldenValuesErrors > 0) || + (decimalTestsErrors > 0) || + (currencyTestsErrors > 0)) + throw new RuntimeException( + "Failed with " + + (localizationErrors + goldenValuesErrors + + decimalTestsErrors + currencyTestsErrors) + + " error(s)."); + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/util/Locale/Bug7069824.java Thu Oct 11 16:59:50 2012 -0700 @@ -0,0 +1,1006 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 7069824 + * @summary Verify implementation for Locale matching. + * @run main Bug7069824 + */ + +import java.util.*; +import java.util.Locale.*; +import static java.util.Locale.FilteringMode.*; +import static java.util.Locale.LanguageRange.*; + +public class Bug7069824 { + + static boolean err = false; + + public static void main(String[] args) { + testLanguageRange(); + testLocale(); + + if (err) { + throw new RuntimeException("Failed."); + } + } + + private static void testLanguageRange() { + System.out.println("Test LanguageRange class..."); + testConstants(); + testConstructors(); + testMethods(); + } + + private static void testLocale() { + System.out.println("Test Locale class..."); + test_filter(); + test_filterTags(); + test_lookup(); + test_lookupTag(); + } + + private static void testConstants() { + boolean error = false; + + if (MIN_WEIGHT != 0.0) { + error = true; + System.err.println(" MIN_WEIGHT should be 0.0 but got " + + MIN_WEIGHT); + } + + if (MAX_WEIGHT != 1.0) { + error = true; + System.err.println(" MAX_WEIGHT should be 1.0 but got " + + MAX_WEIGHT); + } + + if (error) { + err = true; + System.err.println(" testConstants() failed."); + } else { + System.out.println(" testConstants() passed."); + } + } + + private static void testConstructors() { + boolean error = false; + + LanguageRange lr; + String range; + double weight; + + range = null; + try { + lr = new LanguageRange(range); + error = true; + System.err.println(" NPE should be thrown for LanguageRange(" + + range + ")."); + } + catch (NullPointerException ex) { + } + + range = null; + weight = 0.8; + try { + lr = new LanguageRange(range, weight); + error = true; + System.err.println(" NPE should be thrown for LanguageRange(" + + range + ", " + weight + ")."); + } + catch (NullPointerException ex) { + } + + range = "elvish"; + try { + lr = new LanguageRange(range); + } + catch (Exception ex) { + error = true; + System.err.println(" " + ex + + " should not be thrown for LanguageRange(" + range + ")."); + } + + range = "de-DE"; + try { + lr = new LanguageRange(range); + } + catch (Exception ex) { + error = true; + System.err.println(" " + ex + + " should not be thrown for LanguageRange(" + range + ")."); + } + + range = "ar"; + weight = 0.8; + try { + lr = new LanguageRange(range, weight); + } + catch (Exception ex) { + error = true; + System.err.println(" " + ex + + " should not be thrown for LanguageRange(" + range + ", " + + weight + ")."); + } + + range = "ja"; + weight = -0.8; + try { + lr = new LanguageRange(range, weight); + error = true; + System.err.println(" IAE should be thrown for LanguageRange(" + + range + ", " + weight + ")."); + } + catch (IllegalArgumentException ex) { + } + + range = "Elvish"; + weight = 3.0; + try { + lr = new LanguageRange(range, weight); + error = true; + System.err.println(" IAE should be thrown for LanguageRange(" + + range + ", " + weight + ")."); + } + catch (IllegalArgumentException ex) { + } + + String[] illformedRanges = {"-ja", "ja--JP", "en-US-", "a4r", "ar*", + "ar-*EG", "", "abcdefghijklmn", "ja-J=", "ja-opqrstuvwxyz"}; + for (String r : illformedRanges) { + try { + lr = new LanguageRange(r); + error = true; + System.err.println(" IAE should be thrown for LanguageRange(" + + r + ")."); + } + catch (IllegalArgumentException ex) { + } + } + + + if (error) { + err = true; + System.err.println(" testConstructors() failed."); + } else { + System.out.println(" testConstructors() passed."); + } + } + + private static void testMethods() { + test_getRange(); + test_getWeight(); + test_equals(); + test_parse(); + test_mapEquivalents(); + } + + private static void test_getRange() { + boolean error = false; + + String range = "ja"; + double weight = 0.5; + LanguageRange lr = new LanguageRange(range, weight); + if (!lr.getRange().equals(range)) { + error = true; + System.err.println(" LanguageRange.getRange() returned unexpected value. Expected: " + + range + ", got: " + lr.getRange()); + } + + range = "en-US"; + weight = 0.5; + lr = new LanguageRange(range, weight); + if (!lr.getRange().equals(range.toLowerCase())) { + error = true; + System.err.println(" LanguageRange.getRange() returned unexpected value. Expected: " + + range + ", got: " + lr.getRange()); + } + + if (error) { + err = true; + System.err.println(" test_getRange() failed."); + } else { + System.out.println(" test_getRange() passed."); + } + } + + private static void test_getWeight() { + boolean error = false; + + String range = "ja"; + double weight = 0.5; + LanguageRange lr = new LanguageRange(range, weight); + if (lr.getWeight() != weight) { + error = true; + System.err.println(" LanguageRange.getWeight() returned unexpected value. Expected: " + + weight + ", got: " + lr.getWeight()); + } + + range = "ja"; + weight = MAX_WEIGHT; // default + lr = new LanguageRange(range); + if (!lr.getRange().equals(range) || lr.getWeight() != MAX_WEIGHT) { + error = true; + System.err.println(" LanguageRange.getWeight() returned unexpected value. Expected: " + + weight + ", got: " + lr.getWeight()); + } + + if (error) { + err = true; + System.err.println(" test_getWeight() failed."); + } else { + System.out.println(" test_getWeight() passed."); + } + } + + private static void test_equals() { + boolean error = false; + + LanguageRange lr1 = new LanguageRange("ja", 1.0); + LanguageRange lr2 = new LanguageRange("ja"); + LanguageRange lr3 = new LanguageRange("ja", 0.1); + LanguageRange lr4 = new LanguageRange("en", 1.0); + + if (!lr1.equals(lr2)) { + error = true; + System.err.println(" LanguageRange(LR(ja, 1.0)).equals(LR(ja)) should return true."); + } + + if (lr1.equals(lr3)) { + error = true; + System.err.println(" LanguageRange(LR(ja, 1.0)).equals(LR(ja, 0.1)) should return false."); + } + + if (lr1.equals(lr4)) { + error = true; + System.err.println(" LanguageRange(LR(ja, 1.0)).equals(LR(en, 1.0)) should return false."); + } + + if (lr1.equals(null)) { + error = true; + System.err.println(" LanguageRange(LR(ja, 1.0)).equals(null) should return false."); + } + + if (lr1.equals("")) { + error = true; + System.err.println(" LanguageRange(LR(ja, 1.0)).equals(\"\") should return false."); + + } + + if (error) { + err = true; + System.err.println(" test_equals() failed."); + } else { + System.out.println(" test_equals() passed."); + } + } + + private static void test_parse() { + boolean error = false; + + List<LanguageRange> list; + String str = null; + try { + list = LanguageRange.parse(str); + error = true; + System.err.println(" NPE should be thrown for parse(" + + str + ")."); + } + catch (NullPointerException ex) { + } + + str = ""; + try { + list = LanguageRange.parse(""); + error = true; + System.err.println(" IAE should be thrown for parse(" + + str + ")."); + } + catch (IllegalArgumentException ex) { + } + + str = "ja;q=3"; + try { + list = LanguageRange.parse(str); + error = true; + System.err.println("IAE should be thrown for parse(" + + str + ")."); + } + catch (IllegalArgumentException ex) { + } + + str = "Accept-Language: fr-FX,de-DE;q=0.5, fr-tp-x-FOO;q=0.1," + + "en-X-tp;q=0.6,en-FR;q=.7,de-de;q=0.8, iw;q=0.4, " + + "he;q=0.4, de-de;q=0.5,ja, in-tpp, in-tp;q=0.2"; + ArrayList<LanguageRange> expected = new ArrayList<>(); + expected.add(new LanguageRange("fr-fx", 1.0)); + expected.add(new LanguageRange("fr-fr", 1.0)); + expected.add(new LanguageRange("ja", 1.0)); + expected.add(new LanguageRange("in-tpp", 1.0)); + expected.add(new LanguageRange("id-tpp", 1.0)); + expected.add(new LanguageRange("en-fr", 0.7)); + expected.add(new LanguageRange("en-fx", 0.7)); + expected.add(new LanguageRange("en-x-tp", 0.6)); + expected.add(new LanguageRange("de-de", 0.5)); + expected.add(new LanguageRange("de-dd", 0.5)); + expected.add(new LanguageRange("iw", 0.4)); + expected.add(new LanguageRange("he", 0.4)); + expected.add(new LanguageRange("in-tp", 0.2)); + expected.add(new LanguageRange("id-tl", 0.2)); + expected.add(new LanguageRange("id-tp", 0.2)); + expected.add(new LanguageRange("in-tl", 0.2)); + expected.add(new LanguageRange("fr-tp-x-foo", 0.1)); + expected.add(new LanguageRange("fr-tl-x-foo", 0.1)); + List<LanguageRange> got = LanguageRange.parse(str); + if (!areEqual(expected, got)) { + error = true; + System.err.println(" #1 parse() test failed."); + } + + str = "Accept-Language: hak-CN;q=0.8, no-bok-NO;q=0.9, no-nyn, cmn-CN;q=0.1"; + expected = new ArrayList<>(); + expected.add(new LanguageRange("no-nyn", 1.0)); + expected.add(new LanguageRange("nn", 1.0)); + expected.add(new LanguageRange("no-bok-no", 0.9)); + expected.add(new LanguageRange("nb-no", 0.9)); + expected.add(new LanguageRange("hak-CN", 0.8)); + expected.add(new LanguageRange("zh-hakka-CN", 0.8)); + expected.add(new LanguageRange("i-hak-CN", 0.8)); + expected.add(new LanguageRange("cmn-CN", 0.1)); + expected.add(new LanguageRange("zh-cmn-CN", 0.1)); + expected.add(new LanguageRange("zh-guoyu-CN", 0.1)); + got = LanguageRange.parse(str); + if (!areEqual(expected, got)) { + error = true; + System.err.println(" #2 parse() test failed."); + } + + str = "Accept-Language: rki;q=0.4, no-bok-NO;q=0.9, ccq;q=0.5"; + expected = new ArrayList<>(); + expected.add(new LanguageRange("no-bok-no", 0.9)); + expected.add(new LanguageRange("nb-no", 0.9)); + expected.add(new LanguageRange("rki", 0.4)); + expected.add(new LanguageRange("ybd", 0.4)); + expected.add(new LanguageRange("ccq", 0.4)); + got = LanguageRange.parse(str); + if (!areEqual(expected, got)) { + error = true; + System.err.println(" #3 parse() test failed."); + } + + if (error) { + err = true; + System.err.println(" test_parse() failed."); + } else { + System.out.println(" test_parse() passed."); + } + } + + private static boolean areEqual(List<LanguageRange> expected, + List<LanguageRange> got) { + boolean error = false; + + int expectedSize = expected.size(); + int actualSize = got.size(); + + if (expectedSize != actualSize) { + error = true; + + System.err.println(" Expected size=" + expectedSize); + for (LanguageRange lr : expected) { + System.err.println(" range=" + lr.getRange() + + ", weight=" + lr.getWeight()); + } + + System.out.println(" Actual size=" + actualSize); + for (LanguageRange lr : got) { + System.err.println(" range=" + lr.getRange() + + ", weight=" + lr.getWeight()); + } + } else { + for (int i = 0; i < expectedSize; i++) { + LanguageRange lr1 = expected.get(i); + LanguageRange lr2 = got.get(i); + + if (!lr1.getRange().equals(lr2.getRange()) + || lr1.getWeight() != lr2.getWeight()) { + error = true; + System.err.println(" " + i + ": Expected: range=" + lr1.getRange() + + ", weight=" + lr1.getWeight()); + System.err.println(" " + i + ": Actual: range=" + lr2.getRange() + + ", weight=" + lr2.getWeight()); + } + } + } + + return !error; + } + + private static void test_mapEquivalents() { + boolean error = false; + + String ranges = "zh, zh-TW;q=0.8, ar;q=0.9, EN, zh-HK, ja-JP;q=0.2, es;q=0.4"; + List<LanguageRange> priorityList = LanguageRange.parse(ranges); + HashMap<String, List<String>> map = null; + + try { + List<LanguageRange> list = + LanguageRange.mapEquivalents(priorityList, null); + } + catch (Exception ex) { + error = true; + System.err.println(ex + + " should not be thrown for mapEquivalents(priorityList, null)."); + } + + map = new HashMap<>(); + try { + List<LanguageRange> list = + LanguageRange.mapEquivalents(priorityList, map); + } + catch (Exception ex) { + error = true; + System.err.println(ex + + " should not be thrown for mapEquivalents(priorityList, empty map)."); + } + + ArrayList<String> equivalentList = new ArrayList<>(); + equivalentList.add("ja"); + equivalentList.add("ja-Hira"); + map.put("ja", equivalentList); + try { + List<LanguageRange> list = LanguageRange.mapEquivalents(null, map); + error = true; + System.err.println("NPE should be thrown for mapEquivalents(null, map)."); + } + catch (NullPointerException ex) { + } + + map = new LinkedHashMap<>(); + ArrayList<String> equivalentList1 = new ArrayList<>(); + equivalentList1.add("ja"); + equivalentList1.add("ja-Hira"); + map.put("ja", equivalentList1); + ArrayList<String> equivalentList2 = new ArrayList<>(); + equivalentList2.add("zh-Hans"); + equivalentList2.add("zh-Hans-CN"); + equivalentList2.add("zh-CN"); + map.put("zh", equivalentList2); + ArrayList<String> equivalentList3 = new ArrayList<>(); + equivalentList3.add("zh-TW"); + equivalentList3.add("zh-Hant"); + map.put("zh-TW", equivalentList3); + map.put("es", null); + ArrayList<String> equivalentList4 = new ArrayList<>(); + map.put("en", equivalentList4); + ArrayList<String> equivalentList5 = new ArrayList<>(); + equivalentList5.add("de"); + map.put("zh-HK", equivalentList5); + + ArrayList<LanguageRange> expected = new ArrayList<>(); + expected.add(new LanguageRange("zh-hans", 1.0)); + expected.add(new LanguageRange("zh-hans-cn", 1.0)); + expected.add(new LanguageRange("zh-cn", 1.0)); + expected.add(new LanguageRange("de", 1.0)); + expected.add(new LanguageRange("ar", 0.9)); + expected.add(new LanguageRange("zh-tw", 0.8)); + expected.add(new LanguageRange("zh-hant", 0.8)); + expected.add(new LanguageRange("ja-jp", 0.2)); + expected.add(new LanguageRange("ja-hira-jp", 0.2)); + List<LanguageRange> got = + LanguageRange.mapEquivalents(priorityList, map); + + if (!areEqual(expected, got)) { + error = true; + } + + if (error) { + err = true; + System.err.println(" test_mapEquivalents() failed."); + } else { + System.out.println(" test_mapEquivalents() passed."); + } + } + + private static void test_filter() { + boolean error = false; + + String ranges = "ja-JP, fr-FR"; + String tags = "de-DE, en, ja-JP-hepburn, fr, he, ja-Latn-JP"; + FilteringMode mode = EXTENDED_FILTERING; + + List<LanguageRange> priorityList = LanguageRange.parse(ranges); + List<Locale> tagList = generateLocales(tags); + String actualLocales = + showLocales(Locale.filter(priorityList, tagList, mode)); + String expectedLocales = "ja-JP-hepburn, ja-Latn-JP"; + + if (!expectedLocales.equals(actualLocales)) { + error = true; + showErrorMessage("#1 filter(" + mode + ")", + ranges, tags, expectedLocales, actualLocales); + } + + + ranges = "ja-*-JP, fr-FR"; + tags = "de-DE, en, ja-JP-hepburn, fr, he, ja-Latn-JP"; + mode = EXTENDED_FILTERING; + + priorityList = LanguageRange.parse(ranges); + tagList = generateLocales(tags); + actualLocales = showLocales(Locale.filter(priorityList, tagList, mode)); + expectedLocales = "ja-JP-hepburn, ja-Latn-JP"; + + if (!expectedLocales.equals(actualLocales)) { + error = true; + showErrorMessage("#2 filter(" + mode + ")", + ranges, tags, expectedLocales, actualLocales); + } + + + ranges = "ja-*-JP, fr-FR, de-de;q=0.2"; + tags = "de-DE, en, ja-JP-hepburn, de-de, fr, he, ja-Latn-JP"; + mode = AUTOSELECT_FILTERING; + + priorityList = LanguageRange.parse(ranges); + tagList = generateLocales(tags); + actualLocales = showLocales(Locale.filter(priorityList, tagList, mode)); + expectedLocales = "ja-JP-hepburn, ja-Latn-JP, de-DE"; + + if (!expectedLocales.equals(actualLocales)) { + error = true; + showErrorMessage("#3 filter(" + mode + ")", + ranges, tags,expectedLocales, actualLocales); + } + + ranges = "ja-JP, fr-FR, de-de;q=0.2"; + tags = "de-DE, en, ja-JP-hepburn, de-de, fr, he, ja-Latn-JP"; + mode = AUTOSELECT_FILTERING; + + priorityList = LanguageRange.parse(ranges); + tagList = generateLocales(tags); + actualLocales = showLocales(Locale.filter(priorityList, tagList, mode)); + expectedLocales = "ja-JP-hepburn, de-DE"; + + if (!expectedLocales.equals(actualLocales)) { + error = true; + showErrorMessage("#4 filter(" + mode + ")", + ranges, tags, expectedLocales, actualLocales); + } + + + ranges = "en;q=0.2, ja-*-JP, fr-JP"; + tags = "de-DE, en, ja-JP-hepburn, fr, he, ja-Latn-JP"; + mode = IGNORE_EXTENDED_RANGES; + + priorityList = LanguageRange.parse(ranges); + tagList = generateLocales(tags); + actualLocales = showLocales(Locale.filter(priorityList, tagList, mode)); + expectedLocales = "en"; + + if (!expectedLocales.equals(actualLocales)) { + error = true; + showErrorMessage("#5 filter(" + mode + ")", + ranges, tags, expectedLocales, actualLocales); + } + + + ranges = "en;q=0.2, ja-*-JP, fr-JP"; + tags = "de-DE, en, ja-JP-hepburn, fr, he, ja-Latn-JP"; + mode = MAP_EXTENDED_RANGES; + + priorityList = LanguageRange.parse(ranges); + tagList = generateLocales(tags); + actualLocales = showLocales(Locale.filter(priorityList, tagList, mode)); + expectedLocales = "ja-JP-hepburn, en"; + + if (!expectedLocales.equals(actualLocales)) { + error = true; + showErrorMessage("#6 filter(" + mode + ")", + ranges, tags, expectedLocales, actualLocales); + } + + + ranges = "en;q=0.2, ja-JP, fr-JP"; + tags = "de-DE, en, ja-JP-hepburn, fr, he, ja-Latn-JP"; + mode = REJECT_EXTENDED_RANGES; + + priorityList = LanguageRange.parse(ranges); + tagList = generateLocales(tags); + actualLocales = showLocales(Locale.filter(priorityList, tagList, mode)); + expectedLocales = "ja-JP-hepburn, en"; + + if (!expectedLocales.equals(actualLocales)) { + error = true; + showErrorMessage("#7 filter(" + mode + ")", + ranges, tags, expectedLocales, actualLocales); + } + + + ranges = "en;q=0.2, ja-*-JP, fr-JP"; + tags = "de-DE, en, ja-JP-hepburn, fr, he, ja-Latn-JP"; + mode = REJECT_EXTENDED_RANGES; + + priorityList = LanguageRange.parse(ranges); + tagList = generateLocales(tags); + try { + actualLocales = + showLocales(Locale.filter(priorityList, tagList, mode)); + error = true; + System.out.println("IAE should be thrown for filter(" + + mode + ")."); + } + catch (IllegalArgumentException ex) { + } + + + ranges = "en;q=0.2, ja-*-JP, fr-JP"; + tags = null; + mode = REJECT_EXTENDED_RANGES; + + priorityList = LanguageRange.parse(ranges); + tagList = generateLocales(tags); + try { + actualLocales = + showLocales(Locale.filter(priorityList, tagList, mode)); + error = true; + System.out.println("NPE should be thrown for filter(tags=null)."); + } + catch (NullPointerException ex) { + } + + + ranges = null; + tags = "de-DE, en, ja-JP-hepburn, fr, he, ja-Latn-JP"; + mode = REJECT_EXTENDED_RANGES; + + try { + priorityList = LanguageRange.parse(ranges); + tagList = generateLocales(tags); + actualLocales = + showLocales(Locale.filter(priorityList, tagList, mode)); + error = true; + System.out.println("NPE should be thrown for filter(ranges=null)."); + } + catch (NullPointerException ex) { + } + + + ranges = "en;q=0.2, ja-*-JP, fr-JP"; + tags = ""; + mode = REJECT_EXTENDED_RANGES; + + priorityList = LanguageRange.parse(ranges); + tagList = generateLocales(tags); + try { + actualLocales = + showLocales(Locale.filter(priorityList, tagList, mode)); + } + catch (Exception ex) { + error = true; + System.out.println(ex + + " should not be thrown for filter(" + ranges + ", \"\")."); + } + + + if (error) { + err = true; + System.out.println(" test_filter() failed."); + } else { + System.out.println(" test_filter() passed."); + } + } + + private static void test_filterTags() { + boolean error = false; + + String ranges = "en;q=0.2, *;q=0.6, ja"; + String tags = "de-DE, en, ja-JP-hepburn, fr-JP, he"; + + List<LanguageRange> priorityList = LanguageRange.parse(ranges); + List<String> tagList = generateLanguageTags(tags); + String actualTags = + showLanguageTags(Locale.filterTags(priorityList, tagList)); + String expectedTags = tags; + + if (!expectedTags.equals(actualTags)) { + error = true; + showErrorMessage("#1 filterTags()", + ranges, tags, expectedTags, actualTags); + } + + + ranges = "en;q=0.2, ja-JP, fr-JP"; + tags = "de-DE, en, ja-JP-hepburn, fr, he"; + priorityList = LanguageRange.parse(ranges); + tagList = generateLanguageTags(tags); + actualTags = showLanguageTags(Locale.filterTags(priorityList, tagList)); + expectedTags = "ja-jp-hepburn, en"; + + if (!expectedTags.equals(actualTags)) { + error = true; + showErrorMessage("#2 filterTags()", + ranges, tags, expectedTags, actualTags); + } + + + ranges = "de-DE"; + tags = "de-DE, de-de, de-Latn-DE, de-Latf-DE, de-DE-x-goethe, " + + "de-Latn-DE-1996, de-Deva-DE, de, de-x-DE, de-Deva"; + FilteringMode mode = MAP_EXTENDED_RANGES; + priorityList = LanguageRange.parse(ranges); + tagList = generateLanguageTags(tags); + actualTags = showLanguageTags(Locale.filterTags(priorityList, tagList, mode)); + expectedTags = "de-de, de-de-x-goethe"; + + if (!expectedTags.equals(actualTags)) { + error = true; + showErrorMessage("#3 filterTags(" + mode + ")", + ranges, tags, expectedTags, actualTags); + } + + + ranges = "de-DE"; + tags = "de-DE, de-de, de-Latn-DE, de-Latf-DE, de-DE-x-goethe, " + + "de-Latn-DE-1996, de-Deva-DE, de, de-x-DE, de-Deva"; + mode = EXTENDED_FILTERING; + priorityList = LanguageRange.parse(ranges); + tagList = generateLanguageTags(tags); + actualTags = showLanguageTags(Locale.filterTags(priorityList, tagList, mode)); + expectedTags = "de-de, de-latn-de, de-latf-de, de-de-x-goethe, " + + "de-latn-de-1996, de-deva-de"; + + if (!expectedTags.equals(actualTags)) { + error = true; + showErrorMessage("#4 filterTags(" + mode + ")", + ranges, tags, expectedTags, actualTags); + } + + + ranges = "de-*-DE"; + tags = "de-DE, de-de, de-Latn-DE, de-Latf-DE, de-DE-x-goethe, " + + "de-Latn-DE-1996, de-Deva-DE, de, de-x-DE, de-Deva"; + mode = EXTENDED_FILTERING; + priorityList = LanguageRange.parse(ranges); + tagList = generateLanguageTags(tags); + actualTags = showLanguageTags(Locale.filterTags(priorityList, tagList, mode)); + expectedTags = "de-de, de-latn-de, de-latf-de, de-de-x-goethe, " + + "de-latn-de-1996, de-deva-de"; + + if (!expectedTags.equals(actualTags)) { + error = true; + showErrorMessage("#5 filterTags(" + mode + ")", + ranges, tags, expectedTags, actualTags); + } + + if (error) { + err = true; + System.out.println(" test_filterTags() failed."); + } else { + System.out.println(" test_filterTags() passed."); + } + } + + private static void test_lookup() { + boolean error = false; + + String ranges = "en;q=0.2, *-JP;q=0.6, iw"; + String tags = "de-DE, en, ja-JP-hepburn, fr-JP, he"; + List<LanguageRange> priorityList = LanguageRange.parse(ranges); + List<Locale> localeList = generateLocales(tags); + String actualLocale = + Locale.lookup(priorityList, localeList).toLanguageTag(); + String expectedLocale ="he"; + + if (!expectedLocale.equals(actualLocale)) { + error = true; + showErrorMessage("#1 lookup()", ranges, tags, expectedLocale, actualLocale); + } + + + ranges = "en;q=0.2, *-JP;q=0.6, iw"; + tags = "de-DE, he-IL, en, iw"; + priorityList = LanguageRange.parse(ranges); + localeList = generateLocales(tags); + actualLocale = Locale.lookup(priorityList, localeList).toLanguageTag(); + expectedLocale = "he"; + + if (!expectedLocale.equals(actualLocale)) { + error = true; + showErrorMessage("#2 lookup()", ranges, tags, expectedLocale, actualLocale); + } + + + ranges = "en;q=0.2, ja-*-JP-x-foo;q=0.6, iw"; + tags = "de-DE, fr, en, ja-Latn-JP"; + priorityList = LanguageRange.parse(ranges); + localeList = generateLocales(tags); + actualLocale = Locale.lookup(priorityList, localeList).toLanguageTag(); + expectedLocale = "ja-Latn-JP"; + + if (!expectedLocale.equals(actualLocale)) { + error = true; + showErrorMessage("#3 lookup()", ranges, tags, expectedLocale, actualLocale); + } + + if (error) { + err = true; + System.out.println(" test_lookup() failed."); + } else { + System.out.println(" test_lookup() passed."); + } + } + + private static void test_lookupTag() { + boolean error = false; + + String ranges = "en, *"; + String tags = "es, de, ja-JP"; + List<LanguageRange> priorityList = LanguageRange.parse(ranges); + List<String> tagList = generateLanguageTags(tags); + String actualTag = Locale.lookupTag(priorityList, tagList); + String expectedTag = null; + + if (actualTag != null) { + error = true; + showErrorMessage("#1 lookupTag()", ranges, tags, expectedTag, actualTag); + } + + + ranges= "en;q=0.2, *-JP"; + tags = "de-DE, en, ja-JP-hepburn, fr-JP, en-JP"; + priorityList = LanguageRange.parse(ranges); + tagList = generateLanguageTags(tags); + actualTag = Locale.lookupTag(priorityList, tagList); + expectedTag = "fr-jp"; + + if (!expectedTag.equals(actualTag)) { + error = true; + showErrorMessage("#2 lookupTag()", ranges, tags, expectedTag, actualTag); + } + + + ranges = "en;q=0.2, ar-MO, iw"; + tags = "de-DE, he, fr-JP"; + priorityList = LanguageRange.parse(ranges); + tagList = generateLanguageTags(tags); + actualTag = Locale.lookupTag(priorityList, tagList); + expectedTag = "he"; + + if (!expectedTag.equals(actualTag)) { + error = true; + showErrorMessage("#3 lookupTag()", ranges, tags, expectedTag, actualTag); + } + + + ranges = "en;q=0.2, ar-MO, he"; + tags = "de-DE, iw, fr-JP"; + priorityList = LanguageRange.parse(ranges); + tagList = generateLanguageTags(tags); + actualTag = Locale.lookupTag(priorityList, tagList); + expectedTag = "iw"; + + if (!expectedTag.equals(actualTag)) { + error = true; + showErrorMessage("#4 lookupTag()", ranges, tags, expectedTag, actualTag); + } + + if (error) { + err = true; + System.out.println(" test_lookupTag() failed."); + } else { + System.out.println(" test_lookupTag() passed."); + } + } + + private static List<Locale> generateLocales(String tags) { + if (tags == null) { + return null; + } + + List<Locale> localeList = new ArrayList<>(); + if (tags.equals("")) { + return localeList; + } + String[] t = tags.split(", "); + for (String tag : t) { + localeList.add(Locale.forLanguageTag(tag)); + } + return localeList; + } + + private static List<String> generateLanguageTags(String tags) { + List<String> tagList = new ArrayList<>(); + String[] t = tags.split(", "); + for (String tag : t) { + tagList.add(tag); + } + return tagList; + } + + private static String showPriorityList(List<LanguageRange> priorityList) { + StringBuilder sb = new StringBuilder(); + + Iterator<LanguageRange> itr = priorityList.iterator(); + LanguageRange lr; + if (itr.hasNext()) { + lr = itr.next(); + sb.append(lr.getRange()); + sb.append(";q="); + sb.append(lr.getWeight()); + } + while (itr.hasNext()) { + sb.append(", "); + lr = itr.next(); + sb.append(lr.getRange()); + sb.append(";q="); + sb.append(lr.getWeight()); + } + + return sb.toString(); + } + + private static String showLanguageTags(List<String> tags) { + StringBuilder sb = new StringBuilder(); + + Iterator<String> itr = tags.iterator(); + if (itr.hasNext()) { + sb.append(itr.next()); + } + while (itr.hasNext()) { + sb.append(", "); + sb.append(itr.next()); + } + + return sb.toString().trim(); + } + + private static String showLocales(List<Locale> locales) { + StringBuilder sb = new StringBuilder(); + + Iterator<Locale> itr = locales.iterator(); + if (itr.hasNext()) { + sb.append(itr.next().toLanguageTag()); + } + while (itr.hasNext()) { + sb.append(", "); + sb.append(itr.next().toLanguageTag()); + } + + return sb.toString().trim(); + } + + private static void showErrorMessage(String methodName, + String priorityList, + String tags, + String expectedTags, + String actualTags) { + System.out.println("\nIncorrect " + methodName + " result."); + System.out.println(" Priority list : " + priorityList); + System.out.println(" Language tags : " + tags); + System.out.println(" Expected value : " + expectedTags); + System.out.println(" Actual value : " + actualTags); + } + +}
--- a/jdk/test/java/util/Locale/LocaleProviders.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/test/java/util/Locale/LocaleProviders.java Thu Oct 11 16:59:50 2012 -0700 @@ -20,15 +20,45 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -import java.text.spi.DateFormatProvider; -import java.util.Locale; +import java.text.*; +import java.text.spi.*; +import java.util.*; import sun.util.locale.provider.LocaleProviderAdapter; public class LocaleProviders { public static void main(String[] args) { - String expected = args[0]; - Locale testLocale = new Locale(args[1], args[2]); + String methodName = args[0]; + + switch (methodName) { + case "getPlatformLocale": + if (args[1].equals("format")) { + getPlatformLocale(Locale.Category.FORMAT); + } else { + getPlatformLocale(Locale.Category.DISPLAY); + } + break; + + case "adapterTest": + adapterTest(args[1], args[2], (args.length >= 4 ? args[3] : "")); + break; + + case "bug7198834Test": + bug7198834Test(); + break; + + default: + throw new RuntimeException("Test method '"+methodName+"' not found."); + } + } + + static void getPlatformLocale(Locale.Category cat) { + Locale defloc = Locale.getDefault(cat); + System.out.printf("%s,%s\n", defloc.getLanguage(), defloc.getCountry()); + } + + static void adapterTest(String expected, String lang, String ctry) { + Locale testLocale = new Locale(lang, ctry); String preference = System.getProperty("java.locale.providers", ""); LocaleProviderAdapter lda = LocaleProviderAdapter.getAdapter(DateFormatProvider.class, testLocale); LocaleProviderAdapter.Type type = lda.getAdapterType(); @@ -37,4 +67,18 @@ throw new RuntimeException("Returned locale data adapter is not correct."); } } + + static void bug7198834Test() { + LocaleProviderAdapter lda = LocaleProviderAdapter.getAdapter(DateFormatProvider.class, Locale.US); + LocaleProviderAdapter.Type type = lda.getAdapterType(); + if (type == LocaleProviderAdapter.Type.HOST && System.getProperty("os.name").startsWith("Windows")) { + DateFormat df = DateFormat.getDateInstance(DateFormat.FULL, Locale.US); + String date = df.format(new Date()); + if (date.charAt(date.length()-1) == ' ') { + throw new RuntimeException("Windows Host Locale Provider returns a trailing space."); + } + } else { + System.out.println("Windows HOST locale adapter not found. Ignoring this test."); + } + } }
--- a/jdk/test/java/util/Locale/LocaleProviders.sh Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/test/java/util/Locale/LocaleProviders.sh Thu Oct 11 16:59:50 2012 -0700 @@ -23,7 +23,7 @@ #!/bin/sh # # @test -# @bug 6336885 +# @bug 6336885 7196799 7197573 7198834 # @summary tests for "java.locale.providers" system property # @compile -XDignore.symbol.file LocaleProviders.java # @run shell/timeout=600 LocaleProviders.sh @@ -65,9 +65,21 @@ ;; esac +# get the platform default locales +PLATDEF=`${TESTJAVA}${FS}bin${FS}java -classpath ${TESTCLASSES} LocaleProviders getPlatformLocale display` +DEFLANG=`echo ${PLATDEF} | sed -e "s/,.*//"` +DEFCTRY=`echo ${PLATDEF} | sed -e "s/.*,//"` +echo "DEFLANG=${DEFLANG}" +echo "DEFCTRY=${DEFCTRY}" +PLATDEF=`${TESTJAVA}${FS}bin${FS}java -classpath ${TESTCLASSES} LocaleProviders getPlatformLocale format` +DEFFMTLANG=`echo ${PLATDEF} | sed -e "s/,.*//"` +DEFFMTCTRY=`echo ${PLATDEF} | sed -e "s/.*,//"` +echo "DEFFMTLANG=${DEFFMTLANG}" +echo "DEFFMTCTRY=${DEFFMTCTRY}" + runTest() { - RUNCMD="${TESTJAVA}${FS}bin${FS}java -classpath ${TESTCLASSES} -Duser.language=$DEFLANG -Duser.country=$DEFCTRY -Djava.locale.providers=$PREFLIST LocaleProviders $EXPECTED $TESTLANG $TESTCTRY" + RUNCMD="${TESTJAVA}${FS}bin${FS}java -classpath ${TESTCLASSES} -Djava.locale.providers=$PREFLIST LocaleProviders $METHODNAME $PARAM1 $PARAM2 $PARAM3" echo ${RUNCMD} ${RUNCMD} result=$? @@ -81,65 +93,110 @@ } # testing HOST is selected for the default locale, if specified on Windows or MacOSX -DEFLANG=en -DEFCTRY=US -PREFLIST=HOST +METHODNAME=adapterTest +PREFLIST=HOST,JRE case "$OS" in Windows_NT* ) WINVER=`uname -r` if [ "${WINVER}" = "5" ] then - EXPECTED=JRE + PARAM1=JRE else - EXPECTED=HOST + PARAM1=HOST fi ;; CYGWIN_NT-6* | Darwin ) - EXPECTED=HOST + PARAM1=HOST ;; * ) - EXPECTED=JRE + PARAM1=JRE ;; esac -TESTLANG=en -TESTCTRY=US +PARAM2=${DEFLANG} +PARAM3=${DEFCTRY} runTest # testing HOST is NOT selected for the non-default locale, if specified -DEFLANG=en -DEFCTRY=US -PREFLIST=HOST -EXPECTED=JRE -TESTLANG=en -TESTCTRY=GB +METHODNAME=adapterTest +PREFLIST=HOST,JRE +PARAM1=JRE +# Try to find the locale JRE supports which is not the platform default (HOST supports that one) +if [ "${DEFLANG}" != "en" ] && [ "${DEFFMTLANG}" != "en" ]; then + PARAM2=en + PARAM3=US +elif [ "${DEFLANG}" != "ja" ] && [ "${DEFFMTLANG}" != "ja" ]; then + PARAM2=ja + PARAM3=JP +else + PARAM2=zh + PARAM3=CN +fi runTest # testing SPI is NOT selected, as there is none. -PREFLIST=SPI -EXPECTED=JRE -TESTLANG=en -TESTCTRY=US +METHODNAME=adapterTest +PREFLIST=SPI,JRE +PARAM1=JRE +PARAM2=en +PARAM3=US runTest # testing the order, variaton #1. This assumes en_GB DateFormat data are available both in JRE & CLDR -PREFLIST=CLDR -EXPECTED=CLDR -TESTLANG=en -TESTCTRY=GB +METHODNAME=adapterTest +PREFLIST=CLDR,JRE +PARAM1=CLDR +PARAM2=en +PARAM3=GB runTest # testing the order, variaton #2. This assumes en_GB DateFormat data are available both in JRE & CLDR +METHODNAME=adapterTest PREFLIST=JRE,CLDR -EXPECTED=JRE -TESTLANG=en -TESTCTRY=GB +PARAM1=JRE +PARAM2=en +PARAM3=GB runTest # testing the order, variaton #3 for non-existent locale in JRE assuming "haw" is not in JRE. +METHODNAME=adapterTest PREFLIST=JRE,CLDR -EXPECTED=CLDR -TESTLANG=haw -TESTCTRY=GB +PARAM1=CLDR +PARAM2=haw +PARAM3=GB +runTest + +# testing the order, variaton #4 for the bug 7196799. CLDR's "zh" data should be used in "zh_CN" +METHODNAME=adapterTest +PREFLIST=CLDR +PARAM1=CLDR +PARAM2=zh +PARAM3=CN +runTest + +# testing FALLBACK provider. SPI and invalid one cases. +METHODNAME=adapterTest +PREFLIST=SPI +PARAM1=FALLBACK +PARAM2=en +PARAM3=US +runTest +PREFLIST=FOO +PARAM1=JRE +PARAM2=en +PARAM3=US +runTest +PREFLIST=BAR,SPI +PARAM1=FALLBACK +PARAM2=en +PARAM3=US +runTest + +# testing 7198834 fix. Only works on Windows Vista or upper. +METHODNAME=bug7198834Test +PREFLIST=HOST +PARAM1= +PARAM2= +PARAM3= runTest exit $result
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/util/Locale/tools/EquivMapsGenerator.java Thu Oct 11 16:59:50 2012 -0700 @@ -0,0 +1,251 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.io.*; +import java.nio.charset.*; +import java.nio.file.*; +import java.util.*; + +public class EquivMapsGenerator { + + /* + * IANA Language Subtag Registry file downloaded from + * http://www.iana.org/assignments/language-subtag-registry + */ + private static final String DEFAULT_LSR_FILE = + "language-subtag-registry.txt"; + + private static boolean verbose = false; + + public static void main(String[] args) throws Exception { + String fileLSR = DEFAULT_LSR_FILE; + + for (int i = 0; i < args.length; i++) { + String s = args[i]; + if (s.equals("-lsr")) { + fileLSR = args[++i]; + } else if (s.equals("-verbose")) { + verbose = true; + } + } + + readLSRfile(fileLSR); + generateEquivalentMap(); + generateSourceCode(); + } + + private static String LSRrevisionDate; + private static Map<String, StringBuilder> initialLanguageMap = + new TreeMap<>(); + private static Map<String, StringBuilder> initialRegionVariantMap = + new TreeMap<>(); + + private static Map<String, String> sortedLanguageMap1 = new TreeMap<>(); + private static Map<String, String[]> sortedLanguageMap2 = new TreeMap<>(); + private static Map<String, String> sortedRegionVariantMap = + new TreeMap<>(); + + private static void readLSRfile(String filename) throws Exception { + String type = null; + String tag = null; + String preferred = null; + int mappingNum = 0; + + for (String line : Files.readAllLines(Paths.get(filename), + Charset.forName("UTF-8"))) { + line = line.toLowerCase(); + int index = line.indexOf(' ')+1; + if (line.startsWith("file-date:")) { + LSRrevisionDate = line.substring(index); + if (verbose) { + System.out.println("LSR revision date=" + LSRrevisionDate); + } + } else if (line.startsWith("type:")) { + type = line.substring(index); + } else if (line.startsWith("tag:") || line.startsWith("subtag:")) { + tag = line.substring(index); + } else if (line.startsWith("preferred-value:") + && !type.equals("extlang")) { + preferred = line.substring(index); + mappingNum++; + processDeprecatedData(type, tag, preferred); + } else if (line.equals("%%")) { + type = null; + tag = null; + preferred = null; + } + } + + if (verbose) { + System.out.println("readLSRfile(" + filename + ")"); + System.out.println(" Total number of mapping=" + mappingNum); + System.out.println("\n Map for language. Size=" + + initialLanguageMap.size()); + + for (String key : initialLanguageMap.keySet()) { + System.out.println(" " + key + ": \"" + + initialLanguageMap.get(key) + "\""); + } + + System.out.println("\n Map for region and variant. Size=" + + initialRegionVariantMap.size()); + + for (String key : initialRegionVariantMap.keySet()) { + System.out.println(" " + key + ": \"" + + initialRegionVariantMap.get(key) + "\""); + } + } + } + + private static void processDeprecatedData(String type, + String tag, + String preferred) { + StringBuilder sb; + if (type.equals("region") || type.equals("variant")) { + if (!initialRegionVariantMap.containsKey(preferred)) { + sb = new StringBuilder("-"); + sb.append(preferred); + sb.append(",-"); + sb.append(tag); + initialRegionVariantMap.put("-"+preferred, sb); + } else { + throw new RuntimeException("New case, need implementation." + + " A region/variant subtag \"" + preferred + + "\" is registered for more than one subtags."); + } + } else { // language, grandfahered, and redundant + if (!initialLanguageMap.containsKey(preferred)) { + sb = new StringBuilder(preferred); + sb.append(','); + sb.append(tag); + initialLanguageMap.put(preferred, sb); + } else { + sb = initialLanguageMap.get(preferred); + sb.append(','); + sb.append(tag); + initialLanguageMap.put(preferred, sb); + } + } + } + + private static void generateEquivalentMap() { + String[] subtags; + for (String preferred : initialLanguageMap.keySet()) { + subtags = initialLanguageMap.get(preferred).toString().split(","); + + if (subtags.length == 2) { + sortedLanguageMap1.put(subtags[0], subtags[1]); + sortedLanguageMap1.put(subtags[1], subtags[0]); + } else if (subtags.length == 3) { + sortedLanguageMap2.put(subtags[0], + new String[]{subtags[1], subtags[2]}); + sortedLanguageMap2.put(subtags[1], + new String[]{subtags[0], subtags[2]}); + sortedLanguageMap2.put(subtags[2], + new String[]{subtags[0], subtags[1]}); + } else { + throw new RuntimeException("New case, need implementation." + + " A language subtag \"" + preferred + + "\" is registered for more than two subtags. "); + } + } + + for (String preferred : initialRegionVariantMap.keySet()) { + subtags = + initialRegionVariantMap.get(preferred).toString().split(","); + + sortedRegionVariantMap.put(subtags[0], subtags[1]); + sortedRegionVariantMap.put(subtags[1], subtags[0]); + } + + if (verbose) { + System.out.println("generateEquivalentMap()"); + System.out.println(" \nSorted map for language subtags which have only one equivalent. Size=" + + sortedLanguageMap1.size()); + for (String key : sortedLanguageMap1.keySet()) { + System.out.println(" " + key + ": \"" + + sortedLanguageMap1.get(key) + "\""); + } + + System.out.println("\n Sorted map for language subtags which have multiple equivalents. Size=" + + sortedLanguageMap2.size()); + for (String key : sortedLanguageMap2.keySet()) { + String[] s = sortedLanguageMap2.get(key); + System.out.println(" " + key + ": \"" + + s[0] + "\", \"" + s[1] + "\""); + } + + System.out.println("\n Sorted map for region and variant subtags. Size=" + + sortedRegionVariantMap.size()); + for (String key : sortedRegionVariantMap.keySet()) { + System.out.println(" " + key + ": \"" + + sortedRegionVariantMap.get(key) + "\""); + } + } + System.out.println(); + } + + private final static String headerText = + "final class LocaleEquivalentMaps {\n\n" + + " static final Map<String, String> singleEquivMap;\n" + + " static final Map<String, String[]> multiEquivsMap;\n" + + " static final Map<String, String> regionVariantEquivMap;\n\n" + + " static {\n" + + " singleEquivMap = new HashMap<>();\n" + + " multiEquivsMap = new HashMap<>();\n" + + " regionVariantEquivMap = new HashMap<>();\n\n" + + " // This is an auto-generated file and should not be manually edited.\n"; + + private final static String footerText = + " }\n\n" + + "}"; + + private static void generateSourceCode() { + System.out.println(headerText + + " // LSR Revision: " + LSRrevisionDate); + + for (String key : sortedLanguageMap1.keySet()) { + String value = sortedLanguageMap1.get(key); + System.out.println(" singleEquivMap.put(\"" + + key + "\", \"" + value + "\");"); + } + System.out.println(); + for (String key : sortedLanguageMap2.keySet()) { + String[] values = sortedLanguageMap2.get(key); + System.out.println(" multiEquivsMap.put(\"" + + key + "\", new String[] {\"" + values[0] + "\", \"" + + values[1] + "\"});"); + } + System.out.println(); + for (String key : sortedRegionVariantMap.keySet()) { + String value = sortedRegionVariantMap.get(key); + System.out.println(" regionVariantEquivMap.put(\"" + + key + "\", \"" + value + "\");"); + } + + System.out.println(footerText); + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/util/Locale/tools/language-subtag-registry.txt Thu Oct 11 16:59:50 2012 -0700 @@ -0,0 +1,45975 @@ +File-Date: 2012-09-04 +%% +Type: language +Subtag: aa +Description: Afar +Added: 2005-10-16 +%% +Type: language +Subtag: ab +Description: Abkhazian +Added: 2005-10-16 +Suppress-Script: Cyrl +%% +Type: language +Subtag: ae +Description: Avestan +Added: 2005-10-16 +%% +Type: language +Subtag: af +Description: Afrikaans +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: ak +Description: Akan +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: am +Description: Amharic +Added: 2005-10-16 +Suppress-Script: Ethi +%% +Type: language +Subtag: an +Description: Aragonese +Added: 2005-10-16 +%% +Type: language +Subtag: ar +Description: Arabic +Added: 2005-10-16 +Suppress-Script: Arab +Scope: macrolanguage +%% +Type: language +Subtag: as +Description: Assamese +Added: 2005-10-16 +Suppress-Script: Beng +%% +Type: language +Subtag: av +Description: Avaric +Added: 2005-10-16 +%% +Type: language +Subtag: ay +Description: Aymara +Added: 2005-10-16 +Suppress-Script: Latn +Scope: macrolanguage +%% +Type: language +Subtag: az +Description: Azerbaijani +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: ba +Description: Bashkir +Added: 2005-10-16 +%% +Type: language +Subtag: be +Description: Belarusian +Added: 2005-10-16 +Suppress-Script: Cyrl +%% +Type: language +Subtag: bg +Description: Bulgarian +Added: 2005-10-16 +Suppress-Script: Cyrl +%% +Type: language +Subtag: bh +Description: Bihari languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: bi +Description: Bislama +Added: 2005-10-16 +%% +Type: language +Subtag: bm +Description: Bambara +Added: 2005-10-16 +%% +Type: language +Subtag: bn +Description: Bengali +Added: 2005-10-16 +Suppress-Script: Beng +%% +Type: language +Subtag: bo +Description: Tibetan +Added: 2005-10-16 +%% +Type: language +Subtag: br +Description: Breton +Added: 2005-10-16 +%% +Type: language +Subtag: bs +Description: Bosnian +Added: 2005-10-16 +Suppress-Script: Latn +Macrolanguage: sh +%% +Type: language +Subtag: ca +Description: Catalan +Description: Valencian +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: ce +Description: Chechen +Added: 2005-10-16 +%% +Type: language +Subtag: ch +Description: Chamorro +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: co +Description: Corsican +Added: 2005-10-16 +%% +Type: language +Subtag: cr +Description: Cree +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: cs +Description: Czech +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: cu +Description: Church Slavic +Description: Church Slavonic +Description: Old Bulgarian +Description: Old Church Slavonic +Description: Old Slavonic +Added: 2005-10-16 +%% +Type: language +Subtag: cv +Description: Chuvash +Added: 2005-10-16 +%% +Type: language +Subtag: cy +Description: Welsh +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: da +Description: Danish +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: de +Description: German +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: dv +Description: Dhivehi +Description: Divehi +Description: Maldivian +Added: 2005-10-16 +Suppress-Script: Thaa +%% +Type: language +Subtag: dz +Description: Dzongkha +Added: 2005-10-16 +Suppress-Script: Tibt +%% +Type: language +Subtag: ee +Description: Ewe +Added: 2005-10-16 +%% +Type: language +Subtag: el +Description: Modern Greek (1453-) +Added: 2005-10-16 +Suppress-Script: Grek +%% +Type: language +Subtag: en +Description: English +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: eo +Description: Esperanto +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: es +Description: Spanish +Description: Castilian +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: et +Description: Estonian +Added: 2005-10-16 +Suppress-Script: Latn +Scope: macrolanguage +%% +Type: language +Subtag: eu +Description: Basque +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: fa +Description: Persian +Added: 2005-10-16 +Suppress-Script: Arab +Scope: macrolanguage +%% +Type: language +Subtag: ff +Description: Fulah +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: fi +Description: Finnish +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: fj +Description: Fijian +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: fo +Description: Faroese +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: fr +Description: French +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: fy +Description: Western Frisian +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: ga +Description: Irish +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: gd +Description: Scottish Gaelic +Description: Gaelic +Added: 2005-10-16 +%% +Type: language +Subtag: gl +Description: Galician +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: gn +Description: Guarani +Added: 2005-10-16 +Suppress-Script: Latn +Scope: macrolanguage +%% +Type: language +Subtag: gu +Description: Gujarati +Added: 2005-10-16 +Suppress-Script: Gujr +%% +Type: language +Subtag: gv +Description: Manx +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: ha +Description: Hausa +Added: 2005-10-16 +%% +Type: language +Subtag: he +Description: Hebrew +Added: 2005-10-16 +Suppress-Script: Hebr +%% +Type: language +Subtag: hi +Description: Hindi +Added: 2005-10-16 +Suppress-Script: Deva +%% +Type: language +Subtag: ho +Description: Hiri Motu +Added: 2005-10-16 +%% +Type: language +Subtag: hr +Description: Croatian +Added: 2005-10-16 +Suppress-Script: Latn +Macrolanguage: sh +%% +Type: language +Subtag: ht +Description: Haitian +Description: Haitian Creole +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: hu +Description: Hungarian +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: hy +Description: Armenian +Added: 2005-10-16 +Suppress-Script: Armn +%% +Type: language +Subtag: hz +Description: Herero +Added: 2005-10-16 +%% +Type: language +Subtag: ia +Description: Interlingua (International Auxiliary Language + Association) +Added: 2005-10-16 +%% +Type: language +Subtag: id +Description: Indonesian +Added: 2005-10-16 +Suppress-Script: Latn +Macrolanguage: ms +%% +Type: language +Subtag: ie +Description: Interlingue +Description: Occidental +Added: 2005-10-16 +%% +Type: language +Subtag: ig +Description: Igbo +Added: 2005-10-16 +%% +Type: language +Subtag: ii +Description: Sichuan Yi +Description: Nuosu +Added: 2005-10-16 +%% +Type: language +Subtag: ik +Description: Inupiaq +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: in +Description: Indonesian +Added: 2005-10-16 +Deprecated: 1989-01-01 +Preferred-Value: id +Suppress-Script: Latn +Macrolanguage: ms +%% +Type: language +Subtag: io +Description: Ido +Added: 2005-10-16 +%% +Type: language +Subtag: is +Description: Icelandic +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: it +Description: Italian +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: iu +Description: Inuktitut +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: iw +Description: Hebrew +Added: 2005-10-16 +Deprecated: 1989-01-01 +Preferred-Value: he +Suppress-Script: Hebr +%% +Type: language +Subtag: ja +Description: Japanese +Added: 2005-10-16 +Suppress-Script: Jpan +%% +Type: language +Subtag: ji +Description: Yiddish +Added: 2005-10-16 +Deprecated: 1989-01-01 +Preferred-Value: yi +%% +Type: language +Subtag: jv +Description: Javanese +Added: 2005-10-16 +%% +Type: language +Subtag: jw +Description: Javanese +Added: 2005-10-16 +Deprecated: 2001-08-13 +Preferred-Value: jv +Comments: published by error in Table 1 of ISO 639:1988 +%% +Type: language +Subtag: ka +Description: Georgian +Added: 2005-10-16 +Suppress-Script: Geor +%% +Type: language +Subtag: kg +Description: Kongo +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: ki +Description: Kikuyu +Description: Gikuyu +Added: 2005-10-16 +%% +Type: language +Subtag: kj +Description: Kuanyama +Description: Kwanyama +Added: 2005-10-16 +%% +Type: language +Subtag: kk +Description: Kazakh +Added: 2005-10-16 +Suppress-Script: Cyrl +%% +Type: language +Subtag: kl +Description: Kalaallisut +Description: Greenlandic +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: km +Description: Central Khmer +Added: 2005-10-16 +Suppress-Script: Khmr +%% +Type: language +Subtag: kn +Description: Kannada +Added: 2005-10-16 +Suppress-Script: Knda +%% +Type: language +Subtag: ko +Description: Korean +Added: 2005-10-16 +Suppress-Script: Kore +%% +Type: language +Subtag: kr +Description: Kanuri +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: ks +Description: Kashmiri +Added: 2005-10-16 +%% +Type: language +Subtag: ku +Description: Kurdish +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: kv +Description: Komi +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: kw +Description: Cornish +Added: 2005-10-16 +%% +Type: language +Subtag: ky +Description: Kirghiz +Description: Kyrgyz +Added: 2005-10-16 +%% +Type: language +Subtag: la +Description: Latin +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: lb +Description: Luxembourgish +Description: Letzeburgesch +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: lg +Description: Ganda +Added: 2005-10-16 +%% +Type: language +Subtag: li +Description: Limburgan +Description: Limburger +Description: Limburgish +Added: 2005-10-16 +%% +Type: language +Subtag: ln +Description: Lingala +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: lo +Description: Lao +Added: 2005-10-16 +Suppress-Script: Laoo +%% +Type: language +Subtag: lt +Description: Lithuanian +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: lu +Description: Luba-Katanga +Added: 2005-10-16 +%% +Type: language +Subtag: lv +Description: Latvian +Added: 2005-10-16 +Suppress-Script: Latn +Scope: macrolanguage +%% +Type: language +Subtag: mg +Description: Malagasy +Added: 2005-10-16 +Suppress-Script: Latn +Scope: macrolanguage +%% +Type: language +Subtag: mh +Description: Marshallese +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: mi +Description: Maori +Added: 2005-10-16 +%% +Type: language +Subtag: mk +Description: Macedonian +Added: 2005-10-16 +Suppress-Script: Cyrl +%% +Type: language +Subtag: ml +Description: Malayalam +Added: 2005-10-16 +Suppress-Script: Mlym +%% +Type: language +Subtag: mn +Description: Mongolian +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: mo +Description: Moldavian +Description: Moldovan +Added: 2005-10-16 +Deprecated: 2008-11-22 +Preferred-Value: ro +Suppress-Script: Latn +%% +Type: language +Subtag: mr +Description: Marathi +Added: 2005-10-16 +Suppress-Script: Deva +%% +Type: language +Subtag: ms +Description: Malay (macrolanguage) +Added: 2005-10-16 +Suppress-Script: Latn +Scope: macrolanguage +%% +Type: language +Subtag: mt +Description: Maltese +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: my +Description: Burmese +Added: 2005-10-16 +Suppress-Script: Mymr +%% +Type: language +Subtag: na +Description: Nauru +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: nb +Description: Norwegian Bokmål +Added: 2005-10-16 +Suppress-Script: Latn +Macrolanguage: no +%% +Type: language +Subtag: nd +Description: North Ndebele +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: ne +Description: Nepali (macrolanguage) +Added: 2005-10-16 +Suppress-Script: Deva +Scope: macrolanguage +%% +Type: language +Subtag: ng +Description: Ndonga +Added: 2005-10-16 +%% +Type: language +Subtag: nl +Description: Dutch +Description: Flemish +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: nn +Description: Norwegian Nynorsk +Added: 2005-10-16 +Suppress-Script: Latn +Macrolanguage: no +%% +Type: language +Subtag: no +Description: Norwegian +Added: 2005-10-16 +Suppress-Script: Latn +Scope: macrolanguage +%% +Type: language +Subtag: nr +Description: South Ndebele +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: nv +Description: Navajo +Description: Navaho +Added: 2005-10-16 +%% +Type: language +Subtag: ny +Description: Nyanja +Description: Chewa +Description: Chichewa +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: oc +Description: Occitan (post 1500) +Added: 2005-10-16 +%% +Type: language +Subtag: oj +Description: Ojibwa +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: om +Description: Oromo +Added: 2005-10-16 +Suppress-Script: Latn +Scope: macrolanguage +%% +Type: language +Subtag: or +Description: Oriya (macrolanguage) +Added: 2005-10-16 +Suppress-Script: Orya +Scope: macrolanguage +%% +Type: language +Subtag: os +Description: Ossetian +Description: Ossetic +Added: 2005-10-16 +%% +Type: language +Subtag: pa +Description: Panjabi +Description: Punjabi +Added: 2005-10-16 +Suppress-Script: Guru +%% +Type: language +Subtag: pi +Description: Pali +Added: 2005-10-16 +%% +Type: language +Subtag: pl +Description: Polish +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: ps +Description: Pushto +Description: Pashto +Added: 2005-10-16 +Suppress-Script: Arab +Scope: macrolanguage +%% +Type: language +Subtag: pt +Description: Portuguese +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: qu +Description: Quechua +Added: 2005-10-16 +Suppress-Script: Latn +Scope: macrolanguage +%% +Type: language +Subtag: rm +Description: Romansh +Suppress-Script: Latn +Added: 2005-10-16 +%% +Type: language +Subtag: rn +Description: Rundi +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: ro +Description: Romanian +Description: Moldavian +Description: Moldovan +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: ru +Description: Russian +Added: 2005-10-16 +Suppress-Script: Cyrl +%% +Type: language +Subtag: rw +Description: Kinyarwanda +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: sa +Description: Sanskrit +Added: 2005-10-16 +%% +Type: language +Subtag: sc +Description: Sardinian +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: sd +Description: Sindhi +Added: 2005-10-16 +%% +Type: language +Subtag: se +Description: Northern Sami +Added: 2005-10-16 +%% +Type: language +Subtag: sg +Description: Sango +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: sh +Description: Serbo-Croatian +Added: 2005-10-16 +Scope: macrolanguage +Comments: sr, hr, bs are preferred for most modern uses +%% +Type: language +Subtag: si +Description: Sinhala +Description: Sinhalese +Added: 2005-10-16 +Suppress-Script: Sinh +%% +Type: language +Subtag: sk +Description: Slovak +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: sl +Description: Slovenian +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: sm +Description: Samoan +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: sn +Description: Shona +Added: 2005-10-16 +%% +Type: language +Subtag: so +Description: Somali +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: sq +Description: Albanian +Added: 2005-10-16 +Suppress-Script: Latn +Scope: macrolanguage +%% +Type: language +Subtag: sr +Description: Serbian +Added: 2005-10-16 +Macrolanguage: sh +%% +Type: language +Subtag: ss +Description: Swati +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: st +Description: Southern Sotho +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: su +Description: Sundanese +Added: 2005-10-16 +%% +Type: language +Subtag: sv +Description: Swedish +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: sw +Description: Swahili (macrolanguage) +Added: 2005-10-16 +Suppress-Script: Latn +Scope: macrolanguage +%% +Type: language +Subtag: ta +Description: Tamil +Added: 2005-10-16 +Suppress-Script: Taml +%% +Type: language +Subtag: te +Description: Telugu +Added: 2005-10-16 +Suppress-Script: Telu +%% +Type: language +Subtag: tg +Description: Tajik +Added: 2005-10-16 +%% +Type: language +Subtag: th +Description: Thai +Added: 2005-10-16 +Suppress-Script: Thai +%% +Type: language +Subtag: ti +Description: Tigrinya +Added: 2005-10-16 +Suppress-Script: Ethi +%% +Type: language +Subtag: tk +Description: Turkmen +Added: 2005-10-16 +%% +Type: language +Subtag: tl +Description: Tagalog +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: tn +Description: Tswana +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: to +Description: Tonga (Tonga Islands) +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: tr +Description: Turkish +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: ts +Description: Tsonga +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: tt +Description: Tatar +Added: 2005-10-16 +%% +Type: language +Subtag: tw +Description: Twi +Added: 2005-10-16 +Macrolanguage: ak +%% +Type: language +Subtag: ty +Description: Tahitian +Added: 2005-10-16 +%% +Type: language +Subtag: ug +Description: Uighur +Description: Uyghur +Added: 2005-10-16 +%% +Type: language +Subtag: uk +Description: Ukrainian +Added: 2005-10-16 +Suppress-Script: Cyrl +%% +Type: language +Subtag: ur +Description: Urdu +Added: 2005-10-16 +Suppress-Script: Arab +%% +Type: language +Subtag: uz +Description: Uzbek +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: ve +Description: Venda +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: vi +Description: Vietnamese +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: vo +Description: Volapük +Added: 2005-10-16 +%% +Type: language +Subtag: wa +Description: Walloon +Added: 2005-10-16 +%% +Type: language +Subtag: wo +Description: Wolof +Added: 2005-10-16 +%% +Type: language +Subtag: xh +Description: Xhosa +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: yi +Description: Yiddish +Added: 2005-10-16 +Suppress-Script: Hebr +Scope: macrolanguage +%% +Type: language +Subtag: yo +Description: Yoruba +Added: 2005-10-16 +%% +Type: language +Subtag: za +Description: Zhuang +Description: Chuang +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: zh +Description: Chinese +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: zu +Description: Zulu +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: aaa +Description: Ghotuo +Added: 2009-07-29 +%% +Type: language +Subtag: aab +Description: Alumu-Tesu +Added: 2009-07-29 +%% +Type: language +Subtag: aac +Description: Ari +Added: 2009-07-29 +%% +Type: language +Subtag: aad +Description: Amal +Added: 2009-07-29 +%% +Type: language +Subtag: aae +Description: Arbëreshë Albanian +Added: 2009-07-29 +Macrolanguage: sq +%% +Type: language +Subtag: aaf +Description: Aranadan +Added: 2009-07-29 +%% +Type: language +Subtag: aag +Description: Ambrak +Added: 2009-07-29 +%% +Type: language +Subtag: aah +Description: Abu' Arapesh +Added: 2009-07-29 +%% +Type: language +Subtag: aai +Description: Arifama-Miniafia +Added: 2009-07-29 +%% +Type: language +Subtag: aak +Description: Ankave +Added: 2009-07-29 +%% +Type: language +Subtag: aal +Description: Afade +Added: 2009-07-29 +%% +Type: language +Subtag: aam +Description: Aramanik +Added: 2009-07-29 +%% +Type: language +Subtag: aan +Description: Anambé +Added: 2009-07-29 +%% +Type: language +Subtag: aao +Description: Algerian Saharan Arabic +Added: 2009-07-29 +Macrolanguage: ar +%% +Type: language +Subtag: aap +Description: Pará Arára +Added: 2009-07-29 +%% +Type: language +Subtag: aaq +Description: Eastern Abnaki +Added: 2009-07-29 +%% +Type: language +Subtag: aas +Description: Aasáx +Added: 2009-07-29 +%% +Type: language +Subtag: aat +Description: Arvanitika Albanian +Added: 2009-07-29 +Macrolanguage: sq +%% +Type: language +Subtag: aau +Description: Abau +Added: 2009-07-29 +%% +Type: language +Subtag: aav +Description: Austro-Asiatic languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: aaw +Description: Solong +Added: 2009-07-29 +%% +Type: language +Subtag: aax +Description: Mandobo Atas +Added: 2009-07-29 +%% +Type: language +Subtag: aaz +Description: Amarasi +Added: 2009-07-29 +%% +Type: language +Subtag: aba +Description: Abé +Added: 2009-07-29 +%% +Type: language +Subtag: abb +Description: Bankon +Added: 2009-07-29 +%% +Type: language +Subtag: abc +Description: Ambala Ayta +Added: 2009-07-29 +%% +Type: language +Subtag: abd +Description: Manide +Added: 2009-07-29 +%% +Type: language +Subtag: abe +Description: Western Abnaki +Added: 2009-07-29 +%% +Type: language +Subtag: abf +Description: Abai Sungai +Added: 2009-07-29 +%% +Type: language +Subtag: abg +Description: Abaga +Added: 2009-07-29 +%% +Type: language +Subtag: abh +Description: Tajiki Arabic +Added: 2009-07-29 +Macrolanguage: ar +%% +Type: language +Subtag: abi +Description: Abidji +Added: 2009-07-29 +%% +Type: language +Subtag: abj +Description: Aka-Bea +Added: 2009-07-29 +%% +Type: language +Subtag: abl +Description: Lampung Nyo +Added: 2009-07-29 +%% +Type: language +Subtag: abm +Description: Abanyom +Added: 2009-07-29 +%% +Type: language +Subtag: abn +Description: Abua +Added: 2009-07-29 +%% +Type: language +Subtag: abo +Description: Abon +Added: 2009-07-29 +%% +Type: language +Subtag: abp +Description: Abellen Ayta +Added: 2009-07-29 +%% +Type: language +Subtag: abq +Description: Abaza +Added: 2009-07-29 +%% +Type: language +Subtag: abr +Description: Abron +Added: 2009-07-29 +%% +Type: language +Subtag: abs +Description: Ambonese Malay +Added: 2009-07-29 +%% +Type: language +Subtag: abt +Description: Ambulas +Added: 2009-07-29 +%% +Type: language +Subtag: abu +Description: Abure +Added: 2009-07-29 +%% +Type: language +Subtag: abv +Description: Baharna Arabic +Added: 2009-07-29 +Macrolanguage: ar +%% +Type: language +Subtag: abw +Description: Pal +Added: 2009-07-29 +%% +Type: language +Subtag: abx +Description: Inabaknon +Added: 2009-07-29 +%% +Type: language +Subtag: aby +Description: Aneme Wake +Added: 2009-07-29 +%% +Type: language +Subtag: abz +Description: Abui +Added: 2009-07-29 +%% +Type: language +Subtag: aca +Description: Achagua +Added: 2009-07-29 +%% +Type: language +Subtag: acb +Description: Áncá +Added: 2009-07-29 +%% +Type: language +Subtag: acd +Description: Gikyode +Added: 2009-07-29 +%% +Type: language +Subtag: ace +Description: Achinese +Added: 2005-10-16 +%% +Type: language +Subtag: acf +Description: Saint Lucian Creole French +Added: 2009-07-29 +%% +Type: language +Subtag: ach +Description: Acoli +Added: 2005-10-16 +%% +Type: language +Subtag: aci +Description: Aka-Cari +Added: 2009-07-29 +%% +Type: language +Subtag: ack +Description: Aka-Kora +Added: 2009-07-29 +%% +Type: language +Subtag: acl +Description: Akar-Bale +Added: 2009-07-29 +%% +Type: language +Subtag: acm +Description: Mesopotamian Arabic +Added: 2009-07-29 +Macrolanguage: ar +%% +Type: language +Subtag: acn +Description: Achang +Added: 2009-07-29 +%% +Type: language +Subtag: acp +Description: Eastern Acipa +Added: 2009-07-29 +%% +Type: language +Subtag: acq +Description: Ta'izzi-Adeni Arabic +Added: 2009-07-29 +Macrolanguage: ar +%% +Type: language +Subtag: acr +Description: Achi +Added: 2009-07-29 +%% +Type: language +Subtag: acs +Description: Acroá +Added: 2009-07-29 +%% +Type: language +Subtag: act +Description: Achterhoeks +Added: 2009-07-29 +%% +Type: language +Subtag: acu +Description: Achuar-Shiwiar +Added: 2009-07-29 +%% +Type: language +Subtag: acv +Description: Achumawi +Added: 2009-07-29 +%% +Type: language +Subtag: acw +Description: Hijazi Arabic +Added: 2009-07-29 +Macrolanguage: ar +%% +Type: language +Subtag: acx +Description: Omani Arabic +Added: 2009-07-29 +Macrolanguage: ar +%% +Type: language +Subtag: acy +Description: Cypriot Arabic +Added: 2009-07-29 +Macrolanguage: ar +%% +Type: language +Subtag: acz +Description: Acheron +Added: 2009-07-29 +%% +Type: language +Subtag: ada +Description: Adangme +Added: 2005-10-16 +%% +Type: language +Subtag: adb +Description: Adabe +Added: 2009-07-29 +%% +Type: language +Subtag: add +Description: Dzodinka +Added: 2009-07-29 +%% +Type: language +Subtag: ade +Description: Adele +Added: 2009-07-29 +%% +Type: language +Subtag: adf +Description: Dhofari Arabic +Added: 2009-07-29 +Macrolanguage: ar +%% +Type: language +Subtag: adg +Description: Andegerebinha +Added: 2009-07-29 +%% +Type: language +Subtag: adh +Description: Adhola +Added: 2009-07-29 +%% +Type: language +Subtag: adi +Description: Adi +Added: 2009-07-29 +%% +Type: language +Subtag: adj +Description: Adioukrou +Added: 2009-07-29 +%% +Type: language +Subtag: adl +Description: Galo +Added: 2009-07-29 +%% +Type: language +Subtag: adn +Description: Adang +Added: 2009-07-29 +%% +Type: language +Subtag: ado +Description: Abu +Added: 2009-07-29 +%% +Type: language +Subtag: adp +Description: Adap +Added: 2009-07-29 +%% +Type: language +Subtag: adq +Description: Adangbe +Added: 2009-07-29 +%% +Type: language +Subtag: adr +Description: Adonara +Added: 2009-07-29 +%% +Type: language +Subtag: ads +Description: Adamorobe Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: adt +Description: Adnyamathanha +Added: 2009-07-29 +%% +Type: language +Subtag: adu +Description: Aduge +Added: 2009-07-29 +%% +Type: language +Subtag: adw +Description: Amundava +Added: 2009-07-29 +%% +Type: language +Subtag: adx +Description: Amdo Tibetan +Added: 2009-07-29 +%% +Type: language +Subtag: ady +Description: Adyghe +Description: Adygei +Added: 2005-10-16 +%% +Type: language +Subtag: adz +Description: Adzera +Added: 2009-07-29 +%% +Type: language +Subtag: aea +Description: Areba +Added: 2009-07-29 +%% +Type: language +Subtag: aeb +Description: Tunisian Arabic +Added: 2009-07-29 +Macrolanguage: ar +%% +Type: language +Subtag: aec +Description: Saidi Arabic +Added: 2009-07-29 +Macrolanguage: ar +%% +Type: language +Subtag: aed +Description: Argentine Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: aee +Description: Northeast Pashayi +Added: 2009-07-29 +%% +Type: language +Subtag: aek +Description: Haeke +Added: 2009-07-29 +%% +Type: language +Subtag: ael +Description: Ambele +Added: 2009-07-29 +%% +Type: language +Subtag: aem +Description: Arem +Added: 2009-07-29 +%% +Type: language +Subtag: aen +Description: Armenian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: aeq +Description: Aer +Added: 2009-07-29 +%% +Type: language +Subtag: aer +Description: Eastern Arrernte +Added: 2009-07-29 +%% +Type: language +Subtag: aes +Description: Alsea +Added: 2009-07-29 +%% +Type: language +Subtag: aeu +Description: Akeu +Added: 2009-07-29 +%% +Type: language +Subtag: aew +Description: Ambakich +Added: 2009-07-29 +%% +Type: language +Subtag: aey +Description: Amele +Added: 2009-07-29 +%% +Type: language +Subtag: aez +Description: Aeka +Added: 2009-07-29 +%% +Type: language +Subtag: afa +Description: Afro-Asiatic languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: afb +Description: Gulf Arabic +Added: 2009-07-29 +Macrolanguage: ar +%% +Type: language +Subtag: afd +Description: Andai +Added: 2009-07-29 +%% +Type: language +Subtag: afe +Description: Putukwam +Added: 2009-07-29 +%% +Type: language +Subtag: afg +Description: Afghan Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: afh +Description: Afrihili +Added: 2005-10-16 +%% +Type: language +Subtag: afi +Description: Akrukay +Added: 2009-07-29 +%% +Type: language +Subtag: afk +Description: Nanubae +Added: 2009-07-29 +%% +Type: language +Subtag: afn +Description: Defaka +Added: 2009-07-29 +%% +Type: language +Subtag: afo +Description: Eloyi +Added: 2009-07-29 +%% +Type: language +Subtag: afp +Description: Tapei +Added: 2009-07-29 +%% +Type: language +Subtag: afs +Description: Afro-Seminole Creole +Added: 2009-07-29 +%% +Type: language +Subtag: aft +Description: Afitti +Added: 2009-07-29 +%% +Type: language +Subtag: afu +Description: Awutu +Added: 2009-07-29 +%% +Type: language +Subtag: afz +Description: Obokuitai +Added: 2009-07-29 +%% +Type: language +Subtag: aga +Description: Aguano +Added: 2009-07-29 +%% +Type: language +Subtag: agb +Description: Legbo +Added: 2009-07-29 +%% +Type: language +Subtag: agc +Description: Agatu +Added: 2009-07-29 +%% +Type: language +Subtag: agd +Description: Agarabi +Added: 2009-07-29 +%% +Type: language +Subtag: age +Description: Angal +Added: 2009-07-29 +%% +Type: language +Subtag: agf +Description: Arguni +Added: 2009-07-29 +%% +Type: language +Subtag: agg +Description: Angor +Added: 2009-07-29 +%% +Type: language +Subtag: agh +Description: Ngelima +Added: 2009-07-29 +%% +Type: language +Subtag: agi +Description: Agariya +Added: 2009-07-29 +%% +Type: language +Subtag: agj +Description: Argobba +Added: 2009-07-29 +%% +Type: language +Subtag: agk +Description: Isarog Agta +Added: 2009-07-29 +%% +Type: language +Subtag: agl +Description: Fembe +Added: 2009-07-29 +%% +Type: language +Subtag: agm +Description: Angaataha +Added: 2009-07-29 +%% +Type: language +Subtag: agn +Description: Agutaynen +Added: 2009-07-29 +%% +Type: language +Subtag: ago +Description: Tainae +Added: 2009-07-29 +%% +Type: language +Subtag: agp +Description: Paranan +Added: 2009-07-29 +Deprecated: 2010-03-11 +Comments: see apf, prf +%% +Type: language +Subtag: agq +Description: Aghem +Added: 2009-07-29 +%% +Type: language +Subtag: agr +Description: Aguaruna +Added: 2009-07-29 +%% +Type: language +Subtag: ags +Description: Esimbi +Added: 2009-07-29 +%% +Type: language +Subtag: agt +Description: Central Cagayan Agta +Added: 2009-07-29 +%% +Type: language +Subtag: agu +Description: Aguacateco +Added: 2009-07-29 +%% +Type: language +Subtag: agv +Description: Remontado Dumagat +Added: 2009-07-29 +%% +Type: language +Subtag: agw +Description: Kahua +Added: 2009-07-29 +%% +Type: language +Subtag: agx +Description: Aghul +Added: 2009-07-29 +%% +Type: language +Subtag: agy +Description: Southern Alta +Added: 2009-07-29 +%% +Type: language +Subtag: agz +Description: Mt. Iriga Agta +Added: 2009-07-29 +%% +Type: language +Subtag: aha +Description: Ahanta +Added: 2009-07-29 +%% +Type: language +Subtag: ahb +Description: Axamb +Added: 2009-07-29 +%% +Type: language +Subtag: ahg +Description: Qimant +Added: 2009-07-29 +%% +Type: language +Subtag: ahh +Description: Aghu +Added: 2009-07-29 +%% +Type: language +Subtag: ahi +Description: Tiagbamrin Aizi +Added: 2009-07-29 +%% +Type: language +Subtag: ahk +Description: Akha +Added: 2009-07-29 +%% +Type: language +Subtag: ahl +Description: Igo +Added: 2009-07-29 +%% +Type: language +Subtag: ahm +Description: Mobumrin Aizi +Added: 2009-07-29 +%% +Type: language +Subtag: ahn +Description: Àhàn +Added: 2009-07-29 +%% +Type: language +Subtag: aho +Description: Ahom +Added: 2009-07-29 +%% +Type: language +Subtag: ahp +Description: Aproumu Aizi +Added: 2009-07-29 +%% +Type: language +Subtag: ahr +Description: Ahirani +Added: 2009-07-29 +%% +Type: language +Subtag: ahs +Description: Ashe +Added: 2009-07-29 +%% +Type: language +Subtag: aht +Description: Ahtena +Added: 2009-07-29 +%% +Type: language +Subtag: aia +Description: Arosi +Added: 2009-07-29 +%% +Type: language +Subtag: aib +Description: Ainu (China) +Added: 2009-07-29 +%% +Type: language +Subtag: aic +Description: Ainbai +Added: 2009-07-29 +%% +Type: language +Subtag: aid +Description: Alngith +Added: 2009-07-29 +%% +Type: language +Subtag: aie +Description: Amara +Added: 2009-07-29 +%% +Type: language +Subtag: aif +Description: Agi +Added: 2009-07-29 +%% +Type: language +Subtag: aig +Description: Antigua and Barbuda Creole English +Added: 2009-07-29 +%% +Type: language +Subtag: aih +Description: Ai-Cham +Added: 2009-07-29 +%% +Type: language +Subtag: aii +Description: Assyrian Neo-Aramaic +Added: 2009-07-29 +Macrolanguage: syr +%% +Type: language +Subtag: aij +Description: Lishanid Noshan +Added: 2009-07-29 +%% +Type: language +Subtag: aik +Description: Ake +Added: 2009-07-29 +%% +Type: language +Subtag: ail +Description: Aimele +Added: 2009-07-29 +%% +Type: language +Subtag: aim +Description: Aimol +Added: 2009-07-29 +%% +Type: language +Subtag: ain +Description: Ainu (Japan) +Added: 2005-10-16 +%% +Type: language +Subtag: aio +Description: Aiton +Added: 2009-07-29 +%% +Type: language +Subtag: aip +Description: Burumakok +Added: 2009-07-29 +%% +Type: language +Subtag: aiq +Description: Aimaq +Added: 2009-07-29 +%% +Type: language +Subtag: air +Description: Airoran +Added: 2009-07-29 +%% +Type: language +Subtag: ais +Description: Nataoran Amis +Added: 2009-07-29 +%% +Type: language +Subtag: ait +Description: Arikem +Added: 2009-07-29 +%% +Type: language +Subtag: aiw +Description: Aari +Added: 2009-07-29 +%% +Type: language +Subtag: aix +Description: Aighon +Added: 2009-07-29 +%% +Type: language +Subtag: aiy +Description: Ali +Added: 2009-07-29 +%% +Type: language +Subtag: aja +Description: Aja (Sudan) +Added: 2009-07-29 +%% +Type: language +Subtag: ajg +Description: Aja (Benin) +Added: 2009-07-29 +%% +Type: language +Subtag: aji +Description: Ajië +Added: 2009-07-29 +%% +Type: language +Subtag: ajn +Description: Andajin +Added: 2012-08-12 +%% +Type: language +Subtag: ajp +Description: South Levantine Arabic +Added: 2009-07-29 +Macrolanguage: ar +%% +Type: language +Subtag: ajt +Description: Judeo-Tunisian Arabic +Added: 2009-07-29 +Macrolanguage: jrb +%% +Type: language +Subtag: aju +Description: Judeo-Moroccan Arabic +Added: 2009-07-29 +Macrolanguage: jrb +%% +Type: language +Subtag: ajw +Description: Ajawa +Added: 2009-07-29 +%% +Type: language +Subtag: ajz +Description: Amri Karbi +Added: 2009-07-29 +%% +Type: language +Subtag: akb +Description: Batak Angkola +Added: 2009-07-29 +%% +Type: language +Subtag: akc +Description: Mpur +Added: 2009-07-29 +%% +Type: language +Subtag: akd +Description: Ukpet-Ehom +Added: 2009-07-29 +%% +Type: language +Subtag: ake +Description: Akawaio +Added: 2009-07-29 +%% +Type: language +Subtag: akf +Description: Akpa +Added: 2009-07-29 +%% +Type: language +Subtag: akg +Description: Anakalangu +Added: 2009-07-29 +%% +Type: language +Subtag: akh +Description: Angal Heneng +Added: 2009-07-29 +%% +Type: language +Subtag: aki +Description: Aiome +Added: 2009-07-29 +%% +Type: language +Subtag: akj +Description: Aka-Jeru +Added: 2009-07-29 +%% +Type: language +Subtag: akk +Description: Akkadian +Added: 2005-10-16 +%% +Type: language +Subtag: akl +Description: Aklanon +Added: 2009-07-29 +%% +Type: language +Subtag: akm +Description: Aka-Bo +Added: 2009-07-29 +%% +Type: language +Subtag: ako +Description: Akurio +Added: 2009-07-29 +%% +Type: language +Subtag: akp +Description: Siwu +Added: 2009-07-29 +%% +Type: language +Subtag: akq +Description: Ak +Added: 2009-07-29 +%% +Type: language +Subtag: akr +Description: Araki +Added: 2009-07-29 +%% +Type: language +Subtag: aks +Description: Akaselem +Added: 2009-07-29 +%% +Type: language +Subtag: akt +Description: Akolet +Added: 2009-07-29 +%% +Type: language +Subtag: aku +Description: Akum +Added: 2009-07-29 +%% +Type: language +Subtag: akv +Description: Akhvakh +Added: 2009-07-29 +%% +Type: language +Subtag: akw +Description: Akwa +Added: 2009-07-29 +%% +Type: language +Subtag: akx +Description: Aka-Kede +Added: 2009-07-29 +%% +Type: language +Subtag: aky +Description: Aka-Kol +Added: 2009-07-29 +%% +Type: language +Subtag: akz +Description: Alabama +Added: 2009-07-29 +%% +Type: language +Subtag: ala +Description: Alago +Added: 2009-07-29 +%% +Type: language +Subtag: alc +Description: Qawasqar +Added: 2009-07-29 +%% +Type: language +Subtag: ald +Description: Alladian +Added: 2009-07-29 +%% +Type: language +Subtag: ale +Description: Aleut +Added: 2005-10-16 +%% +Type: language +Subtag: alf +Description: Alege +Added: 2009-07-29 +%% +Type: language +Subtag: alg +Description: Algonquian languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: alh +Description: Alawa +Added: 2009-07-29 +%% +Type: language +Subtag: ali +Description: Amaimon +Added: 2009-07-29 +%% +Type: language +Subtag: alj +Description: Alangan +Added: 2009-07-29 +%% +Type: language +Subtag: alk +Description: Alak +Added: 2009-07-29 +%% +Type: language +Subtag: all +Description: Allar +Added: 2009-07-29 +%% +Type: language +Subtag: alm +Description: Amblong +Added: 2009-07-29 +%% +Type: language +Subtag: aln +Description: Gheg Albanian +Added: 2009-07-29 +Macrolanguage: sq +%% +Type: language +Subtag: alo +Description: Larike-Wakasihu +Added: 2009-07-29 +%% +Type: language +Subtag: alp +Description: Alune +Added: 2009-07-29 +%% +Type: language +Subtag: alq +Description: Algonquin +Added: 2009-07-29 +%% +Type: language +Subtag: alr +Description: Alutor +Added: 2009-07-29 +%% +Type: language +Subtag: als +Description: Tosk Albanian +Added: 2009-07-29 +Macrolanguage: sq +%% +Type: language +Subtag: alt +Description: Southern Altai +Added: 2005-10-16 +%% +Type: language +Subtag: alu +Description: 'Are'are +Added: 2009-07-29 +%% +Type: language +Subtag: alv +Description: Atlantic-Congo languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: alw +Description: Alaba-K’abeena +Description: Wanbasana +Added: 2009-07-29 +%% +Type: language +Subtag: alx +Description: Amol +Added: 2009-07-29 +%% +Type: language +Subtag: aly +Description: Alyawarr +Added: 2009-07-29 +%% +Type: language +Subtag: alz +Description: Alur +Added: 2009-07-29 +%% +Type: language +Subtag: ama +Description: Amanayé +Added: 2009-07-29 +%% +Type: language +Subtag: amb +Description: Ambo +Added: 2009-07-29 +%% +Type: language +Subtag: amc +Description: Amahuaca +Added: 2009-07-29 +%% +Type: language +Subtag: ame +Description: Yanesha' +Added: 2009-07-29 +%% +Type: language +Subtag: amf +Description: Hamer-Banna +Added: 2009-07-29 +%% +Type: language +Subtag: amg +Description: Amurdak +Added: 2009-07-29 +%% +Type: language +Subtag: ami +Description: Amis +Added: 2009-07-29 +%% +Type: language +Subtag: amj +Description: Amdang +Added: 2009-07-29 +%% +Type: language +Subtag: amk +Description: Ambai +Added: 2009-07-29 +%% +Type: language +Subtag: aml +Description: War-Jaintia +Added: 2009-07-29 +%% +Type: language +Subtag: amm +Description: Ama (Papua New Guinea) +Added: 2009-07-29 +%% +Type: language +Subtag: amn +Description: Amanab +Added: 2009-07-29 +%% +Type: language +Subtag: amo +Description: Amo +Added: 2009-07-29 +%% +Type: language +Subtag: amp +Description: Alamblak +Added: 2009-07-29 +%% +Type: language +Subtag: amq +Description: Amahai +Added: 2009-07-29 +%% +Type: language +Subtag: amr +Description: Amarakaeri +Added: 2009-07-29 +%% +Type: language +Subtag: ams +Description: Southern Amami-Oshima +Added: 2009-07-29 +%% +Type: language +Subtag: amt +Description: Amto +Added: 2009-07-29 +%% +Type: language +Subtag: amu +Description: Guerrero Amuzgo +Added: 2009-07-29 +%% +Type: language +Subtag: amv +Description: Ambelau +Added: 2009-07-29 +%% +Type: language +Subtag: amw +Description: Western Neo-Aramaic +Added: 2009-07-29 +%% +Type: language +Subtag: amx +Description: Anmatyerre +Added: 2009-07-29 +%% +Type: language +Subtag: amy +Description: Ami +Added: 2009-07-29 +%% +Type: language +Subtag: amz +Description: Atampaya +Added: 2009-07-29 +%% +Type: language +Subtag: ana +Description: Andaqui +Added: 2009-07-29 +%% +Type: language +Subtag: anb +Description: Andoa +Added: 2009-07-29 +%% +Type: language +Subtag: anc +Description: Ngas +Added: 2009-07-29 +%% +Type: language +Subtag: and +Description: Ansus +Added: 2009-07-29 +%% +Type: language +Subtag: ane +Description: Xârâcùù +Added: 2009-07-29 +%% +Type: language +Subtag: anf +Description: Animere +Added: 2009-07-29 +%% +Type: language +Subtag: ang +Description: Old English (ca. 450-1100) +Added: 2005-10-16 +%% +Type: language +Subtag: anh +Description: Nend +Added: 2009-07-29 +%% +Type: language +Subtag: ani +Description: Andi +Added: 2009-07-29 +%% +Type: language +Subtag: anj +Description: Anor +Added: 2009-07-29 +%% +Type: language +Subtag: ank +Description: Goemai +Added: 2009-07-29 +%% +Type: language +Subtag: anl +Description: Anu-Hkongso Chin +Added: 2009-07-29 +%% +Type: language +Subtag: anm +Description: Anal +Added: 2009-07-29 +%% +Type: language +Subtag: ann +Description: Obolo +Added: 2009-07-29 +%% +Type: language +Subtag: ano +Description: Andoque +Added: 2009-07-29 +%% +Type: language +Subtag: anp +Description: Angika +Added: 2006-03-08 +%% +Type: language +Subtag: anq +Description: Jarawa (India) +Added: 2009-07-29 +%% +Type: language +Subtag: anr +Description: Andh +Added: 2009-07-29 +%% +Type: language +Subtag: ans +Description: Anserma +Added: 2009-07-29 +%% +Type: language +Subtag: ant +Description: Antakarinya +Added: 2009-07-29 +%% +Type: language +Subtag: anu +Description: Anuak +Added: 2009-07-29 +%% +Type: language +Subtag: anv +Description: Denya +Added: 2009-07-29 +%% +Type: language +Subtag: anw +Description: Anaang +Added: 2009-07-29 +%% +Type: language +Subtag: anx +Description: Andra-Hus +Added: 2009-07-29 +%% +Type: language +Subtag: any +Description: Anyin +Added: 2009-07-29 +%% +Type: language +Subtag: anz +Description: Anem +Added: 2009-07-29 +%% +Type: language +Subtag: aoa +Description: Angolar +Added: 2009-07-29 +%% +Type: language +Subtag: aob +Description: Abom +Added: 2009-07-29 +%% +Type: language +Subtag: aoc +Description: Pemon +Added: 2009-07-29 +%% +Type: language +Subtag: aod +Description: Andarum +Added: 2009-07-29 +%% +Type: language +Subtag: aoe +Description: Angal Enen +Added: 2009-07-29 +%% +Type: language +Subtag: aof +Description: Bragat +Added: 2009-07-29 +%% +Type: language +Subtag: aog +Description: Angoram +Added: 2009-07-29 +%% +Type: language +Subtag: aoh +Description: Arma +Added: 2009-07-29 +%% +Type: language +Subtag: aoi +Description: Anindilyakwa +Added: 2009-07-29 +%% +Type: language +Subtag: aoj +Description: Mufian +Added: 2009-07-29 +%% +Type: language +Subtag: aok +Description: Arhö +Added: 2009-07-29 +%% +Type: language +Subtag: aol +Description: Alor +Added: 2009-07-29 +%% +Type: language +Subtag: aom +Description: Ömie +Added: 2009-07-29 +%% +Type: language +Subtag: aon +Description: Bumbita Arapesh +Added: 2009-07-29 +%% +Type: language +Subtag: aor +Description: Aore +Added: 2009-07-29 +%% +Type: language +Subtag: aos +Description: Taikat +Added: 2009-07-29 +%% +Type: language +Subtag: aot +Description: A'tong +Added: 2009-07-29 +%% +Type: language +Subtag: aou +Description: A'ou +Added: 2012-08-12 +%% +Type: language +Subtag: aox +Description: Atorada +Added: 2009-07-29 +%% +Type: language +Subtag: aoz +Description: Uab Meto +Added: 2009-07-29 +%% +Type: language +Subtag: apa +Description: Apache languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: apb +Description: Sa'a +Added: 2009-07-29 +%% +Type: language +Subtag: apc +Description: North Levantine Arabic +Added: 2009-07-29 +Macrolanguage: ar +%% +Type: language +Subtag: apd +Description: Sudanese Arabic +Added: 2009-07-29 +Macrolanguage: ar +%% +Type: language +Subtag: ape +Description: Bukiyip +Added: 2009-07-29 +%% +Type: language +Subtag: apf +Description: Pahanan Agta +Added: 2010-03-11 +%% +Type: language +Subtag: apg +Description: Ampanang +Added: 2009-07-29 +%% +Type: language +Subtag: aph +Description: Athpariya +Added: 2009-07-29 +%% +Type: language +Subtag: api +Description: Apiaká +Added: 2009-07-29 +%% +Type: language +Subtag: apj +Description: Jicarilla Apache +Added: 2009-07-29 +%% +Type: language +Subtag: apk +Description: Kiowa Apache +Added: 2009-07-29 +%% +Type: language +Subtag: apl +Description: Lipan Apache +Added: 2009-07-29 +%% +Type: language +Subtag: apm +Description: Mescalero-Chiricahua Apache +Added: 2009-07-29 +%% +Type: language +Subtag: apn +Description: Apinayé +Added: 2009-07-29 +%% +Type: language +Subtag: apo +Description: Ambul +Added: 2009-07-29 +%% +Type: language +Subtag: app +Description: Apma +Added: 2009-07-29 +%% +Type: language +Subtag: apq +Description: A-Pucikwar +Added: 2009-07-29 +%% +Type: language +Subtag: apr +Description: Arop-Lokep +Added: 2009-07-29 +%% +Type: language +Subtag: aps +Description: Arop-Sissano +Added: 2009-07-29 +%% +Type: language +Subtag: apt +Description: Apatani +Added: 2009-07-29 +%% +Type: language +Subtag: apu +Description: Apurinã +Added: 2009-07-29 +%% +Type: language +Subtag: apv +Description: Alapmunte +Added: 2009-07-29 +%% +Type: language +Subtag: apw +Description: Western Apache +Added: 2009-07-29 +%% +Type: language +Subtag: apx +Description: Aputai +Added: 2009-07-29 +%% +Type: language +Subtag: apy +Description: Apalaí +Added: 2009-07-29 +%% +Type: language +Subtag: apz +Description: Safeyoka +Added: 2009-07-29 +%% +Type: language +Subtag: aqa +Description: Alacalufan languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: aqc +Description: Archi +Added: 2009-07-29 +%% +Type: language +Subtag: aqd +Description: Ampari Dogon +Added: 2011-08-16 +%% +Type: language +Subtag: aqg +Description: Arigidi +Added: 2009-07-29 +%% +Type: language +Subtag: aql +Description: Algic languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: aqm +Description: Atohwaim +Added: 2009-07-29 +%% +Type: language +Subtag: aqn +Description: Northern Alta +Added: 2009-07-29 +%% +Type: language +Subtag: aqp +Description: Atakapa +Added: 2009-07-29 +%% +Type: language +Subtag: aqr +Description: Arhâ +Added: 2009-07-29 +%% +Type: language +Subtag: aqz +Description: Akuntsu +Added: 2010-03-11 +%% +Type: language +Subtag: arb +Description: Standard Arabic +Added: 2009-07-29 +Macrolanguage: ar +%% +Type: language +Subtag: arc +Description: Official Aramaic (700-300 BCE) +Description: Imperial Aramaic (700-300 BCE) +Added: 2005-10-16 +%% +Type: language +Subtag: ard +Description: Arabana +Added: 2009-07-29 +%% +Type: language +Subtag: are +Description: Western Arrarnta +Added: 2009-07-29 +%% +Type: language +Subtag: arh +Description: Arhuaco +Added: 2009-07-29 +%% +Type: language +Subtag: ari +Description: Arikara +Added: 2009-07-29 +%% +Type: language +Subtag: arj +Description: Arapaso +Added: 2009-07-29 +%% +Type: language +Subtag: ark +Description: Arikapú +Added: 2009-07-29 +%% +Type: language +Subtag: arl +Description: Arabela +Added: 2009-07-29 +%% +Type: language +Subtag: arn +Description: Mapudungun +Description: Mapuche +Added: 2005-10-16 +%% +Type: language +Subtag: aro +Description: Araona +Added: 2009-07-29 +%% +Type: language +Subtag: arp +Description: Arapaho +Added: 2005-10-16 +%% +Type: language +Subtag: arq +Description: Algerian Arabic +Added: 2009-07-29 +Macrolanguage: ar +%% +Type: language +Subtag: arr +Description: Karo (Brazil) +Added: 2009-07-29 +%% +Type: language +Subtag: ars +Description: Najdi Arabic +Added: 2009-07-29 +Macrolanguage: ar +%% +Type: language +Subtag: art +Description: Artificial languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: aru +Description: Aruá (Amazonas State) +Description: Arawá +Added: 2009-07-29 +%% +Type: language +Subtag: arv +Description: Arbore +Added: 2009-07-29 +%% +Type: language +Subtag: arw +Description: Arawak +Added: 2005-10-16 +%% +Type: language +Subtag: arx +Description: Aruá (Rodonia State) +Added: 2009-07-29 +%% +Type: language +Subtag: ary +Description: Moroccan Arabic +Added: 2009-07-29 +Macrolanguage: ar +%% +Type: language +Subtag: arz +Description: Egyptian Arabic +Added: 2009-07-29 +Macrolanguage: ar +%% +Type: language +Subtag: asa +Description: Asu (Tanzania) +Added: 2009-07-29 +%% +Type: language +Subtag: asb +Description: Assiniboine +Added: 2009-07-29 +%% +Type: language +Subtag: asc +Description: Casuarina Coast Asmat +Added: 2009-07-29 +%% +Type: language +Subtag: asd +Description: Asas +Added: 2009-07-29 +%% +Type: language +Subtag: ase +Description: American Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: asf +Description: Australian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: asg +Description: Cishingini +Added: 2009-07-29 +%% +Type: language +Subtag: ash +Description: Abishira +Added: 2009-07-29 +%% +Type: language +Subtag: asi +Description: Buruwai +Added: 2009-07-29 +%% +Type: language +Subtag: asj +Description: Nsari +Added: 2009-07-29 +%% +Type: language +Subtag: ask +Description: Ashkun +Added: 2009-07-29 +%% +Type: language +Subtag: asl +Description: Asilulu +Added: 2009-07-29 +%% +Type: language +Subtag: asn +Description: Xingú Asuriní +Added: 2009-07-29 +%% +Type: language +Subtag: aso +Description: Dano +Added: 2009-07-29 +%% +Type: language +Subtag: asp +Description: Algerian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: asq +Description: Austrian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: asr +Description: Asuri +Added: 2009-07-29 +%% +Type: language +Subtag: ass +Description: Ipulo +Added: 2009-07-29 +%% +Type: language +Subtag: ast +Description: Asturian +Description: Asturleonese +Description: Bable +Description: Leonese +Added: 2005-10-16 +%% +Type: language +Subtag: asu +Description: Tocantins Asurini +Added: 2009-07-29 +%% +Type: language +Subtag: asv +Description: Asoa +Added: 2009-07-29 +%% +Type: language +Subtag: asw +Description: Australian Aborigines Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: asx +Description: Muratayak +Added: 2009-07-29 +%% +Type: language +Subtag: asy +Description: Yaosakor Asmat +Added: 2009-07-29 +%% +Type: language +Subtag: asz +Description: As +Added: 2009-07-29 +%% +Type: language +Subtag: ata +Description: Pele-Ata +Added: 2009-07-29 +%% +Type: language +Subtag: atb +Description: Zaiwa +Added: 2009-07-29 +%% +Type: language +Subtag: atc +Description: Atsahuaca +Added: 2009-07-29 +%% +Type: language +Subtag: atd +Description: Ata Manobo +Added: 2009-07-29 +%% +Type: language +Subtag: ate +Description: Atemble +Added: 2009-07-29 +%% +Type: language +Subtag: atg +Description: Ivbie North-Okpela-Arhe +Added: 2009-07-29 +%% +Type: language +Subtag: ath +Description: Athapascan languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: ati +Description: Attié +Added: 2009-07-29 +%% +Type: language +Subtag: atj +Description: Atikamekw +Added: 2009-07-29 +%% +Type: language +Subtag: atk +Description: Ati +Added: 2009-07-29 +%% +Type: language +Subtag: atl +Description: Mt. Iraya Agta +Added: 2009-07-29 +%% +Type: language +Subtag: atm +Description: Ata +Added: 2009-07-29 +%% +Type: language +Subtag: atn +Description: Ashtiani +Added: 2009-07-29 +%% +Type: language +Subtag: ato +Description: Atong +Added: 2009-07-29 +%% +Type: language +Subtag: atp +Description: Pudtol Atta +Added: 2009-07-29 +%% +Type: language +Subtag: atq +Description: Aralle-Tabulahan +Added: 2009-07-29 +%% +Type: language +Subtag: atr +Description: Waimiri-Atroari +Added: 2009-07-29 +%% +Type: language +Subtag: ats +Description: Gros Ventre +Added: 2009-07-29 +%% +Type: language +Subtag: att +Description: Pamplona Atta +Added: 2009-07-29 +%% +Type: language +Subtag: atu +Description: Reel +Added: 2009-07-29 +%% +Type: language +Subtag: atv +Description: Northern Altai +Added: 2009-07-29 +%% +Type: language +Subtag: atw +Description: Atsugewi +Added: 2009-07-29 +%% +Type: language +Subtag: atx +Description: Arutani +Added: 2009-07-29 +%% +Type: language +Subtag: aty +Description: Aneityum +Added: 2009-07-29 +%% +Type: language +Subtag: atz +Description: Arta +Added: 2009-07-29 +%% +Type: language +Subtag: aua +Description: Asumboa +Added: 2009-07-29 +%% +Type: language +Subtag: aub +Description: Alugu +Added: 2009-07-29 +%% +Type: language +Subtag: auc +Description: Waorani +Added: 2009-07-29 +%% +Type: language +Subtag: aud +Description: Anuta +Added: 2009-07-29 +%% +Type: language +Subtag: aue +Description: =/Kx'au//'ein +Added: 2009-07-29 +%% +Type: language +Subtag: auf +Description: Arauan languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: aug +Description: Aguna +Added: 2009-07-29 +%% +Type: language +Subtag: auh +Description: Aushi +Added: 2009-07-29 +%% +Type: language +Subtag: aui +Description: Anuki +Added: 2009-07-29 +%% +Type: language +Subtag: auj +Description: Awjilah +Added: 2009-07-29 +%% +Type: language +Subtag: auk +Description: Heyo +Added: 2009-07-29 +%% +Type: language +Subtag: aul +Description: Aulua +Added: 2009-07-29 +%% +Type: language +Subtag: aum +Description: Asu (Nigeria) +Added: 2009-07-29 +%% +Type: language +Subtag: aun +Description: Molmo One +Added: 2009-07-29 +%% +Type: language +Subtag: auo +Description: Auyokawa +Added: 2009-07-29 +%% +Type: language +Subtag: aup +Description: Makayam +Added: 2009-07-29 +%% +Type: language +Subtag: auq +Description: Anus +Description: Korur +Added: 2009-07-29 +%% +Type: language +Subtag: aur +Description: Aruek +Added: 2009-07-29 +%% +Type: language +Subtag: aus +Description: Australian languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: aut +Description: Austral +Added: 2009-07-29 +%% +Type: language +Subtag: auu +Description: Auye +Added: 2009-07-29 +%% +Type: language +Subtag: auw +Description: Awyi +Added: 2009-07-29 +%% +Type: language +Subtag: aux +Description: Aurá +Added: 2009-07-29 +%% +Type: language +Subtag: auy +Description: Awiyaana +Added: 2009-07-29 +%% +Type: language +Subtag: auz +Description: Uzbeki Arabic +Added: 2009-07-29 +Macrolanguage: ar +%% +Type: language +Subtag: avb +Description: Avau +Added: 2009-07-29 +%% +Type: language +Subtag: avd +Description: Alviri-Vidari +Added: 2009-07-29 +%% +Type: language +Subtag: avi +Description: Avikam +Added: 2009-07-29 +%% +Type: language +Subtag: avk +Description: Kotava +Added: 2009-07-29 +%% +Type: language +Subtag: avl +Description: Eastern Egyptian Bedawi Arabic +Added: 2009-07-29 +Macrolanguage: ar +%% +Type: language +Subtag: avm +Description: Angkamuthi +Added: 2012-08-12 +%% +Type: language +Subtag: avn +Description: Avatime +Added: 2009-07-29 +%% +Type: language +Subtag: avo +Description: Agavotaguerra +Added: 2009-07-29 +%% +Type: language +Subtag: avs +Description: Aushiri +Added: 2009-07-29 +%% +Type: language +Subtag: avt +Description: Au +Added: 2009-07-29 +%% +Type: language +Subtag: avu +Description: Avokaya +Added: 2009-07-29 +%% +Type: language +Subtag: avv +Description: Avá-Canoeiro +Added: 2009-07-29 +%% +Type: language +Subtag: awa +Description: Awadhi +Added: 2005-10-16 +%% +Type: language +Subtag: awb +Description: Awa (Papua New Guinea) +Added: 2009-07-29 +%% +Type: language +Subtag: awc +Description: Cicipu +Added: 2009-07-29 +%% +Type: language +Subtag: awd +Description: Arawakan languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: awe +Description: Awetí +Added: 2009-07-29 +%% +Type: language +Subtag: awg +Description: Anguthimri +Added: 2012-08-12 +%% +Type: language +Subtag: awh +Description: Awbono +Added: 2009-07-29 +%% +Type: language +Subtag: awi +Description: Aekyom +Added: 2009-07-29 +%% +Type: language +Subtag: awk +Description: Awabakal +Added: 2009-07-29 +%% +Type: language +Subtag: awm +Description: Arawum +Added: 2009-07-29 +%% +Type: language +Subtag: awn +Description: Awngi +Added: 2009-07-29 +%% +Type: language +Subtag: awo +Description: Awak +Added: 2009-07-29 +%% +Type: language +Subtag: awr +Description: Awera +Added: 2009-07-29 +%% +Type: language +Subtag: aws +Description: South Awyu +Added: 2009-07-29 +%% +Type: language +Subtag: awt +Description: Araweté +Added: 2009-07-29 +%% +Type: language +Subtag: awu +Description: Central Awyu +Added: 2009-07-29 +%% +Type: language +Subtag: awv +Description: Jair Awyu +Added: 2009-07-29 +%% +Type: language +Subtag: aww +Description: Awun +Added: 2009-07-29 +%% +Type: language +Subtag: awx +Description: Awara +Added: 2009-07-29 +%% +Type: language +Subtag: awy +Description: Edera Awyu +Added: 2009-07-29 +%% +Type: language +Subtag: axb +Description: Abipon +Added: 2009-07-29 +%% +Type: language +Subtag: axe +Description: Ayerrerenge +Added: 2012-08-12 +%% +Type: language +Subtag: axg +Description: Mato Grosso Arára +Added: 2009-07-29 +%% +Type: language +Subtag: axk +Description: Yaka (Central African Republic) +Added: 2009-07-29 +%% +Type: language +Subtag: axm +Description: Middle Armenian +Added: 2009-07-29 +%% +Type: language +Subtag: axx +Description: Xaragure +Added: 2009-07-29 +%% +Type: language +Subtag: aya +Description: Awar +Added: 2009-07-29 +%% +Type: language +Subtag: ayb +Description: Ayizo Gbe +Added: 2009-07-29 +%% +Type: language +Subtag: ayc +Description: Southern Aymara +Added: 2009-07-29 +Macrolanguage: ay +%% +Type: language +Subtag: ayd +Description: Ayabadhu +Added: 2009-07-29 +%% +Type: language +Subtag: aye +Description: Ayere +Added: 2009-07-29 +%% +Type: language +Subtag: ayg +Description: Ginyanga +Added: 2009-07-29 +%% +Type: language +Subtag: ayh +Description: Hadrami Arabic +Added: 2009-07-29 +Macrolanguage: ar +%% +Type: language +Subtag: ayi +Description: Leyigha +Added: 2009-07-29 +%% +Type: language +Subtag: ayk +Description: Akuku +Added: 2009-07-29 +%% +Type: language +Subtag: ayl +Description: Libyan Arabic +Added: 2009-07-29 +Macrolanguage: ar +%% +Type: language +Subtag: ayn +Description: Sanaani Arabic +Added: 2009-07-29 +Macrolanguage: ar +%% +Type: language +Subtag: ayo +Description: Ayoreo +Added: 2009-07-29 +%% +Type: language +Subtag: ayp +Description: North Mesopotamian Arabic +Added: 2009-07-29 +Macrolanguage: ar +%% +Type: language +Subtag: ayq +Description: Ayi (Papua New Guinea) +Added: 2009-07-29 +%% +Type: language +Subtag: ayr +Description: Central Aymara +Added: 2009-07-29 +Macrolanguage: ay +%% +Type: language +Subtag: ays +Description: Sorsogon Ayta +Added: 2009-07-29 +%% +Type: language +Subtag: ayt +Description: Magbukun Ayta +Added: 2009-07-29 +%% +Type: language +Subtag: ayu +Description: Ayu +Added: 2009-07-29 +%% +Type: language +Subtag: ayx +Description: Ayi (China) +Added: 2009-07-29 +Deprecated: 2011-08-16 +Preferred-Value: nun +%% +Type: language +Subtag: ayy +Description: Tayabas Ayta +Added: 2009-07-29 +%% +Type: language +Subtag: ayz +Description: Mai Brat +Added: 2009-07-29 +%% +Type: language +Subtag: aza +Description: Azha +Added: 2009-07-29 +%% +Type: language +Subtag: azb +Description: South Azerbaijani +Added: 2009-07-29 +Macrolanguage: az +%% +Type: language +Subtag: azc +Description: Uto-Aztecan languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: azd +Description: Eastern Durango Nahuatl +Added: 2012-08-12 +%% +Type: language +Subtag: azg +Description: San Pedro Amuzgos Amuzgo +Added: 2009-07-29 +%% +Type: language +Subtag: azj +Description: North Azerbaijani +Added: 2009-07-29 +Macrolanguage: az +%% +Type: language +Subtag: azm +Description: Ipalapa Amuzgo +Added: 2009-07-29 +%% +Type: language +Subtag: azn +Description: Western Durango Nahuatl +Added: 2012-08-12 +%% +Type: language +Subtag: azo +Description: Awing +Added: 2009-07-29 +%% +Type: language +Subtag: azt +Description: Faire Atta +Added: 2009-07-29 +%% +Type: language +Subtag: azz +Description: Highland Puebla Nahuatl +Added: 2009-07-29 +%% +Type: language +Subtag: baa +Description: Babatana +Added: 2009-07-29 +%% +Type: language +Subtag: bab +Description: Bainouk-Gunyuño +Added: 2009-07-29 +%% +Type: language +Subtag: bac +Description: Badui +Added: 2009-07-29 +%% +Type: language +Subtag: bad +Description: Banda languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: bae +Description: Baré +Added: 2009-07-29 +%% +Type: language +Subtag: baf +Description: Nubaca +Added: 2009-07-29 +%% +Type: language +Subtag: bag +Description: Tuki +Added: 2009-07-29 +%% +Type: language +Subtag: bah +Description: Bahamas Creole English +Added: 2009-07-29 +%% +Type: language +Subtag: bai +Description: Bamileke languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: baj +Description: Barakai +Added: 2009-07-29 +%% +Type: language +Subtag: bal +Description: Baluchi +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: ban +Description: Balinese +Added: 2005-10-16 +%% +Type: language +Subtag: bao +Description: Waimaha +Added: 2009-07-29 +%% +Type: language +Subtag: bap +Description: Bantawa +Added: 2009-07-29 +%% +Type: language +Subtag: bar +Description: Bavarian +Added: 2009-07-29 +%% +Type: language +Subtag: bas +Description: Basa (Cameroon) +Added: 2005-10-16 +%% +Type: language +Subtag: bat +Description: Baltic languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: bau +Description: Bada (Nigeria) +Added: 2009-07-29 +%% +Type: language +Subtag: bav +Description: Vengo +Added: 2009-07-29 +%% +Type: language +Subtag: baw +Description: Bambili-Bambui +Added: 2009-07-29 +%% +Type: language +Subtag: bax +Description: Bamun +Added: 2009-07-29 +%% +Type: language +Subtag: bay +Description: Batuley +Added: 2009-07-29 +%% +Type: language +Subtag: baz +Description: Tunen +Added: 2009-07-29 +Deprecated: 2012-08-12 +Comments: see nvo, tvu +%% +Type: language +Subtag: bba +Description: Baatonum +Added: 2009-07-29 +%% +Type: language +Subtag: bbb +Description: Barai +Added: 2009-07-29 +%% +Type: language +Subtag: bbc +Description: Batak Toba +Added: 2009-07-29 +%% +Type: language +Subtag: bbd +Description: Bau +Added: 2009-07-29 +%% +Type: language +Subtag: bbe +Description: Bangba +Added: 2009-07-29 +%% +Type: language +Subtag: bbf +Description: Baibai +Added: 2009-07-29 +%% +Type: language +Subtag: bbg +Description: Barama +Added: 2009-07-29 +%% +Type: language +Subtag: bbh +Description: Bugan +Added: 2009-07-29 +%% +Type: language +Subtag: bbi +Description: Barombi +Added: 2009-07-29 +%% +Type: language +Subtag: bbj +Description: Ghomálá' +Added: 2009-07-29 +%% +Type: language +Subtag: bbk +Description: Babanki +Added: 2009-07-29 +%% +Type: language +Subtag: bbl +Description: Bats +Added: 2009-07-29 +%% +Type: language +Subtag: bbm +Description: Babango +Added: 2009-07-29 +%% +Type: language +Subtag: bbn +Description: Uneapa +Added: 2009-07-29 +%% +Type: language +Subtag: bbo +Description: Northern Bobo Madaré +Description: Konabéré +Added: 2009-07-29 +%% +Type: language +Subtag: bbp +Description: West Central Banda +Added: 2009-07-29 +%% +Type: language +Subtag: bbq +Description: Bamali +Added: 2009-07-29 +%% +Type: language +Subtag: bbr +Description: Girawa +Added: 2009-07-29 +%% +Type: language +Subtag: bbs +Description: Bakpinka +Added: 2009-07-29 +%% +Type: language +Subtag: bbt +Description: Mburku +Added: 2009-07-29 +%% +Type: language +Subtag: bbu +Description: Kulung (Nigeria) +Added: 2009-07-29 +%% +Type: language +Subtag: bbv +Description: Karnai +Added: 2009-07-29 +%% +Type: language +Subtag: bbw +Description: Baba +Added: 2009-07-29 +%% +Type: language +Subtag: bbx +Description: Bubia +Added: 2009-07-29 +%% +Type: language +Subtag: bby +Description: Befang +Added: 2009-07-29 +%% +Type: language +Subtag: bbz +Description: Babalia Creole Arabic +Added: 2009-07-29 +Macrolanguage: ar +%% +Type: language +Subtag: bca +Description: Central Bai +Added: 2009-07-29 +%% +Type: language +Subtag: bcb +Description: Bainouk-Samik +Added: 2009-07-29 +%% +Type: language +Subtag: bcc +Description: Southern Balochi +Added: 2009-07-29 +Macrolanguage: bal +%% +Type: language +Subtag: bcd +Description: North Babar +Added: 2009-07-29 +%% +Type: language +Subtag: bce +Description: Bamenyam +Added: 2009-07-29 +%% +Type: language +Subtag: bcf +Description: Bamu +Added: 2009-07-29 +%% +Type: language +Subtag: bcg +Description: Baga Binari +Added: 2009-07-29 +%% +Type: language +Subtag: bch +Description: Bariai +Added: 2009-07-29 +%% +Type: language +Subtag: bci +Description: Baoulé +Added: 2009-07-29 +%% +Type: language +Subtag: bcj +Description: Bardi +Added: 2009-07-29 +%% +Type: language +Subtag: bck +Description: Bunaba +Added: 2009-07-29 +%% +Type: language +Subtag: bcl +Description: Central Bikol +Added: 2009-07-29 +Macrolanguage: bik +%% +Type: language +Subtag: bcm +Description: Bannoni +Added: 2009-07-29 +%% +Type: language +Subtag: bcn +Description: Bali (Nigeria) +Added: 2009-07-29 +%% +Type: language +Subtag: bco +Description: Kaluli +Added: 2009-07-29 +%% +Type: language +Subtag: bcp +Description: Bali (Democratic Republic of Congo) +Added: 2009-07-29 +%% +Type: language +Subtag: bcq +Description: Bench +Added: 2009-07-29 +%% +Type: language +Subtag: bcr +Description: Babine +Added: 2009-07-29 +%% +Type: language +Subtag: bcs +Description: Kohumono +Added: 2009-07-29 +%% +Type: language +Subtag: bct +Description: Bendi +Added: 2009-07-29 +%% +Type: language +Subtag: bcu +Description: Awad Bing +Added: 2009-07-29 +%% +Type: language +Subtag: bcv +Description: Shoo-Minda-Nye +Added: 2009-07-29 +%% +Type: language +Subtag: bcw +Description: Bana +Added: 2009-07-29 +%% +Type: language +Subtag: bcy +Description: Bacama +Added: 2009-07-29 +%% +Type: language +Subtag: bcz +Description: Bainouk-Gunyaamolo +Added: 2009-07-29 +%% +Type: language +Subtag: bda +Description: Bayot +Added: 2009-07-29 +%% +Type: language +Subtag: bdb +Description: Basap +Added: 2009-07-29 +%% +Type: language +Subtag: bdc +Description: Emberá-Baudó +Added: 2009-07-29 +%% +Type: language +Subtag: bdd +Description: Bunama +Added: 2009-07-29 +%% +Type: language +Subtag: bde +Description: Bade +Added: 2009-07-29 +%% +Type: language +Subtag: bdf +Description: Biage +Added: 2010-03-11 +%% +Type: language +Subtag: bdg +Description: Bonggi +Added: 2009-07-29 +%% +Type: language +Subtag: bdh +Description: Baka (Sudan) +Added: 2009-07-29 +%% +Type: language +Subtag: bdi +Description: Burun +Added: 2009-07-29 +%% +Type: language +Subtag: bdj +Description: Bai +Added: 2009-07-29 +%% +Type: language +Subtag: bdk +Description: Budukh +Added: 2009-07-29 +%% +Type: language +Subtag: bdl +Description: Indonesian Bajau +Added: 2009-07-29 +%% +Type: language +Subtag: bdm +Description: Buduma +Added: 2009-07-29 +%% +Type: language +Subtag: bdn +Description: Baldemu +Added: 2009-07-29 +%% +Type: language +Subtag: bdo +Description: Morom +Added: 2009-07-29 +%% +Type: language +Subtag: bdp +Description: Bende +Added: 2009-07-29 +%% +Type: language +Subtag: bdq +Description: Bahnar +Added: 2009-07-29 +%% +Type: language +Subtag: bdr +Description: West Coast Bajau +Added: 2009-07-29 +%% +Type: language +Subtag: bds +Description: Burunge +Added: 2009-07-29 +%% +Type: language +Subtag: bdt +Description: Bokoto +Added: 2009-07-29 +Macrolanguage: gba +%% +Type: language +Subtag: bdu +Description: Oroko +Added: 2009-07-29 +%% +Type: language +Subtag: bdv +Description: Bodo Parja +Added: 2009-07-29 +%% +Type: language +Subtag: bdw +Description: Baham +Added: 2009-07-29 +%% +Type: language +Subtag: bdx +Description: Budong-Budong +Added: 2009-07-29 +%% +Type: language +Subtag: bdy +Description: Bandjalang +Added: 2009-07-29 +%% +Type: language +Subtag: bdz +Description: Badeshi +Added: 2009-07-29 +%% +Type: language +Subtag: bea +Description: Beaver +Added: 2009-07-29 +%% +Type: language +Subtag: beb +Description: Bebele +Added: 2009-07-29 +%% +Type: language +Subtag: bec +Description: Iceve-Maci +Added: 2009-07-29 +%% +Type: language +Subtag: bed +Description: Bedoanas +Added: 2009-07-29 +%% +Type: language +Subtag: bee +Description: Byangsi +Added: 2009-07-29 +%% +Type: language +Subtag: bef +Description: Benabena +Added: 2009-07-29 +%% +Type: language +Subtag: beg +Description: Belait +Added: 2009-07-29 +%% +Type: language +Subtag: beh +Description: Biali +Added: 2009-07-29 +%% +Type: language +Subtag: bei +Description: Bekati' +Added: 2009-07-29 +%% +Type: language +Subtag: bej +Description: Beja +Description: Bedawiyet +Added: 2005-10-16 +%% +Type: language +Subtag: bek +Description: Bebeli +Added: 2009-07-29 +%% +Type: language +Subtag: bem +Description: Bemba (Zambia) +Added: 2005-10-16 +%% +Type: language +Subtag: beo +Description: Beami +Added: 2009-07-29 +%% +Type: language +Subtag: bep +Description: Besoa +Added: 2009-07-29 +%% +Type: language +Subtag: beq +Description: Beembe +Added: 2009-07-29 +%% +Type: language +Subtag: ber +Description: Berber languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: bes +Description: Besme +Added: 2009-07-29 +%% +Type: language +Subtag: bet +Description: Guiberoua Béte +Added: 2009-07-29 +%% +Type: language +Subtag: beu +Description: Blagar +Added: 2009-07-29 +%% +Type: language +Subtag: bev +Description: Daloa Bété +Added: 2009-07-29 +%% +Type: language +Subtag: bew +Description: Betawi +Added: 2009-07-29 +%% +Type: language +Subtag: bex +Description: Jur Modo +Added: 2009-07-29 +%% +Type: language +Subtag: bey +Description: Beli (Papua New Guinea) +Added: 2009-07-29 +%% +Type: language +Subtag: bez +Description: Bena (Tanzania) +Added: 2009-07-29 +%% +Type: language +Subtag: bfa +Description: Bari +Added: 2009-07-29 +%% +Type: language +Subtag: bfb +Description: Pauri Bareli +Added: 2009-07-29 +%% +Type: language +Subtag: bfc +Description: Northern Bai +Added: 2009-07-29 +%% +Type: language +Subtag: bfd +Description: Bafut +Added: 2009-07-29 +%% +Type: language +Subtag: bfe +Description: Betaf +Description: Tena +Added: 2009-07-29 +%% +Type: language +Subtag: bff +Description: Bofi +Added: 2009-07-29 +%% +Type: language +Subtag: bfg +Description: Busang Kayan +Added: 2009-07-29 +%% +Type: language +Subtag: bfh +Description: Blafe +Added: 2009-07-29 +%% +Type: language +Subtag: bfi +Description: British Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: bfj +Description: Bafanji +Added: 2009-07-29 +%% +Type: language +Subtag: bfk +Description: Ban Khor Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: bfl +Description: Banda-Ndélé +Added: 2009-07-29 +%% +Type: language +Subtag: bfm +Description: Mmen +Added: 2009-07-29 +%% +Type: language +Subtag: bfn +Description: Bunak +Added: 2009-07-29 +%% +Type: language +Subtag: bfo +Description: Malba Birifor +Added: 2009-07-29 +%% +Type: language +Subtag: bfp +Description: Beba +Added: 2009-07-29 +%% +Type: language +Subtag: bfq +Description: Badaga +Added: 2009-07-29 +%% +Type: language +Subtag: bfr +Description: Bazigar +Added: 2009-07-29 +%% +Type: language +Subtag: bfs +Description: Southern Bai +Added: 2009-07-29 +%% +Type: language +Subtag: bft +Description: Balti +Added: 2009-07-29 +%% +Type: language +Subtag: bfu +Description: Gahri +Added: 2009-07-29 +%% +Type: language +Subtag: bfw +Description: Bondo +Added: 2009-07-29 +%% +Type: language +Subtag: bfx +Description: Bantayanon +Added: 2010-03-11 +%% +Type: language +Subtag: bfy +Description: Bagheli +Added: 2009-07-29 +%% +Type: language +Subtag: bfz +Description: Mahasu Pahari +Added: 2009-07-29 +%% +Type: language +Subtag: bga +Description: Gwamhi-Wuri +Added: 2009-07-29 +%% +Type: language +Subtag: bgb +Description: Bobongko +Added: 2009-07-29 +%% +Type: language +Subtag: bgc +Description: Haryanvi +Added: 2009-07-29 +%% +Type: language +Subtag: bgd +Description: Rathwi Bareli +Added: 2009-07-29 +%% +Type: language +Subtag: bge +Description: Bauria +Added: 2009-07-29 +%% +Type: language +Subtag: bgf +Description: Bangandu +Added: 2009-07-29 +%% +Type: language +Subtag: bgg +Description: Bugun +Added: 2009-07-29 +%% +Type: language +Subtag: bgi +Description: Giangan +Added: 2009-07-29 +%% +Type: language +Subtag: bgj +Description: Bangolan +Added: 2009-07-29 +%% +Type: language +Subtag: bgk +Description: Bit +Description: Buxinhua +Added: 2009-07-29 +%% +Type: language +Subtag: bgl +Description: Bo (Laos) +Added: 2009-07-29 +%% +Type: language +Subtag: bgm +Description: Baga Mboteni +Added: 2009-07-29 +%% +Type: language +Subtag: bgn +Description: Western Balochi +Added: 2009-07-29 +Macrolanguage: bal +%% +Type: language +Subtag: bgo +Description: Baga Koga +Added: 2009-07-29 +%% +Type: language +Subtag: bgp +Description: Eastern Balochi +Added: 2009-07-29 +Macrolanguage: bal +%% +Type: language +Subtag: bgq +Description: Bagri +Added: 2009-07-29 +Macrolanguage: raj +%% +Type: language +Subtag: bgr +Description: Bawm Chin +Added: 2009-07-29 +%% +Type: language +Subtag: bgs +Description: Tagabawa +Added: 2009-07-29 +%% +Type: language +Subtag: bgt +Description: Bughotu +Added: 2009-07-29 +%% +Type: language +Subtag: bgu +Description: Mbongno +Added: 2009-07-29 +%% +Type: language +Subtag: bgv +Description: Warkay-Bipim +Added: 2009-07-29 +%% +Type: language +Subtag: bgw +Description: Bhatri +Added: 2009-07-29 +%% +Type: language +Subtag: bgx +Description: Balkan Gagauz Turkish +Added: 2009-07-29 +%% +Type: language +Subtag: bgy +Description: Benggoi +Added: 2009-07-29 +%% +Type: language +Subtag: bgz +Description: Banggai +Added: 2009-07-29 +%% +Type: language +Subtag: bha +Description: Bharia +Added: 2009-07-29 +%% +Type: language +Subtag: bhb +Description: Bhili +Added: 2009-07-29 +%% +Type: language +Subtag: bhc +Description: Biga +Added: 2009-07-29 +%% +Type: language +Subtag: bhd +Description: Bhadrawahi +Added: 2009-07-29 +%% +Type: language +Subtag: bhe +Description: Bhaya +Added: 2009-07-29 +%% +Type: language +Subtag: bhf +Description: Odiai +Added: 2009-07-29 +%% +Type: language +Subtag: bhg +Description: Binandere +Added: 2009-07-29 +%% +Type: language +Subtag: bhh +Description: Bukharic +Added: 2009-07-29 +%% +Type: language +Subtag: bhi +Description: Bhilali +Added: 2009-07-29 +%% +Type: language +Subtag: bhj +Description: Bahing +Added: 2009-07-29 +%% +Type: language +Subtag: bhk +Description: Albay Bicolano +Added: 2009-07-29 +Deprecated: 2010-03-11 +Macrolanguage: bik +Comments: see fbl, lbl, rbl, ubl +%% +Type: language +Subtag: bhl +Description: Bimin +Added: 2009-07-29 +%% +Type: language +Subtag: bhm +Description: Bathari +Added: 2009-07-29 +%% +Type: language +Subtag: bhn +Description: Bohtan Neo-Aramaic +Added: 2009-07-29 +%% +Type: language +Subtag: bho +Description: Bhojpuri +Added: 2005-10-16 +%% +Type: language +Subtag: bhp +Description: Bima +Added: 2009-07-29 +%% +Type: language +Subtag: bhq +Description: Tukang Besi South +Added: 2009-07-29 +%% +Type: language +Subtag: bhr +Description: Bara Malagasy +Added: 2009-07-29 +Macrolanguage: mg +%% +Type: language +Subtag: bhs +Description: Buwal +Added: 2009-07-29 +%% +Type: language +Subtag: bht +Description: Bhattiyali +Added: 2009-07-29 +%% +Type: language +Subtag: bhu +Description: Bhunjia +Added: 2009-07-29 +%% +Type: language +Subtag: bhv +Description: Bahau +Added: 2009-07-29 +%% +Type: language +Subtag: bhw +Description: Biak +Added: 2009-07-29 +%% +Type: language +Subtag: bhx +Description: Bhalay +Added: 2009-07-29 +%% +Type: language +Subtag: bhy +Description: Bhele +Added: 2009-07-29 +%% +Type: language +Subtag: bhz +Description: Bada (Indonesia) +Added: 2009-07-29 +%% +Type: language +Subtag: bia +Description: Badimaya +Added: 2009-07-29 +%% +Type: language +Subtag: bib +Description: Bissa +Description: Bisa +Added: 2009-07-29 +%% +Type: language +Subtag: bic +Description: Bikaru +Added: 2009-07-29 +%% +Type: language +Subtag: bid +Description: Bidiyo +Added: 2009-07-29 +%% +Type: language +Subtag: bie +Description: Bepour +Added: 2009-07-29 +%% +Type: language +Subtag: bif +Description: Biafada +Added: 2009-07-29 +%% +Type: language +Subtag: big +Description: Biangai +Added: 2009-07-29 +%% +Type: language +Subtag: bij +Description: Vaghat-Ya-Bijim-Legeri +Added: 2009-07-29 +%% +Type: language +Subtag: bik +Description: Bikol +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: bil +Description: Bile +Added: 2009-07-29 +%% +Type: language +Subtag: bim +Description: Bimoba +Added: 2009-07-29 +%% +Type: language +Subtag: bin +Description: Bini +Description: Edo +Added: 2005-10-16 +%% +Type: language +Subtag: bio +Description: Nai +Added: 2009-07-29 +%% +Type: language +Subtag: bip +Description: Bila +Added: 2009-07-29 +%% +Type: language +Subtag: biq +Description: Bipi +Added: 2009-07-29 +%% +Type: language +Subtag: bir +Description: Bisorio +Added: 2009-07-29 +%% +Type: language +Subtag: bit +Description: Berinomo +Added: 2009-07-29 +%% +Type: language +Subtag: biu +Description: Biete +Added: 2009-07-29 +%% +Type: language +Subtag: biv +Description: Southern Birifor +Added: 2009-07-29 +%% +Type: language +Subtag: biw +Description: Kol (Cameroon) +Added: 2009-07-29 +%% +Type: language +Subtag: bix +Description: Bijori +Added: 2009-07-29 +%% +Type: language +Subtag: biy +Description: Birhor +Added: 2009-07-29 +%% +Type: language +Subtag: biz +Description: Baloi +Added: 2009-07-29 +%% +Type: language +Subtag: bja +Description: Budza +Added: 2009-07-29 +%% +Type: language +Subtag: bjb +Description: Banggarla +Added: 2009-07-29 +%% +Type: language +Subtag: bjc +Description: Bariji +Added: 2009-07-29 +%% +Type: language +Subtag: bjd +Description: Bandjigali +Added: 2009-07-29 +Deprecated: 2012-08-12 +Preferred-Value: drl +%% +Type: language +Subtag: bje +Description: Biao-Jiao Mien +Added: 2009-07-29 +%% +Type: language +Subtag: bjf +Description: Barzani Jewish Neo-Aramaic +Added: 2009-07-29 +%% +Type: language +Subtag: bjg +Description: Bidyogo +Added: 2009-07-29 +%% +Type: language +Subtag: bjh +Description: Bahinemo +Added: 2009-07-29 +%% +Type: language +Subtag: bji +Description: Burji +Added: 2009-07-29 +%% +Type: language +Subtag: bjj +Description: Kanauji +Added: 2009-07-29 +%% +Type: language +Subtag: bjk +Description: Barok +Added: 2009-07-29 +%% +Type: language +Subtag: bjl +Description: Bulu (Papua New Guinea) +Added: 2009-07-29 +%% +Type: language +Subtag: bjm +Description: Bajelani +Added: 2009-07-29 +%% +Type: language +Subtag: bjn +Description: Banjar +Added: 2009-07-29 +Macrolanguage: ms +%% +Type: language +Subtag: bjo +Description: Mid-Southern Banda +Added: 2009-07-29 +%% +Type: language +Subtag: bjq +Description: Southern Betsimisaraka Malagasy +Added: 2009-07-29 +Deprecated: 2011-08-16 +Macrolanguage: mg +Comments: see bzc, tkg +%% +Type: language +Subtag: bjr +Description: Binumarien +Added: 2009-07-29 +%% +Type: language +Subtag: bjs +Description: Bajan +Added: 2009-07-29 +%% +Type: language +Subtag: bjt +Description: Balanta-Ganja +Added: 2009-07-29 +%% +Type: language +Subtag: bju +Description: Busuu +Added: 2009-07-29 +%% +Type: language +Subtag: bjv +Description: Bedjond +Added: 2009-07-29 +%% +Type: language +Subtag: bjw +Description: Bakwé +Added: 2009-07-29 +%% +Type: language +Subtag: bjx +Description: Banao Itneg +Added: 2009-07-29 +%% +Type: language +Subtag: bjy +Description: Bayali +Added: 2009-07-29 +%% +Type: language +Subtag: bjz +Description: Baruga +Added: 2009-07-29 +%% +Type: language +Subtag: bka +Description: Kyak +Added: 2009-07-29 +%% +Type: language +Subtag: bkb +Description: Finallig +Added: 2009-07-29 +Deprecated: 2010-03-11 +Comments: see ebk, obk +%% +Type: language +Subtag: bkc +Description: Baka (Cameroon) +Added: 2009-07-29 +%% +Type: language +Subtag: bkd +Description: Binukid +Description: Talaandig +Added: 2009-07-29 +%% +Type: language +Subtag: bkf +Description: Beeke +Added: 2009-07-29 +%% +Type: language +Subtag: bkg +Description: Buraka +Added: 2009-07-29 +%% +Type: language +Subtag: bkh +Description: Bakoko +Added: 2009-07-29 +%% +Type: language +Subtag: bki +Description: Baki +Added: 2009-07-29 +%% +Type: language +Subtag: bkj +Description: Pande +Added: 2009-07-29 +%% +Type: language +Subtag: bkk +Description: Brokskat +Added: 2009-07-29 +%% +Type: language +Subtag: bkl +Description: Berik +Added: 2009-07-29 +%% +Type: language +Subtag: bkm +Description: Kom (Cameroon) +Added: 2009-07-29 +%% +Type: language +Subtag: bkn +Description: Bukitan +Added: 2009-07-29 +%% +Type: language +Subtag: bko +Description: Kwa' +Added: 2009-07-29 +%% +Type: language +Subtag: bkp +Description: Boko (Democratic Republic of Congo) +Added: 2009-07-29 +%% +Type: language +Subtag: bkq +Description: Bakairí +Added: 2009-07-29 +%% +Type: language +Subtag: bkr +Description: Bakumpai +Added: 2009-07-29 +%% +Type: language +Subtag: bks +Description: Northern Sorsoganon +Added: 2009-07-29 +%% +Type: language +Subtag: bkt +Description: Boloki +Added: 2009-07-29 +%% +Type: language +Subtag: bku +Description: Buhid +Added: 2009-07-29 +%% +Type: language +Subtag: bkv +Description: Bekwarra +Added: 2009-07-29 +%% +Type: language +Subtag: bkw +Description: Bekwel +Added: 2009-07-29 +%% +Type: language +Subtag: bkx +Description: Baikeno +Added: 2009-07-29 +%% +Type: language +Subtag: bky +Description: Bokyi +Added: 2009-07-29 +%% +Type: language +Subtag: bkz +Description: Bungku +Added: 2009-07-29 +%% +Type: language +Subtag: bla +Description: Siksika +Added: 2005-10-16 +%% +Type: language +Subtag: blb +Description: Bilua +Added: 2009-07-29 +%% +Type: language +Subtag: blc +Description: Bella Coola +Added: 2009-07-29 +%% +Type: language +Subtag: bld +Description: Bolango +Added: 2009-07-29 +%% +Type: language +Subtag: ble +Description: Balanta-Kentohe +Added: 2009-07-29 +%% +Type: language +Subtag: blf +Description: Buol +Added: 2009-07-29 +%% +Type: language +Subtag: blg +Description: Balau +Added: 2009-07-29 +%% +Type: language +Subtag: blh +Description: Kuwaa +Added: 2009-07-29 +%% +Type: language +Subtag: bli +Description: Bolia +Added: 2009-07-29 +%% +Type: language +Subtag: blj +Description: Bolongan +Added: 2009-07-29 +%% +Type: language +Subtag: blk +Description: Pa'o Karen +Description: Pa'O +Added: 2009-07-29 +%% +Type: language +Subtag: bll +Description: Biloxi +Added: 2009-07-29 +%% +Type: language +Subtag: blm +Description: Beli (Sudan) +Added: 2009-07-29 +%% +Type: language +Subtag: bln +Description: Southern Catanduanes Bikol +Added: 2009-07-29 +Macrolanguage: bik +%% +Type: language +Subtag: blo +Description: Anii +Added: 2009-07-29 +%% +Type: language +Subtag: blp +Description: Blablanga +Added: 2009-07-29 +%% +Type: language +Subtag: blq +Description: Baluan-Pam +Added: 2009-07-29 +%% +Type: language +Subtag: blr +Description: Blang +Added: 2009-07-29 +%% +Type: language +Subtag: bls +Description: Balaesang +Added: 2009-07-29 +%% +Type: language +Subtag: blt +Description: Tai Dam +Added: 2009-07-29 +%% +Type: language +Subtag: blv +Description: Bolo +Added: 2009-07-29 +%% +Type: language +Subtag: blw +Description: Balangao +Added: 2009-07-29 +%% +Type: language +Subtag: blx +Description: Mag-Indi Ayta +Added: 2009-07-29 +%% +Type: language +Subtag: bly +Description: Notre +Added: 2009-07-29 +%% +Type: language +Subtag: blz +Description: Balantak +Added: 2009-07-29 +%% +Type: language +Subtag: bma +Description: Lame +Added: 2009-07-29 +%% +Type: language +Subtag: bmb +Description: Bembe +Added: 2009-07-29 +%% +Type: language +Subtag: bmc +Description: Biem +Added: 2009-07-29 +%% +Type: language +Subtag: bmd +Description: Baga Manduri +Added: 2009-07-29 +%% +Type: language +Subtag: bme +Description: Limassa +Added: 2009-07-29 +%% +Type: language +Subtag: bmf +Description: Bom +Added: 2009-07-29 +%% +Type: language +Subtag: bmg +Description: Bamwe +Added: 2009-07-29 +%% +Type: language +Subtag: bmh +Description: Kein +Added: 2009-07-29 +%% +Type: language +Subtag: bmi +Description: Bagirmi +Added: 2009-07-29 +%% +Type: language +Subtag: bmj +Description: Bote-Majhi +Added: 2009-07-29 +%% +Type: language +Subtag: bmk +Description: Ghayavi +Added: 2009-07-29 +%% +Type: language +Subtag: bml +Description: Bomboli +Added: 2009-07-29 +%% +Type: language +Subtag: bmm +Description: Northern Betsimisaraka Malagasy +Added: 2009-07-29 +Macrolanguage: mg +%% +Type: language +Subtag: bmn +Description: Bina (Papua New Guinea) +Added: 2009-07-29 +%% +Type: language +Subtag: bmo +Description: Bambalang +Added: 2009-07-29 +%% +Type: language +Subtag: bmp +Description: Bulgebi +Added: 2009-07-29 +%% +Type: language +Subtag: bmq +Description: Bomu +Added: 2009-07-29 +%% +Type: language +Subtag: bmr +Description: Muinane +Added: 2009-07-29 +%% +Type: language +Subtag: bms +Description: Bilma Kanuri +Added: 2009-07-29 +%% +Type: language +Subtag: bmt +Description: Biao Mon +Added: 2009-07-29 +%% +Type: language +Subtag: bmu +Description: Somba-Siawari +Added: 2009-07-29 +%% +Type: language +Subtag: bmv +Description: Bum +Added: 2009-07-29 +%% +Type: language +Subtag: bmw +Description: Bomwali +Added: 2009-07-29 +%% +Type: language +Subtag: bmx +Description: Baimak +Added: 2009-07-29 +%% +Type: language +Subtag: bmy +Description: Bemba (Democratic Republic of Congo) +Added: 2009-07-29 +%% +Type: language +Subtag: bmz +Description: Baramu +Added: 2009-07-29 +%% +Type: language +Subtag: bna +Description: Bonerate +Added: 2009-07-29 +%% +Type: language +Subtag: bnb +Description: Bookan +Added: 2009-07-29 +%% +Type: language +Subtag: bnc +Description: Bontok +Added: 2009-07-29 +Scope: macrolanguage +%% +Type: language +Subtag: bnd +Description: Banda (Indonesia) +Added: 2009-07-29 +%% +Type: language +Subtag: bne +Description: Bintauna +Added: 2009-07-29 +%% +Type: language +Subtag: bnf +Description: Masiwang +Added: 2009-07-29 +%% +Type: language +Subtag: bng +Description: Benga +Added: 2009-07-29 +%% +Type: language +Subtag: bni +Description: Bangi +Added: 2009-07-29 +%% +Type: language +Subtag: bnj +Description: Eastern Tawbuid +Added: 2009-07-29 +%% +Type: language +Subtag: bnk +Description: Bierebo +Added: 2009-07-29 +%% +Type: language +Subtag: bnl +Description: Boon +Added: 2009-07-29 +%% +Type: language +Subtag: bnm +Description: Batanga +Added: 2009-07-29 +%% +Type: language +Subtag: bnn +Description: Bunun +Added: 2009-07-29 +%% +Type: language +Subtag: bno +Description: Bantoanon +Added: 2009-07-29 +%% +Type: language +Subtag: bnp +Description: Bola +Added: 2009-07-29 +%% +Type: language +Subtag: bnq +Description: Bantik +Added: 2009-07-29 +%% +Type: language +Subtag: bnr +Description: Butmas-Tur +Added: 2009-07-29 +%% +Type: language +Subtag: bns +Description: Bundeli +Added: 2009-07-29 +%% +Type: language +Subtag: bnt +Description: Bantu languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: bnu +Description: Bentong +Added: 2009-07-29 +%% +Type: language +Subtag: bnv +Description: Bonerif +Description: Beneraf +Description: Edwas +Added: 2009-07-29 +%% +Type: language +Subtag: bnw +Description: Bisis +Added: 2009-07-29 +%% +Type: language +Subtag: bnx +Description: Bangubangu +Added: 2009-07-29 +%% +Type: language +Subtag: bny +Description: Bintulu +Added: 2009-07-29 +%% +Type: language +Subtag: bnz +Description: Beezen +Added: 2009-07-29 +%% +Type: language +Subtag: boa +Description: Bora +Added: 2009-07-29 +%% +Type: language +Subtag: bob +Description: Aweer +Added: 2009-07-29 +%% +Type: language +Subtag: boe +Description: Mundabli +Added: 2009-07-29 +%% +Type: language +Subtag: bof +Description: Bolon +Added: 2009-07-29 +%% +Type: language +Subtag: bog +Description: Bamako Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: boh +Description: Boma +Added: 2009-07-29 +%% +Type: language +Subtag: boi +Description: Barbareño +Added: 2009-07-29 +%% +Type: language +Subtag: boj +Description: Anjam +Added: 2009-07-29 +%% +Type: language +Subtag: bok +Description: Bonjo +Added: 2009-07-29 +%% +Type: language +Subtag: bol +Description: Bole +Added: 2009-07-29 +%% +Type: language +Subtag: bom +Description: Berom +Added: 2009-07-29 +%% +Type: language +Subtag: bon +Description: Bine +Added: 2009-07-29 +%% +Type: language +Subtag: boo +Description: Tiemacèwè Bozo +Added: 2009-07-29 +%% +Type: language +Subtag: bop +Description: Bonkiman +Added: 2009-07-29 +%% +Type: language +Subtag: boq +Description: Bogaya +Added: 2009-07-29 +%% +Type: language +Subtag: bor +Description: Borôro +Added: 2009-07-29 +%% +Type: language +Subtag: bot +Description: Bongo +Added: 2009-07-29 +%% +Type: language +Subtag: bou +Description: Bondei +Added: 2009-07-29 +%% +Type: language +Subtag: bov +Description: Tuwuli +Added: 2009-07-29 +%% +Type: language +Subtag: bow +Description: Rema +Added: 2009-07-29 +%% +Type: language +Subtag: box +Description: Buamu +Added: 2009-07-29 +%% +Type: language +Subtag: boy +Description: Bodo (Central African Republic) +Added: 2009-07-29 +%% +Type: language +Subtag: boz +Description: Tiéyaxo Bozo +Added: 2009-07-29 +%% +Type: language +Subtag: bpa +Description: Dakaka +Added: 2009-07-29 +%% +Type: language +Subtag: bpb +Description: Barbacoas +Added: 2009-07-29 +%% +Type: language +Subtag: bpd +Description: Banda-Banda +Added: 2009-07-29 +%% +Type: language +Subtag: bpg +Description: Bonggo +Added: 2009-07-29 +%% +Type: language +Subtag: bph +Description: Botlikh +Added: 2009-07-29 +%% +Type: language +Subtag: bpi +Description: Bagupi +Added: 2009-07-29 +%% +Type: language +Subtag: bpj +Description: Binji +Added: 2009-07-29 +%% +Type: language +Subtag: bpk +Description: Orowe +Added: 2009-07-29 +%% +Type: language +Subtag: bpl +Description: Broome Pearling Lugger Pidgin +Added: 2009-07-29 +%% +Type: language +Subtag: bpm +Description: Biyom +Added: 2009-07-29 +%% +Type: language +Subtag: bpn +Description: Dzao Min +Added: 2009-07-29 +%% +Type: language +Subtag: bpo +Description: Anasi +Added: 2009-07-29 +%% +Type: language +Subtag: bpp +Description: Kaure +Added: 2009-07-29 +%% +Type: language +Subtag: bpq +Description: Banda Malay +Added: 2009-07-29 +%% +Type: language +Subtag: bpr +Description: Koronadal Blaan +Added: 2009-07-29 +%% +Type: language +Subtag: bps +Description: Sarangani Blaan +Added: 2009-07-29 +%% +Type: language +Subtag: bpt +Description: Barrow Point +Added: 2009-07-29 +%% +Type: language +Subtag: bpu +Description: Bongu +Added: 2009-07-29 +%% +Type: language +Subtag: bpv +Description: Bian Marind +Added: 2009-07-29 +%% +Type: language +Subtag: bpw +Description: Bo (Papua New Guinea) +Added: 2009-07-29 +%% +Type: language +Subtag: bpx +Description: Palya Bareli +Added: 2009-07-29 +%% +Type: language +Subtag: bpy +Description: Bishnupriya +Added: 2009-07-29 +%% +Type: language +Subtag: bpz +Description: Bilba +Added: 2009-07-29 +%% +Type: language +Subtag: bqa +Description: Tchumbuli +Added: 2009-07-29 +%% +Type: language +Subtag: bqb +Description: Bagusa +Added: 2009-07-29 +%% +Type: language +Subtag: bqc +Description: Boko (Benin) +Added: 2009-07-29 +%% +Type: language +Subtag: bqd +Description: Bung +Added: 2009-07-29 +%% +Type: language +Subtag: bqf +Description: Baga Kaloum +Added: 2009-07-29 +%% +Type: language +Subtag: bqg +Description: Bago-Kusuntu +Added: 2009-07-29 +%% +Type: language +Subtag: bqh +Description: Baima +Added: 2009-07-29 +%% +Type: language +Subtag: bqi +Description: Bakhtiari +Added: 2009-07-29 +%% +Type: language +Subtag: bqj +Description: Bandial +Added: 2009-07-29 +%% +Type: language +Subtag: bqk +Description: Banda-Mbrès +Added: 2009-07-29 +%% +Type: language +Subtag: bql +Description: Bilakura +Added: 2009-07-29 +%% +Type: language +Subtag: bqm +Description: Wumboko +Added: 2009-07-29 +%% +Type: language +Subtag: bqn +Description: Bulgarian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: bqo +Description: Balo +Added: 2009-07-29 +%% +Type: language +Subtag: bqp +Description: Busa +Added: 2009-07-29 +%% +Type: language +Subtag: bqq +Description: Biritai +Added: 2009-07-29 +%% +Type: language +Subtag: bqr +Description: Burusu +Added: 2009-07-29 +%% +Type: language +Subtag: bqs +Description: Bosngun +Added: 2009-07-29 +%% +Type: language +Subtag: bqt +Description: Bamukumbit +Added: 2009-07-29 +%% +Type: language +Subtag: bqu +Description: Boguru +Added: 2009-07-29 +%% +Type: language +Subtag: bqv +Description: Koro Wachi +Description: Begbere-Ejar +Added: 2009-07-29 +%% +Type: language +Subtag: bqw +Description: Buru (Nigeria) +Added: 2009-07-29 +%% +Type: language +Subtag: bqx +Description: Baangi +Added: 2009-07-29 +%% +Type: language +Subtag: bqy +Description: Bengkala Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: bqz +Description: Bakaka +Added: 2009-07-29 +%% +Type: language +Subtag: bra +Description: Braj +Added: 2005-10-16 +%% +Type: language +Subtag: brb +Description: Lave +Added: 2009-07-29 +%% +Type: language +Subtag: brc +Description: Berbice Creole Dutch +Added: 2009-07-29 +%% +Type: language +Subtag: brd +Description: Baraamu +Added: 2009-07-29 +%% +Type: language +Subtag: brf +Description: Bera +Added: 2009-07-29 +%% +Type: language +Subtag: brg +Description: Baure +Added: 2009-07-29 +%% +Type: language +Subtag: brh +Description: Brahui +Added: 2009-07-29 +%% +Type: language +Subtag: bri +Description: Mokpwe +Added: 2009-07-29 +%% +Type: language +Subtag: brj +Description: Bieria +Added: 2009-07-29 +%% +Type: language +Subtag: brk +Description: Birked +Added: 2009-07-29 +%% +Type: language +Subtag: brl +Description: Birwa +Added: 2009-07-29 +%% +Type: language +Subtag: brm +Description: Barambu +Added: 2009-07-29 +%% +Type: language +Subtag: brn +Description: Boruca +Added: 2009-07-29 +%% +Type: language +Subtag: bro +Description: Brokkat +Added: 2009-07-29 +%% +Type: language +Subtag: brp +Description: Barapasi +Added: 2009-07-29 +%% +Type: language +Subtag: brq +Description: Breri +Added: 2009-07-29 +%% +Type: language +Subtag: brr +Description: Birao +Added: 2009-07-29 +%% +Type: language +Subtag: brs +Description: Baras +Added: 2009-07-29 +%% +Type: language +Subtag: brt +Description: Bitare +Added: 2009-07-29 +%% +Type: language +Subtag: bru +Description: Eastern Bru +Added: 2009-07-29 +%% +Type: language +Subtag: brv +Description: Western Bru +Added: 2009-07-29 +%% +Type: language +Subtag: brw +Description: Bellari +Added: 2009-07-29 +%% +Type: language +Subtag: brx +Description: Bodo (India) +Added: 2009-07-29 +%% +Type: language +Subtag: bry +Description: Burui +Added: 2009-07-29 +%% +Type: language +Subtag: brz +Description: Bilbil +Added: 2009-07-29 +%% +Type: language +Subtag: bsa +Description: Abinomn +Added: 2009-07-29 +%% +Type: language +Subtag: bsb +Description: Brunei Bisaya +Added: 2009-07-29 +%% +Type: language +Subtag: bsc +Description: Bassari +Description: Oniyan +Added: 2009-07-29 +%% +Type: language +Subtag: bse +Description: Wushi +Added: 2009-07-29 +%% +Type: language +Subtag: bsf +Description: Bauchi +Added: 2009-07-29 +%% +Type: language +Subtag: bsg +Description: Bashkardi +Added: 2009-07-29 +%% +Type: language +Subtag: bsh +Description: Kati +Added: 2009-07-29 +%% +Type: language +Subtag: bsi +Description: Bassossi +Added: 2009-07-29 +%% +Type: language +Subtag: bsj +Description: Bangwinji +Added: 2009-07-29 +%% +Type: language +Subtag: bsk +Description: Burushaski +Added: 2009-07-29 +%% +Type: language +Subtag: bsl +Description: Basa-Gumna +Added: 2009-07-29 +%% +Type: language +Subtag: bsm +Description: Busami +Added: 2009-07-29 +%% +Type: language +Subtag: bsn +Description: Barasana-Eduria +Added: 2009-07-29 +%% +Type: language +Subtag: bso +Description: Buso +Added: 2009-07-29 +%% +Type: language +Subtag: bsp +Description: Baga Sitemu +Added: 2009-07-29 +%% +Type: language +Subtag: bsq +Description: Bassa +Added: 2009-07-29 +%% +Type: language +Subtag: bsr +Description: Bassa-Kontagora +Added: 2009-07-29 +%% +Type: language +Subtag: bss +Description: Akoose +Added: 2009-07-29 +%% +Type: language +Subtag: bst +Description: Basketo +Added: 2009-07-29 +%% +Type: language +Subtag: bsu +Description: Bahonsuai +Added: 2009-07-29 +%% +Type: language +Subtag: bsv +Description: Baga Sobané +Added: 2009-07-29 +%% +Type: language +Subtag: bsw +Description: Baiso +Added: 2009-07-29 +%% +Type: language +Subtag: bsx +Description: Yangkam +Added: 2009-07-29 +%% +Type: language +Subtag: bsy +Description: Sabah Bisaya +Added: 2009-07-29 +%% +Type: language +Subtag: bta +Description: Bata +Added: 2009-07-29 +%% +Type: language +Subtag: btb +Description: Beti (Cameroon) +Added: 2009-07-29 +Deprecated: 2010-03-11 +Comments: see beb, bum, bxp, eto, ewo, fan, mct +%% +Type: language +Subtag: btc +Description: Bati (Cameroon) +Added: 2009-07-29 +%% +Type: language +Subtag: btd +Description: Batak Dairi +Added: 2009-07-29 +%% +Type: language +Subtag: bte +Description: Gamo-Ningi +Added: 2009-07-29 +%% +Type: language +Subtag: btf +Description: Birgit +Added: 2009-07-29 +%% +Type: language +Subtag: btg +Description: Gagnoa Bété +Added: 2009-07-29 +%% +Type: language +Subtag: bth +Description: Biatah Bidayuh +Added: 2009-07-29 +%% +Type: language +Subtag: bti +Description: Burate +Added: 2009-07-29 +%% +Type: language +Subtag: btj +Description: Bacanese Malay +Added: 2009-07-29 +Macrolanguage: ms +%% +Type: language +Subtag: btk +Description: Batak languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: btl +Description: Bhatola +Added: 2009-07-29 +%% +Type: language +Subtag: btm +Description: Batak Mandailing +Added: 2009-07-29 +%% +Type: language +Subtag: btn +Description: Ratagnon +Added: 2009-07-29 +%% +Type: language +Subtag: bto +Description: Rinconada Bikol +Added: 2009-07-29 +Macrolanguage: bik +%% +Type: language +Subtag: btp +Description: Budibud +Added: 2009-07-29 +%% +Type: language +Subtag: btq +Description: Batek +Added: 2009-07-29 +%% +Type: language +Subtag: btr +Description: Baetora +Added: 2009-07-29 +%% +Type: language +Subtag: bts +Description: Batak Simalungun +Added: 2009-07-29 +%% +Type: language +Subtag: btt +Description: Bete-Bendi +Added: 2009-07-29 +%% +Type: language +Subtag: btu +Description: Batu +Added: 2009-07-29 +%% +Type: language +Subtag: btv +Description: Bateri +Added: 2009-07-29 +%% +Type: language +Subtag: btw +Description: Butuanon +Added: 2009-07-29 +%% +Type: language +Subtag: btx +Description: Batak Karo +Added: 2009-07-29 +%% +Type: language +Subtag: bty +Description: Bobot +Added: 2009-07-29 +%% +Type: language +Subtag: btz +Description: Batak Alas-Kluet +Added: 2009-07-29 +%% +Type: language +Subtag: bua +Description: Buriat +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: bub +Description: Bua +Added: 2009-07-29 +%% +Type: language +Subtag: buc +Description: Bushi +Added: 2009-07-29 +%% +Type: language +Subtag: bud +Description: Ntcham +Added: 2009-07-29 +%% +Type: language +Subtag: bue +Description: Beothuk +Added: 2009-07-29 +%% +Type: language +Subtag: buf +Description: Bushoong +Added: 2009-07-29 +%% +Type: language +Subtag: bug +Description: Buginese +Added: 2005-10-16 +%% +Type: language +Subtag: buh +Description: Younuo Bunu +Added: 2009-07-29 +%% +Type: language +Subtag: bui +Description: Bongili +Added: 2009-07-29 +%% +Type: language +Subtag: buj +Description: Basa-Gurmana +Added: 2009-07-29 +%% +Type: language +Subtag: buk +Description: Bugawac +Added: 2009-07-29 +%% +Type: language +Subtag: bum +Description: Bulu (Cameroon) +Added: 2009-07-29 +%% +Type: language +Subtag: bun +Description: Sherbro +Added: 2009-07-29 +%% +Type: language +Subtag: buo +Description: Terei +Added: 2009-07-29 +%% +Type: language +Subtag: bup +Description: Busoa +Added: 2009-07-29 +%% +Type: language +Subtag: buq +Description: Brem +Added: 2009-07-29 +%% +Type: language +Subtag: bus +Description: Bokobaru +Added: 2009-07-29 +%% +Type: language +Subtag: but +Description: Bungain +Added: 2009-07-29 +%% +Type: language +Subtag: buu +Description: Budu +Added: 2009-07-29 +%% +Type: language +Subtag: buv +Description: Bun +Added: 2009-07-29 +%% +Type: language +Subtag: buw +Description: Bubi +Added: 2009-07-29 +%% +Type: language +Subtag: bux +Description: Boghom +Added: 2009-07-29 +%% +Type: language +Subtag: buy +Description: Bullom So +Added: 2009-07-29 +%% +Type: language +Subtag: buz +Description: Bukwen +Added: 2009-07-29 +%% +Type: language +Subtag: bva +Description: Barein +Added: 2009-07-29 +%% +Type: language +Subtag: bvb +Description: Bube +Added: 2009-07-29 +%% +Type: language +Subtag: bvc +Description: Baelelea +Added: 2009-07-29 +%% +Type: language +Subtag: bvd +Description: Baeggu +Added: 2009-07-29 +%% +Type: language +Subtag: bve +Description: Berau Malay +Added: 2009-07-29 +Macrolanguage: ms +%% +Type: language +Subtag: bvf +Description: Boor +Added: 2009-07-29 +%% +Type: language +Subtag: bvg +Description: Bonkeng +Added: 2009-07-29 +%% +Type: language +Subtag: bvh +Description: Bure +Added: 2009-07-29 +%% +Type: language +Subtag: bvi +Description: Belanda Viri +Added: 2009-07-29 +%% +Type: language +Subtag: bvj +Description: Baan +Added: 2009-07-29 +%% +Type: language +Subtag: bvk +Description: Bukat +Added: 2009-07-29 +%% +Type: language +Subtag: bvl +Description: Bolivian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: bvm +Description: Bamunka +Added: 2009-07-29 +%% +Type: language +Subtag: bvn +Description: Buna +Added: 2009-07-29 +%% +Type: language +Subtag: bvo +Description: Bolgo +Added: 2009-07-29 +%% +Type: language +Subtag: bvq +Description: Birri +Added: 2009-07-29 +%% +Type: language +Subtag: bvr +Description: Burarra +Added: 2009-07-29 +%% +Type: language +Subtag: bvt +Description: Bati (Indonesia) +Added: 2009-07-29 +%% +Type: language +Subtag: bvu +Description: Bukit Malay +Added: 2009-07-29 +Macrolanguage: ms +%% +Type: language +Subtag: bvv +Description: Baniva +Added: 2009-07-29 +%% +Type: language +Subtag: bvw +Description: Boga +Added: 2009-07-29 +%% +Type: language +Subtag: bvx +Description: Dibole +Added: 2009-07-29 +%% +Type: language +Subtag: bvy +Description: Baybayanon +Added: 2010-03-11 +%% +Type: language +Subtag: bvz +Description: Bauzi +Added: 2009-07-29 +%% +Type: language +Subtag: bwa +Description: Bwatoo +Added: 2009-07-29 +%% +Type: language +Subtag: bwb +Description: Namosi-Naitasiri-Serua +Added: 2009-07-29 +%% +Type: language +Subtag: bwc +Description: Bwile +Added: 2009-07-29 +%% +Type: language +Subtag: bwd +Description: Bwaidoka +Added: 2009-07-29 +%% +Type: language +Subtag: bwe +Description: Bwe Karen +Added: 2009-07-29 +%% +Type: language +Subtag: bwf +Description: Boselewa +Added: 2009-07-29 +%% +Type: language +Subtag: bwg +Description: Barwe +Added: 2009-07-29 +%% +Type: language +Subtag: bwh +Description: Bishuo +Added: 2009-07-29 +%% +Type: language +Subtag: bwi +Description: Baniwa +Added: 2009-07-29 +%% +Type: language +Subtag: bwj +Description: Láá Láá Bwamu +Added: 2009-07-29 +%% +Type: language +Subtag: bwk +Description: Bauwaki +Added: 2009-07-29 +%% +Type: language +Subtag: bwl +Description: Bwela +Added: 2009-07-29 +%% +Type: language +Subtag: bwm +Description: Biwat +Added: 2009-07-29 +%% +Type: language +Subtag: bwn +Description: Wunai Bunu +Added: 2009-07-29 +%% +Type: language +Subtag: bwo +Description: Boro (Ethiopia) +Description: Borna (Ethiopia) +Added: 2009-07-29 +%% +Type: language +Subtag: bwp +Description: Mandobo Bawah +Added: 2009-07-29 +%% +Type: language +Subtag: bwq +Description: Southern Bobo Madaré +Added: 2009-07-29 +%% +Type: language +Subtag: bwr +Description: Bura-Pabir +Added: 2009-07-29 +%% +Type: language +Subtag: bws +Description: Bomboma +Added: 2009-07-29 +%% +Type: language +Subtag: bwt +Description: Bafaw-Balong +Added: 2009-07-29 +%% +Type: language +Subtag: bwu +Description: Buli (Ghana) +Added: 2009-07-29 +%% +Type: language +Subtag: bww +Description: Bwa +Added: 2009-07-29 +%% +Type: language +Subtag: bwx +Description: Bu-Nao Bunu +Added: 2009-07-29 +%% +Type: language +Subtag: bwy +Description: Cwi Bwamu +Added: 2009-07-29 +%% +Type: language +Subtag: bwz +Description: Bwisi +Added: 2009-07-29 +%% +Type: language +Subtag: bxa +Description: Bauro +Added: 2009-07-29 +%% +Type: language +Subtag: bxb +Description: Belanda Bor +Added: 2009-07-29 +%% +Type: language +Subtag: bxc +Description: Molengue +Added: 2009-07-29 +%% +Type: language +Subtag: bxd +Description: Pela +Added: 2009-07-29 +%% +Type: language +Subtag: bxe +Description: Birale +Added: 2009-07-29 +%% +Type: language +Subtag: bxf +Description: Bilur +Added: 2009-07-29 +%% +Type: language +Subtag: bxg +Description: Bangala +Added: 2009-07-29 +%% +Type: language +Subtag: bxh +Description: Buhutu +Added: 2009-07-29 +%% +Type: language +Subtag: bxi +Description: Pirlatapa +Added: 2009-07-29 +%% +Type: language +Subtag: bxj +Description: Bayungu +Added: 2009-07-29 +%% +Type: language +Subtag: bxk +Description: Bukusu +Description: Lubukusu +Added: 2009-07-29 +Macrolanguage: luy +%% +Type: language +Subtag: bxl +Description: Jalkunan +Added: 2009-07-29 +%% +Type: language +Subtag: bxm +Description: Mongolia Buriat +Added: 2009-07-29 +Macrolanguage: bua +%% +Type: language +Subtag: bxn +Description: Burduna +Added: 2009-07-29 +%% +Type: language +Subtag: bxo +Description: Barikanchi +Added: 2009-07-29 +%% +Type: language +Subtag: bxp +Description: Bebil +Added: 2009-07-29 +%% +Type: language +Subtag: bxq +Description: Beele +Added: 2009-07-29 +%% +Type: language +Subtag: bxr +Description: Russia Buriat +Added: 2009-07-29 +Macrolanguage: bua +%% +Type: language +Subtag: bxs +Description: Busam +Added: 2009-07-29 +%% +Type: language +Subtag: bxu +Description: China Buriat +Added: 2009-07-29 +Macrolanguage: bua +%% +Type: language +Subtag: bxv +Description: Berakou +Added: 2009-07-29 +%% +Type: language +Subtag: bxw +Description: Bankagooma +Added: 2009-07-29 +%% +Type: language +Subtag: bxx +Description: Borna (Democratic Republic of Congo) +Added: 2009-07-29 +%% +Type: language +Subtag: bxz +Description: Binahari +Added: 2009-07-29 +%% +Type: language +Subtag: bya +Description: Batak +Added: 2009-07-29 +%% +Type: language +Subtag: byb +Description: Bikya +Added: 2009-07-29 +%% +Type: language +Subtag: byc +Description: Ubaghara +Added: 2009-07-29 +%% +Type: language +Subtag: byd +Description: Benyadu' +Added: 2009-07-29 +%% +Type: language +Subtag: bye +Description: Pouye +Added: 2009-07-29 +%% +Type: language +Subtag: byf +Description: Bete +Added: 2009-07-29 +%% +Type: language +Subtag: byg +Description: Baygo +Added: 2009-07-29 +%% +Type: language +Subtag: byh +Description: Bhujel +Added: 2009-07-29 +%% +Type: language +Subtag: byi +Description: Buyu +Added: 2009-07-29 +%% +Type: language +Subtag: byj +Description: Bina (Nigeria) +Added: 2009-07-29 +%% +Type: language +Subtag: byk +Description: Biao +Added: 2009-07-29 +%% +Type: language +Subtag: byl +Description: Bayono +Added: 2009-07-29 +%% +Type: language +Subtag: bym +Description: Bidyara +Added: 2009-07-29 +%% +Type: language +Subtag: byn +Description: Bilin +Description: Blin +Added: 2005-10-16 +%% +Type: language +Subtag: byo +Description: Biyo +Added: 2009-07-29 +%% +Type: language +Subtag: byp +Description: Bumaji +Added: 2009-07-29 +%% +Type: language +Subtag: byq +Description: Basay +Added: 2009-07-29 +%% +Type: language +Subtag: byr +Description: Baruya +Description: Yipma +Added: 2009-07-29 +%% +Type: language +Subtag: bys +Description: Burak +Added: 2009-07-29 +%% +Type: language +Subtag: byt +Description: Berti +Added: 2009-07-29 +%% +Type: language +Subtag: byv +Description: Medumba +Added: 2009-07-29 +%% +Type: language +Subtag: byw +Description: Belhariya +Added: 2009-07-29 +%% +Type: language +Subtag: byx +Description: Qaqet +Added: 2009-07-29 +%% +Type: language +Subtag: byy +Description: Buya +Added: 2009-07-29 +%% +Type: language +Subtag: byz +Description: Banaro +Added: 2009-07-29 +%% +Type: language +Subtag: bza +Description: Bandi +Added: 2009-07-29 +%% +Type: language +Subtag: bzb +Description: Andio +Added: 2009-07-29 +%% +Type: language +Subtag: bzc +Description: Southern Betsimisaraka Malagasy +Added: 2011-08-16 +Macrolanguage: mg +%% +Type: language +Subtag: bzd +Description: Bribri +Added: 2009-07-29 +%% +Type: language +Subtag: bze +Description: Jenaama Bozo +Added: 2009-07-29 +%% +Type: language +Subtag: bzf +Description: Boikin +Added: 2009-07-29 +%% +Type: language +Subtag: bzg +Description: Babuza +Added: 2009-07-29 +%% +Type: language +Subtag: bzh +Description: Mapos Buang +Added: 2009-07-29 +%% +Type: language +Subtag: bzi +Description: Bisu +Added: 2009-07-29 +%% +Type: language +Subtag: bzj +Description: Belize Kriol English +Added: 2009-07-29 +%% +Type: language +Subtag: bzk +Description: Nicaragua Creole English +Added: 2009-07-29 +%% +Type: language +Subtag: bzl +Description: Boano (Sulawesi) +Added: 2009-07-29 +%% +Type: language +Subtag: bzm +Description: Bolondo +Added: 2009-07-29 +%% +Type: language +Subtag: bzn +Description: Boano (Maluku) +Added: 2009-07-29 +%% +Type: language +Subtag: bzo +Description: Bozaba +Added: 2009-07-29 +%% +Type: language +Subtag: bzp +Description: Kemberano +Added: 2009-07-29 +%% +Type: language +Subtag: bzq +Description: Buli (Indonesia) +Added: 2009-07-29 +%% +Type: language +Subtag: bzr +Description: Biri +Added: 2009-07-29 +%% +Type: language +Subtag: bzs +Description: Brazilian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: bzt +Description: Brithenig +Added: 2009-07-29 +%% +Type: language +Subtag: bzu +Description: Burmeso +Added: 2009-07-29 +%% +Type: language +Subtag: bzv +Description: Bebe +Added: 2009-07-29 +%% +Type: language +Subtag: bzw +Description: Basa (Nigeria) +Added: 2009-07-29 +%% +Type: language +Subtag: bzx +Description: Kɛlɛngaxo Bozo +Added: 2009-07-29 +%% +Type: language +Subtag: bzy +Description: Obanliku +Added: 2009-07-29 +%% +Type: language +Subtag: bzz +Description: Evant +Added: 2009-07-29 +%% +Type: language +Subtag: caa +Description: Chortí +Added: 2009-07-29 +%% +Type: language +Subtag: cab +Description: Garifuna +Added: 2009-07-29 +%% +Type: language +Subtag: cac +Description: Chuj +Added: 2009-07-29 +%% +Type: language +Subtag: cad +Description: Caddo +Added: 2005-10-16 +%% +Type: language +Subtag: cae +Description: Lehar +Description: Laalaa +Added: 2009-07-29 +%% +Type: language +Subtag: caf +Description: Southern Carrier +Added: 2009-07-29 +%% +Type: language +Subtag: cag +Description: Nivaclé +Added: 2009-07-29 +%% +Type: language +Subtag: cah +Description: Cahuarano +Added: 2009-07-29 +%% +Type: language +Subtag: cai +Description: Central American Indian languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: caj +Description: Chané +Added: 2009-07-29 +%% +Type: language +Subtag: cak +Description: Kaqchikel +Description: Cakchiquel +Added: 2009-07-29 +%% +Type: language +Subtag: cal +Description: Carolinian +Added: 2009-07-29 +%% +Type: language +Subtag: cam +Description: Cemuhî +Added: 2009-07-29 +%% +Type: language +Subtag: can +Description: Chambri +Added: 2009-07-29 +%% +Type: language +Subtag: cao +Description: Chácobo +Added: 2009-07-29 +%% +Type: language +Subtag: cap +Description: Chipaya +Added: 2009-07-29 +%% +Type: language +Subtag: caq +Description: Car Nicobarese +Added: 2009-07-29 +%% +Type: language +Subtag: car +Description: Galibi Carib +Added: 2005-10-16 +%% +Type: language +Subtag: cas +Description: Tsimané +Added: 2009-07-29 +%% +Type: language +Subtag: cau +Description: Caucasian languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: cav +Description: Cavineña +Added: 2009-07-29 +%% +Type: language +Subtag: caw +Description: Callawalla +Added: 2009-07-29 +%% +Type: language +Subtag: cax +Description: Chiquitano +Added: 2009-07-29 +%% +Type: language +Subtag: cay +Description: Cayuga +Added: 2009-07-29 +%% +Type: language +Subtag: caz +Description: Canichana +Added: 2009-07-29 +%% +Type: language +Subtag: cba +Description: Chibchan languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: cbb +Description: Cabiyarí +Added: 2009-07-29 +%% +Type: language +Subtag: cbc +Description: Carapana +Added: 2009-07-29 +%% +Type: language +Subtag: cbd +Description: Carijona +Added: 2009-07-29 +%% +Type: language +Subtag: cbe +Description: Chipiajes +Added: 2009-07-29 +%% +Type: language +Subtag: cbg +Description: Chimila +Added: 2009-07-29 +%% +Type: language +Subtag: cbh +Description: Cagua +Added: 2009-07-29 +%% +Type: language +Subtag: cbi +Description: Chachi +Added: 2009-07-29 +%% +Type: language +Subtag: cbj +Description: Ede Cabe +Added: 2009-07-29 +%% +Type: language +Subtag: cbk +Description: Chavacano +Added: 2009-07-29 +%% +Type: language +Subtag: cbl +Description: Bualkhaw Chin +Added: 2009-07-29 +%% +Type: language +Subtag: cbn +Description: Nyahkur +Added: 2009-07-29 +%% +Type: language +Subtag: cbo +Description: Izora +Added: 2009-07-29 +%% +Type: language +Subtag: cbr +Description: Cashibo-Cacataibo +Added: 2009-07-29 +%% +Type: language +Subtag: cbs +Description: Cashinahua +Added: 2009-07-29 +%% +Type: language +Subtag: cbt +Description: Chayahuita +Added: 2009-07-29 +%% +Type: language +Subtag: cbu +Description: Candoshi-Shapra +Added: 2009-07-29 +%% +Type: language +Subtag: cbv +Description: Cacua +Added: 2009-07-29 +%% +Type: language +Subtag: cbw +Description: Kinabalian +Added: 2010-03-11 +%% +Type: language +Subtag: cby +Description: Carabayo +Added: 2009-07-29 +%% +Type: language +Subtag: cca +Description: Cauca +Added: 2009-07-29 +%% +Type: language +Subtag: ccc +Description: Chamicuro +Added: 2009-07-29 +%% +Type: language +Subtag: ccd +Description: Cafundo Creole +Added: 2009-07-29 +%% +Type: language +Subtag: cce +Description: Chopi +Added: 2009-07-29 +%% +Type: language +Subtag: ccg +Description: Samba Daka +Added: 2009-07-29 +%% +Type: language +Subtag: cch +Description: Atsam +Added: 2009-07-29 +%% +Type: language +Subtag: ccj +Description: Kasanga +Added: 2009-07-29 +%% +Type: language +Subtag: ccl +Description: Cutchi-Swahili +Added: 2009-07-29 +%% +Type: language +Subtag: ccm +Description: Malaccan Creole Malay +Added: 2009-07-29 +%% +Type: language +Subtag: ccn +Description: North Caucasian languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: cco +Description: Comaltepec Chinantec +Added: 2009-07-29 +%% +Type: language +Subtag: ccp +Description: Chakma +Added: 2009-07-29 +%% +Type: language +Subtag: ccq +Description: Chaungtha +Added: 2009-07-29 +Deprecated: 2012-08-12 +Preferred-Value: rki +%% +Type: language +Subtag: ccr +Description: Cacaopera +Added: 2009-07-29 +%% +Type: language +Subtag: ccs +Description: South Caucasian languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: cda +Description: Choni +Added: 2009-07-29 +%% +Type: language +Subtag: cdc +Description: Chadic languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: cdd +Description: Caddoan languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: cde +Description: Chenchu +Added: 2009-07-29 +%% +Type: language +Subtag: cdf +Description: Chiru +Added: 2009-07-29 +%% +Type: language +Subtag: cdg +Description: Chamari +Added: 2009-07-29 +%% +Type: language +Subtag: cdh +Description: Chambeali +Added: 2009-07-29 +%% +Type: language +Subtag: cdi +Description: Chodri +Added: 2009-07-29 +%% +Type: language +Subtag: cdj +Description: Churahi +Added: 2009-07-29 +%% +Type: language +Subtag: cdm +Description: Chepang +Added: 2009-07-29 +%% +Type: language +Subtag: cdn +Description: Chaudangsi +Added: 2009-07-29 +%% +Type: language +Subtag: cdo +Description: Min Dong Chinese +Added: 2009-07-29 +Macrolanguage: zh +%% +Type: language +Subtag: cdr +Description: Cinda-Regi-Tiyal +Added: 2009-07-29 +%% +Type: language +Subtag: cds +Description: Chadian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: cdy +Description: Chadong +Added: 2009-07-29 +%% +Type: language +Subtag: cdz +Description: Koda +Added: 2009-07-29 +%% +Type: language +Subtag: cea +Description: Lower Chehalis +Added: 2009-07-29 +%% +Type: language +Subtag: ceb +Description: Cebuano +Added: 2005-10-16 +%% +Type: language +Subtag: ceg +Description: Chamacoco +Added: 2009-07-29 +%% +Type: language +Subtag: cek +Description: Eastern Khumi Chin +Added: 2012-08-12 +%% +Type: language +Subtag: cel +Description: Celtic languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: cen +Description: Cen +Added: 2009-07-29 +%% +Type: language +Subtag: cet +Description: Centúúm +Added: 2009-07-29 +%% +Type: language +Subtag: cfa +Description: Dijim-Bwilim +Added: 2009-07-29 +%% +Type: language +Subtag: cfd +Description: Cara +Added: 2009-07-29 +%% +Type: language +Subtag: cfg +Description: Como Karim +Added: 2009-07-29 +%% +Type: language +Subtag: cfm +Description: Falam Chin +Added: 2009-07-29 +%% +Type: language +Subtag: cga +Description: Changriwa +Added: 2009-07-29 +%% +Type: language +Subtag: cgc +Description: Kagayanen +Added: 2009-07-29 +%% +Type: language +Subtag: cgg +Description: Chiga +Added: 2009-07-29 +%% +Type: language +Subtag: cgk +Description: Chocangacakha +Added: 2009-07-29 +%% +Type: language +Subtag: chb +Description: Chibcha +Added: 2005-10-16 +%% +Type: language +Subtag: chc +Description: Catawba +Added: 2009-07-29 +%% +Type: language +Subtag: chd +Description: Highland Oaxaca Chontal +Added: 2009-07-29 +%% +Type: language +Subtag: chf +Description: Tabasco Chontal +Added: 2009-07-29 +%% +Type: language +Subtag: chg +Description: Chagatai +Added: 2005-10-16 +%% +Type: language +Subtag: chh +Description: Chinook +Added: 2009-07-29 +%% +Type: language +Subtag: chj +Description: Ojitlán Chinantec +Added: 2009-07-29 +%% +Type: language +Subtag: chk +Description: Chuukese +Added: 2005-10-16 +%% +Type: language +Subtag: chl +Description: Cahuilla +Added: 2009-07-29 +%% +Type: language +Subtag: chm +Description: Mari (Russia) +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: chn +Description: Chinook jargon +Added: 2005-10-16 +%% +Type: language +Subtag: cho +Description: Choctaw +Added: 2005-10-16 +%% +Type: language +Subtag: chp +Description: Chipewyan +Description: Dene Suline +Added: 2005-10-16 +%% +Type: language +Subtag: chq +Description: Quiotepec Chinantec +Added: 2009-07-29 +%% +Type: language +Subtag: chr +Description: Cherokee +Added: 2005-10-16 +%% +Type: language +Subtag: cht +Description: Cholón +Added: 2009-07-29 +%% +Type: language +Subtag: chw +Description: Chuwabu +Added: 2009-07-29 +%% +Type: language +Subtag: chx +Description: Chantyal +Added: 2009-07-29 +%% +Type: language +Subtag: chy +Description: Cheyenne +Added: 2005-10-16 +%% +Type: language +Subtag: chz +Description: Ozumacín Chinantec +Added: 2009-07-29 +%% +Type: language +Subtag: cia +Description: Cia-Cia +Added: 2009-07-29 +%% +Type: language +Subtag: cib +Description: Ci Gbe +Added: 2009-07-29 +%% +Type: language +Subtag: cic +Description: Chickasaw +Added: 2009-07-29 +%% +Type: language +Subtag: cid +Description: Chimariko +Added: 2009-07-29 +%% +Type: language +Subtag: cie +Description: Cineni +Added: 2009-07-29 +%% +Type: language +Subtag: cih +Description: Chinali +Added: 2009-07-29 +%% +Type: language +Subtag: cik +Description: Chitkuli Kinnauri +Added: 2009-07-29 +%% +Type: language +Subtag: cim +Description: Cimbrian +Added: 2009-07-29 +%% +Type: language +Subtag: cin +Description: Cinta Larga +Added: 2009-07-29 +%% +Type: language +Subtag: cip +Description: Chiapanec +Added: 2009-07-29 +%% +Type: language +Subtag: cir +Description: Tiri +Added: 2009-07-29 +%% +Type: language +Subtag: ciw +Description: Chippewa +Added: 2009-07-29 +Macrolanguage: oj +%% +Type: language +Subtag: ciy +Description: Chaima +Added: 2009-07-29 +%% +Type: language +Subtag: cja +Description: Western Cham +Added: 2009-07-29 +%% +Type: language +Subtag: cje +Description: Chru +Added: 2009-07-29 +%% +Type: language +Subtag: cjh +Description: Upper Chehalis +Added: 2009-07-29 +%% +Type: language +Subtag: cji +Description: Chamalal +Added: 2009-07-29 +%% +Type: language +Subtag: cjk +Description: Chokwe +Added: 2009-07-29 +%% +Type: language +Subtag: cjm +Description: Eastern Cham +Added: 2009-07-29 +%% +Type: language +Subtag: cjn +Description: Chenapian +Added: 2009-07-29 +%% +Type: language +Subtag: cjo +Description: Ashéninka Pajonal +Added: 2009-07-29 +%% +Type: language +Subtag: cjp +Description: Cabécar +Added: 2009-07-29 +%% +Type: language +Subtag: cjr +Description: Chorotega +Added: 2009-07-29 +Deprecated: 2010-03-11 +Preferred-Value: mom +%% +Type: language +Subtag: cjs +Description: Shor +Added: 2009-07-29 +%% +Type: language +Subtag: cjv +Description: Chuave +Added: 2009-07-29 +%% +Type: language +Subtag: cjy +Description: Jinyu Chinese +Added: 2009-07-29 +Macrolanguage: zh +%% +Type: language +Subtag: cka +Description: Khumi Awa Chin +Added: 2009-07-29 +Deprecated: 2012-08-12 +Preferred-Value: cmr +%% +Type: language +Subtag: ckb +Description: Central Kurdish +Added: 2009-07-29 +Macrolanguage: ku +%% +Type: language +Subtag: ckh +Description: Chak +Added: 2009-07-29 +%% +Type: language +Subtag: ckl +Description: Cibak +Added: 2009-07-29 +%% +Type: language +Subtag: cko +Description: Anufo +Added: 2009-07-29 +%% +Type: language +Subtag: ckq +Description: Kajakse +Added: 2009-07-29 +%% +Type: language +Subtag: ckr +Description: Kairak +Added: 2009-07-29 +%% +Type: language +Subtag: cks +Description: Tayo +Added: 2009-07-29 +%% +Type: language +Subtag: ckt +Description: Chukot +Added: 2009-07-29 +%% +Type: language +Subtag: cku +Description: Koasati +Added: 2009-07-29 +%% +Type: language +Subtag: ckv +Description: Kavalan +Added: 2009-07-29 +%% +Type: language +Subtag: ckx +Description: Caka +Added: 2009-07-29 +%% +Type: language +Subtag: cky +Description: Cakfem-Mushere +Added: 2009-07-29 +%% +Type: language +Subtag: ckz +Description: Cakchiquel-Quiché Mixed Language +Added: 2009-07-29 +%% +Type: language +Subtag: cla +Description: Ron +Added: 2009-07-29 +%% +Type: language +Subtag: clc +Description: Chilcotin +Added: 2009-07-29 +%% +Type: language +Subtag: cld +Description: Chaldean Neo-Aramaic +Added: 2009-07-29 +Macrolanguage: syr +%% +Type: language +Subtag: cle +Description: Lealao Chinantec +Added: 2009-07-29 +%% +Type: language +Subtag: clh +Description: Chilisso +Added: 2009-07-29 +%% +Type: language +Subtag: cli +Description: Chakali +Added: 2009-07-29 +%% +Type: language +Subtag: clj +Description: Laitu Chin +Added: 2012-08-12 +%% +Type: language +Subtag: clk +Description: Idu-Mishmi +Added: 2009-07-29 +%% +Type: language +Subtag: cll +Description: Chala +Added: 2009-07-29 +%% +Type: language +Subtag: clm +Description: Clallam +Added: 2009-07-29 +%% +Type: language +Subtag: clo +Description: Lowland Oaxaca Chontal +Added: 2009-07-29 +%% +Type: language +Subtag: clt +Description: Lautu Chin +Added: 2012-08-12 +%% +Type: language +Subtag: clu +Description: Caluyanun +Added: 2009-07-29 +%% +Type: language +Subtag: clw +Description: Chulym +Added: 2009-07-29 +%% +Type: language +Subtag: cly +Description: Eastern Highland Chatino +Added: 2009-07-29 +%% +Type: language +Subtag: cma +Description: Maa +Added: 2009-07-29 +%% +Type: language +Subtag: cmc +Description: Chamic languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: cme +Description: Cerma +Added: 2009-07-29 +%% +Type: language +Subtag: cmg +Description: Classical Mongolian +Added: 2009-07-29 +%% +Type: language +Subtag: cmi +Description: Emberá-Chamí +Added: 2009-07-29 +%% +Type: language +Subtag: cmk +Description: Chimakum +Added: 2009-07-29 +Deprecated: 2010-03-11 +Preferred-Value: xch +%% +Type: language +Subtag: cml +Description: Campalagian +Added: 2009-07-29 +%% +Type: language +Subtag: cmm +Description: Michigamea +Added: 2009-07-29 +%% +Type: language +Subtag: cmn +Description: Mandarin Chinese +Added: 2009-07-29 +Macrolanguage: zh +%% +Type: language +Subtag: cmo +Description: Central Mnong +Added: 2009-07-29 +%% +Type: language +Subtag: cmr +Description: Mro-Khimi Chin +Added: 2009-07-29 +%% +Type: language +Subtag: cms +Description: Messapic +Added: 2009-07-29 +%% +Type: language +Subtag: cmt +Description: Camtho +Added: 2009-07-29 +%% +Type: language +Subtag: cna +Description: Changthang +Added: 2009-07-29 +%% +Type: language +Subtag: cnb +Description: Chinbon Chin +Added: 2009-07-29 +%% +Type: language +Subtag: cnc +Description: Côông +Added: 2009-07-29 +%% +Type: language +Subtag: cng +Description: Northern Qiang +Added: 2009-07-29 +%% +Type: language +Subtag: cnh +Description: Haka Chin +Added: 2009-07-29 +%% +Type: language +Subtag: cni +Description: Asháninka +Added: 2009-07-29 +%% +Type: language +Subtag: cnk +Description: Khumi Chin +Added: 2009-07-29 +%% +Type: language +Subtag: cnl +Description: Lalana Chinantec +Added: 2009-07-29 +%% +Type: language +Subtag: cno +Description: Con +Added: 2009-07-29 +%% +Type: language +Subtag: cns +Description: Central Asmat +Added: 2009-07-29 +%% +Type: language +Subtag: cnt +Description: Tepetotutla Chinantec +Added: 2009-07-29 +%% +Type: language +Subtag: cnu +Description: Chenoua +Added: 2009-07-29 +%% +Type: language +Subtag: cnw +Description: Ngawn Chin +Added: 2009-07-29 +%% +Type: language +Subtag: cnx +Description: Middle Cornish +Added: 2009-07-29 +%% +Type: language +Subtag: coa +Description: Cocos Islands Malay +Added: 2009-07-29 +Macrolanguage: ms +%% +Type: language +Subtag: cob +Description: Chicomuceltec +Added: 2009-07-29 +%% +Type: language +Subtag: coc +Description: Cocopa +Added: 2009-07-29 +%% +Type: language +Subtag: cod +Description: Cocama-Cocamilla +Added: 2009-07-29 +%% +Type: language +Subtag: coe +Description: Koreguaje +Added: 2009-07-29 +%% +Type: language +Subtag: cof +Description: Colorado +Added: 2009-07-29 +%% +Type: language +Subtag: cog +Description: Chong +Added: 2009-07-29 +%% +Type: language +Subtag: coh +Description: Chonyi-Dzihana-Kauma +Description: Chichonyi-Chidzihana-Chikauma +Added: 2009-07-29 +%% +Type: language +Subtag: coj +Description: Cochimi +Added: 2009-07-29 +%% +Type: language +Subtag: cok +Description: Santa Teresa Cora +Added: 2009-07-29 +%% +Type: language +Subtag: col +Description: Columbia-Wenatchi +Added: 2009-07-29 +%% +Type: language +Subtag: com +Description: Comanche +Added: 2009-07-29 +%% +Type: language +Subtag: con +Description: Cofán +Added: 2009-07-29 +%% +Type: language +Subtag: coo +Description: Comox +Added: 2009-07-29 +%% +Type: language +Subtag: cop +Description: Coptic +Added: 2005-10-16 +%% +Type: language +Subtag: coq +Description: Coquille +Added: 2009-07-29 +%% +Type: language +Subtag: cot +Description: Caquinte +Added: 2009-07-29 +%% +Type: language +Subtag: cou +Description: Wamey +Added: 2009-07-29 +%% +Type: language +Subtag: cov +Description: Cao Miao +Added: 2009-07-29 +%% +Type: language +Subtag: cow +Description: Cowlitz +Added: 2009-07-29 +%% +Type: language +Subtag: cox +Description: Nanti +Added: 2009-07-29 +%% +Type: language +Subtag: coy +Description: Coyaima +Added: 2009-07-29 +%% +Type: language +Subtag: coz +Description: Chochotec +Added: 2009-07-29 +%% +Type: language +Subtag: cpa +Description: Palantla Chinantec +Added: 2009-07-29 +%% +Type: language +Subtag: cpb +Description: Ucayali-Yurúa Ashéninka +Added: 2009-07-29 +%% +Type: language +Subtag: cpc +Description: Ajyíninka Apurucayali +Added: 2009-07-29 +%% +Type: language +Subtag: cpe +Description: English-based creoles and pidgins +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: cpf +Description: French-based creoles and pidgins +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: cpg +Description: Cappadocian Greek +Added: 2009-07-29 +%% +Type: language +Subtag: cpi +Description: Chinese Pidgin English +Added: 2009-07-29 +%% +Type: language +Subtag: cpn +Description: Cherepon +Added: 2009-07-29 +%% +Type: language +Subtag: cpp +Description: Portuguese-based creoles and pidgins +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: cps +Description: Capiznon +Added: 2009-07-29 +%% +Type: language +Subtag: cpu +Description: Pichis Ashéninka +Added: 2009-07-29 +%% +Type: language +Subtag: cpx +Description: Pu-Xian Chinese +Added: 2009-07-29 +Macrolanguage: zh +%% +Type: language +Subtag: cpy +Description: South Ucayali Ashéninka +Added: 2009-07-29 +%% +Type: language +Subtag: cqd +Description: Chuanqiandian Cluster Miao +Added: 2009-07-29 +Macrolanguage: hmn +%% +Type: language +Subtag: cqu +Description: Chilean Quechua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: cra +Description: Chara +Added: 2009-07-29 +%% +Type: language +Subtag: crb +Description: Island Carib +Added: 2009-07-29 +%% +Type: language +Subtag: crc +Description: Lonwolwol +Added: 2009-07-29 +%% +Type: language +Subtag: crd +Description: Coeur d'Alene +Added: 2009-07-29 +%% +Type: language +Subtag: crf +Description: Caramanta +Added: 2009-07-29 +%% +Type: language +Subtag: crg +Description: Michif +Added: 2009-07-29 +%% +Type: language +Subtag: crh +Description: Crimean Tatar +Description: Crimean Turkish +Added: 2005-10-16 +%% +Type: language +Subtag: cri +Description: Sãotomense +Added: 2009-07-29 +%% +Type: language +Subtag: crj +Description: Southern East Cree +Added: 2009-07-29 +Macrolanguage: cr +%% +Type: language +Subtag: crk +Description: Plains Cree +Added: 2009-07-29 +Macrolanguage: cr +%% +Type: language +Subtag: crl +Description: Northern East Cree +Added: 2009-07-29 +Macrolanguage: cr +%% +Type: language +Subtag: crm +Description: Moose Cree +Added: 2009-07-29 +Macrolanguage: cr +%% +Type: language +Subtag: crn +Description: El Nayar Cora +Added: 2009-07-29 +%% +Type: language +Subtag: cro +Description: Crow +Added: 2009-07-29 +%% +Type: language +Subtag: crp +Description: Creoles and pidgins +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: crq +Description: Iyo'wujwa Chorote +Added: 2009-07-29 +%% +Type: language +Subtag: crr +Description: Carolina Algonquian +Added: 2009-07-29 +%% +Type: language +Subtag: crs +Description: Seselwa Creole French +Added: 2009-07-29 +%% +Type: language +Subtag: crt +Description: Iyojwa'ja Chorote +Added: 2009-07-29 +%% +Type: language +Subtag: crv +Description: Chaura +Added: 2009-07-29 +%% +Type: language +Subtag: crw +Description: Chrau +Added: 2009-07-29 +%% +Type: language +Subtag: crx +Description: Carrier +Added: 2009-07-29 +%% +Type: language +Subtag: cry +Description: Cori +Added: 2009-07-29 +%% +Type: language +Subtag: crz +Description: Cruzeño +Added: 2009-07-29 +%% +Type: language +Subtag: csa +Description: Chiltepec Chinantec +Added: 2009-07-29 +%% +Type: language +Subtag: csb +Description: Kashubian +Added: 2005-10-16 +%% +Type: language +Subtag: csc +Description: Catalan Sign Language +Description: Lengua de señas catalana +Description: Llengua de Signes Catalana +Added: 2009-07-29 +%% +Type: language +Subtag: csd +Description: Chiangmai Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: cse +Description: Czech Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: csf +Description: Cuba Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: csg +Description: Chilean Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: csh +Description: Asho Chin +Added: 2009-07-29 +%% +Type: language +Subtag: csi +Description: Coast Miwok +Added: 2009-07-29 +%% +Type: language +Subtag: csk +Description: Jola-Kasa +Added: 2009-07-29 +%% +Type: language +Subtag: csl +Description: Chinese Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: csm +Description: Central Sierra Miwok +Added: 2009-07-29 +%% +Type: language +Subtag: csn +Description: Colombian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: cso +Description: Sochiapam Chinantec +Description: Sochiapan Chinantec +Added: 2009-07-29 +%% +Type: language +Subtag: csq +Description: Croatia Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: csr +Description: Costa Rican Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: css +Description: Southern Ohlone +Added: 2009-07-29 +%% +Type: language +Subtag: cst +Description: Northern Ohlone +Added: 2009-07-29 +%% +Type: language +Subtag: csu +Description: Central Sudanic languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: csv +Description: Sumtu Chin +Added: 2012-08-12 +%% +Type: language +Subtag: csw +Description: Swampy Cree +Added: 2009-07-29 +Macrolanguage: cr +%% +Type: language +Subtag: csy +Description: Siyin Chin +Added: 2009-07-29 +%% +Type: language +Subtag: csz +Description: Coos +Added: 2009-07-29 +%% +Type: language +Subtag: cta +Description: Tataltepec Chatino +Added: 2009-07-29 +%% +Type: language +Subtag: ctc +Description: Chetco +Added: 2009-07-29 +%% +Type: language +Subtag: ctd +Description: Tedim Chin +Added: 2009-07-29 +%% +Type: language +Subtag: cte +Description: Tepinapa Chinantec +Added: 2009-07-29 +%% +Type: language +Subtag: ctg +Description: Chittagonian +Added: 2009-07-29 +%% +Type: language +Subtag: cth +Description: Thaiphum Chin +Added: 2012-08-12 +%% +Type: language +Subtag: ctl +Description: Tlacoatzintepec Chinantec +Added: 2009-07-29 +%% +Type: language +Subtag: ctm +Description: Chitimacha +Added: 2009-07-29 +%% +Type: language +Subtag: ctn +Description: Chhintange +Added: 2009-07-29 +%% +Type: language +Subtag: cto +Description: Emberá-Catío +Added: 2009-07-29 +%% +Type: language +Subtag: ctp +Description: Western Highland Chatino +Added: 2009-07-29 +%% +Type: language +Subtag: cts +Description: Northern Catanduanes Bikol +Added: 2009-07-29 +Macrolanguage: bik +%% +Type: language +Subtag: ctt +Description: Wayanad Chetti +Added: 2009-07-29 +%% +Type: language +Subtag: ctu +Description: Chol +Added: 2009-07-29 +%% +Type: language +Subtag: ctz +Description: Zacatepec Chatino +Added: 2009-07-29 +%% +Type: language +Subtag: cua +Description: Cua +Added: 2009-07-29 +%% +Type: language +Subtag: cub +Description: Cubeo +Added: 2009-07-29 +%% +Type: language +Subtag: cuc +Description: Usila Chinantec +Added: 2009-07-29 +%% +Type: language +Subtag: cug +Description: Cung +Added: 2009-07-29 +%% +Type: language +Subtag: cuh +Description: Chuka +Description: Gichuka +Added: 2009-07-29 +%% +Type: language +Subtag: cui +Description: Cuiba +Added: 2009-07-29 +%% +Type: language +Subtag: cuj +Description: Mashco Piro +Added: 2009-07-29 +%% +Type: language +Subtag: cuk +Description: San Blas Kuna +Added: 2009-07-29 +%% +Type: language +Subtag: cul +Description: Culina +Description: Kulina +Added: 2009-07-29 +%% +Type: language +Subtag: cum +Description: Cumeral +Added: 2009-07-29 +%% +Type: language +Subtag: cuo +Description: Cumanagoto +Added: 2009-07-29 +%% +Type: language +Subtag: cup +Description: Cupeño +Added: 2009-07-29 +%% +Type: language +Subtag: cuq +Description: Cun +Added: 2009-07-29 +%% +Type: language +Subtag: cur +Description: Chhulung +Added: 2009-07-29 +%% +Type: language +Subtag: cus +Description: Cushitic languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: cut +Description: Teutila Cuicatec +Added: 2009-07-29 +%% +Type: language +Subtag: cuu +Description: Tai Ya +Added: 2009-07-29 +%% +Type: language +Subtag: cuv +Description: Cuvok +Added: 2009-07-29 +%% +Type: language +Subtag: cuw +Description: Chukwa +Added: 2009-07-29 +%% +Type: language +Subtag: cux +Description: Tepeuxila Cuicatec +Added: 2009-07-29 +%% +Type: language +Subtag: cvg +Description: Chug +Added: 2009-07-29 +%% +Type: language +Subtag: cvn +Description: Valle Nacional Chinantec +Added: 2009-07-29 +%% +Type: language +Subtag: cwa +Description: Kabwa +Added: 2009-07-29 +%% +Type: language +Subtag: cwb +Description: Maindo +Added: 2009-07-29 +%% +Type: language +Subtag: cwd +Description: Woods Cree +Added: 2009-07-29 +Macrolanguage: cr +%% +Type: language +Subtag: cwe +Description: Kwere +Added: 2009-07-29 +%% +Type: language +Subtag: cwg +Description: Chewong +Description: Cheq Wong +Added: 2009-07-29 +%% +Type: language +Subtag: cwt +Description: Kuwaataay +Added: 2009-07-29 +%% +Type: language +Subtag: cya +Description: Nopala Chatino +Added: 2009-07-29 +%% +Type: language +Subtag: cyb +Description: Cayubaba +Added: 2009-07-29 +%% +Type: language +Subtag: cyo +Description: Cuyonon +Added: 2009-07-29 +%% +Type: language +Subtag: czh +Description: Huizhou Chinese +Added: 2009-07-29 +Macrolanguage: zh +%% +Type: language +Subtag: czk +Description: Knaanic +Added: 2009-07-29 +%% +Type: language +Subtag: czn +Description: Zenzontepec Chatino +Added: 2009-07-29 +%% +Type: language +Subtag: czo +Description: Min Zhong Chinese +Added: 2009-07-29 +Macrolanguage: zh +%% +Type: language +Subtag: czt +Description: Zotung Chin +Added: 2009-07-29 +%% +Type: language +Subtag: daa +Description: Dangaléat +Added: 2009-07-29 +%% +Type: language +Subtag: dac +Description: Dambi +Added: 2009-07-29 +%% +Type: language +Subtag: dad +Description: Marik +Added: 2009-07-29 +%% +Type: language +Subtag: dae +Description: Duupa +Added: 2009-07-29 +%% +Type: language +Subtag: daf +Description: Dan +Added: 2009-07-29 +%% +Type: language +Subtag: dag +Description: Dagbani +Added: 2009-07-29 +%% +Type: language +Subtag: dah +Description: Gwahatike +Added: 2009-07-29 +%% +Type: language +Subtag: dai +Description: Day +Added: 2009-07-29 +%% +Type: language +Subtag: daj +Description: Dar Fur Daju +Added: 2009-07-29 +%% +Type: language +Subtag: dak +Description: Dakota +Added: 2005-10-16 +%% +Type: language +Subtag: dal +Description: Dahalo +Added: 2009-07-29 +%% +Type: language +Subtag: dam +Description: Damakawa +Added: 2009-07-29 +%% +Type: language +Subtag: dao +Description: Daai Chin +Added: 2009-07-29 +%% +Type: language +Subtag: dap +Description: Nisi (India) +Added: 2009-07-29 +Deprecated: 2012-08-12 +Comments: see njz, tgj +%% +Type: language +Subtag: daq +Description: Dandami Maria +Added: 2009-07-29 +%% +Type: language +Subtag: dar +Description: Dargwa +Added: 2005-10-16 +%% +Type: language +Subtag: das +Description: Daho-Doo +Added: 2009-07-29 +%% +Type: language +Subtag: dau +Description: Dar Sila Daju +Added: 2009-07-29 +%% +Type: language +Subtag: dav +Description: Taita +Description: Dawida +Added: 2009-07-29 +%% +Type: language +Subtag: daw +Description: Davawenyo +Added: 2009-07-29 +%% +Type: language +Subtag: dax +Description: Dayi +Added: 2009-07-29 +%% +Type: language +Subtag: day +Description: Land Dayak languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: daz +Description: Dao +Added: 2009-07-29 +%% +Type: language +Subtag: dba +Description: Bangi Me +Added: 2009-07-29 +%% +Type: language +Subtag: dbb +Description: Deno +Added: 2009-07-29 +%% +Type: language +Subtag: dbd +Description: Dadiya +Added: 2009-07-29 +%% +Type: language +Subtag: dbe +Description: Dabe +Added: 2009-07-29 +%% +Type: language +Subtag: dbf +Description: Edopi +Added: 2009-07-29 +%% +Type: language +Subtag: dbg +Description: Dogul Dom Dogon +Added: 2009-07-29 +%% +Type: language +Subtag: dbi +Description: Doka +Added: 2009-07-29 +%% +Type: language +Subtag: dbj +Description: Ida'an +Added: 2009-07-29 +%% +Type: language +Subtag: dbl +Description: Dyirbal +Added: 2009-07-29 +%% +Type: language +Subtag: dbm +Description: Duguri +Added: 2009-07-29 +%% +Type: language +Subtag: dbn +Description: Duriankere +Added: 2009-07-29 +%% +Type: language +Subtag: dbo +Description: Dulbu +Added: 2009-07-29 +%% +Type: language +Subtag: dbp +Description: Duwai +Added: 2009-07-29 +%% +Type: language +Subtag: dbq +Description: Daba +Added: 2009-07-29 +%% +Type: language +Subtag: dbr +Description: Dabarre +Added: 2009-07-29 +%% +Type: language +Subtag: dbt +Description: Ben Tey Dogon +Added: 2012-08-12 +%% +Type: language +Subtag: dbu +Description: Bondum Dom Dogon +Added: 2009-07-29 +%% +Type: language +Subtag: dbv +Description: Dungu +Added: 2009-07-29 +%% +Type: language +Subtag: dbw +Description: Bankan Tey Dogon +Added: 2012-08-12 +%% +Type: language +Subtag: dby +Description: Dibiyaso +Added: 2009-07-29 +%% +Type: language +Subtag: dcc +Description: Deccan +Added: 2009-07-29 +%% +Type: language +Subtag: dcr +Description: Negerhollands +Added: 2009-07-29 +%% +Type: language +Subtag: dda +Description: Dadi Dadi +Added: 2012-08-12 +%% +Type: language +Subtag: ddd +Description: Dongotono +Added: 2009-07-29 +%% +Type: language +Subtag: dde +Description: Doondo +Added: 2009-07-29 +%% +Type: language +Subtag: ddg +Description: Fataluku +Added: 2009-07-29 +%% +Type: language +Subtag: ddi +Description: West Goodenough +Added: 2009-07-29 +%% +Type: language +Subtag: ddj +Description: Jaru +Added: 2009-07-29 +%% +Type: language +Subtag: ddn +Description: Dendi (Benin) +Added: 2009-07-29 +%% +Type: language +Subtag: ddo +Description: Dido +Added: 2009-07-29 +%% +Type: language +Subtag: ddr +Description: Dhudhuroa +Added: 2012-08-12 +%% +Type: language +Subtag: dds +Description: Donno So Dogon +Added: 2009-07-29 +%% +Type: language +Subtag: ddw +Description: Dawera-Daweloor +Added: 2009-07-29 +%% +Type: language +Subtag: dec +Description: Dagik +Added: 2009-07-29 +%% +Type: language +Subtag: ded +Description: Dedua +Added: 2009-07-29 +%% +Type: language +Subtag: dee +Description: Dewoin +Added: 2009-07-29 +%% +Type: language +Subtag: def +Description: Dezfuli +Added: 2009-07-29 +%% +Type: language +Subtag: deg +Description: Degema +Added: 2009-07-29 +%% +Type: language +Subtag: deh +Description: Dehwari +Added: 2009-07-29 +%% +Type: language +Subtag: dei +Description: Demisa +Added: 2009-07-29 +%% +Type: language +Subtag: dek +Description: Dek +Added: 2009-07-29 +%% +Type: language +Subtag: del +Description: Delaware +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: dem +Description: Dem +Added: 2009-07-29 +%% +Type: language +Subtag: den +Description: Slave (Athapascan) +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: dep +Description: Pidgin Delaware +Added: 2009-07-29 +%% +Type: language +Subtag: deq +Description: Dendi (Central African Republic) +Added: 2009-07-29 +%% +Type: language +Subtag: der +Description: Deori +Added: 2009-07-29 +%% +Type: language +Subtag: des +Description: Desano +Added: 2009-07-29 +%% +Type: language +Subtag: dev +Description: Domung +Added: 2009-07-29 +%% +Type: language +Subtag: dez +Description: Dengese +Added: 2009-07-29 +%% +Type: language +Subtag: dga +Description: Southern Dagaare +Added: 2009-07-29 +%% +Type: language +Subtag: dgb +Description: Bunoge Dogon +Added: 2009-07-29 +%% +Type: language +Subtag: dgc +Description: Casiguran Dumagat Agta +Added: 2009-07-29 +%% +Type: language +Subtag: dgd +Description: Dagaari Dioula +Added: 2009-07-29 +%% +Type: language +Subtag: dge +Description: Degenan +Added: 2009-07-29 +%% +Type: language +Subtag: dgg +Description: Doga +Added: 2009-07-29 +%% +Type: language +Subtag: dgh +Description: Dghwede +Added: 2009-07-29 +%% +Type: language +Subtag: dgi +Description: Northern Dagara +Added: 2009-07-29 +%% +Type: language +Subtag: dgk +Description: Dagba +Added: 2009-07-29 +%% +Type: language +Subtag: dgl +Description: Andaandi +Description: Dongolawi +Added: 2012-08-12 +%% +Type: language +Subtag: dgn +Description: Dagoman +Added: 2009-07-29 +%% +Type: language +Subtag: dgo +Description: Dogri (individual language) +Added: 2009-07-29 +Macrolanguage: doi +%% +Type: language +Subtag: dgr +Description: Dogrib +Added: 2005-10-16 +%% +Type: language +Subtag: dgs +Description: Dogoso +Added: 2009-07-29 +%% +Type: language +Subtag: dgt +Description: Ndrag'ngith +Added: 2012-08-12 +%% +Type: language +Subtag: dgu +Description: Degaru +Added: 2009-07-29 +%% +Type: language +Subtag: dgw +Description: Daungwurrung +Added: 2012-08-12 +%% +Type: language +Subtag: dgx +Description: Doghoro +Added: 2009-07-29 +%% +Type: language +Subtag: dgz +Description: Daga +Added: 2009-07-29 +%% +Type: language +Subtag: dha +Description: Dhanwar (India) +Added: 2009-07-29 +Deprecated: 2011-08-16 +%% +Type: language +Subtag: dhd +Description: Dhundari +Added: 2009-07-29 +Macrolanguage: mwr +%% +Type: language +Subtag: dhg +Description: Dhangu +Added: 2009-07-29 +%% +Type: language +Subtag: dhi +Description: Dhimal +Added: 2009-07-29 +%% +Type: language +Subtag: dhl +Description: Dhalandji +Added: 2009-07-29 +%% +Type: language +Subtag: dhm +Description: Zemba +Added: 2009-07-29 +%% +Type: language +Subtag: dhn +Description: Dhanki +Added: 2009-07-29 +%% +Type: language +Subtag: dho +Description: Dhodia +Added: 2009-07-29 +%% +Type: language +Subtag: dhr +Description: Dhargari +Added: 2009-07-29 +%% +Type: language +Subtag: dhs +Description: Dhaiso +Added: 2009-07-29 +%% +Type: language +Subtag: dhu +Description: Dhurga +Added: 2009-07-29 +%% +Type: language +Subtag: dhv +Description: Dehu +Added: 2009-07-29 +%% +Type: language +Subtag: dhw +Description: Dhanwar (Nepal) +Added: 2009-07-29 +%% +Type: language +Subtag: dia +Description: Dia +Added: 2009-07-29 +%% +Type: language +Subtag: dib +Description: South Central Dinka +Added: 2009-07-29 +Macrolanguage: din +%% +Type: language +Subtag: dic +Description: Lakota Dida +Added: 2009-07-29 +%% +Type: language +Subtag: did +Description: Didinga +Added: 2009-07-29 +%% +Type: language +Subtag: dif +Description: Dieri +Added: 2009-07-29 +%% +Type: language +Subtag: dig +Description: Digo +Description: Chidigo +Added: 2009-07-29 +%% +Type: language +Subtag: dih +Description: Kumiai +Added: 2009-07-29 +%% +Type: language +Subtag: dii +Description: Dimbong +Added: 2009-07-29 +%% +Type: language +Subtag: dij +Description: Dai +Added: 2009-07-29 +%% +Type: language +Subtag: dik +Description: Southwestern Dinka +Added: 2009-07-29 +Macrolanguage: din +%% +Type: language +Subtag: dil +Description: Dilling +Added: 2009-07-29 +%% +Type: language +Subtag: dim +Description: Dime +Added: 2009-07-29 +%% +Type: language +Subtag: din +Description: Dinka +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: dio +Description: Dibo +Added: 2009-07-29 +%% +Type: language +Subtag: dip +Description: Northeastern Dinka +Added: 2009-07-29 +Macrolanguage: din +%% +Type: language +Subtag: diq +Description: Dimli (individual language) +Added: 2009-07-29 +Macrolanguage: zza +%% +Type: language +Subtag: dir +Description: Dirim +Added: 2009-07-29 +%% +Type: language +Subtag: dis +Description: Dimasa +Added: 2009-07-29 +%% +Type: language +Subtag: dit +Description: Dirari +Added: 2009-07-29 +%% +Type: language +Subtag: diu +Description: Diriku +Added: 2009-07-29 +%% +Type: language +Subtag: diw +Description: Northwestern Dinka +Added: 2009-07-29 +Macrolanguage: din +%% +Type: language +Subtag: dix +Description: Dixon Reef +Added: 2009-07-29 +%% +Type: language +Subtag: diy +Description: Diuwe +Added: 2009-07-29 +%% +Type: language +Subtag: diz +Description: Ding +Added: 2009-07-29 +%% +Type: language +Subtag: dja +Description: Djadjawurrung +Added: 2012-08-12 +%% +Type: language +Subtag: djb +Description: Djinba +Added: 2009-07-29 +%% +Type: language +Subtag: djc +Description: Dar Daju Daju +Added: 2009-07-29 +%% +Type: language +Subtag: djd +Description: Djamindjung +Added: 2009-07-29 +%% +Type: language +Subtag: dje +Description: Zarma +Added: 2009-07-29 +%% +Type: language +Subtag: djf +Description: Djangun +Added: 2009-07-29 +%% +Type: language +Subtag: dji +Description: Djinang +Added: 2009-07-29 +%% +Type: language +Subtag: djj +Description: Djeebbana +Added: 2009-07-29 +%% +Type: language +Subtag: djk +Description: Eastern Maroon Creole +Description: Businenge Tongo +Description: Nenge +Added: 2009-07-29 +%% +Type: language +Subtag: djl +Description: Djiwarli +Added: 2009-07-29 +%% +Type: language +Subtag: djm +Description: Jamsay Dogon +Added: 2009-07-29 +%% +Type: language +Subtag: djn +Description: Djauan +Added: 2009-07-29 +%% +Type: language +Subtag: djo +Description: Jangkang +Added: 2009-07-29 +%% +Type: language +Subtag: djr +Description: Djambarrpuyngu +Added: 2009-07-29 +%% +Type: language +Subtag: dju +Description: Kapriman +Added: 2009-07-29 +%% +Type: language +Subtag: djw +Description: Djawi +Added: 2009-07-29 +%% +Type: language +Subtag: dka +Description: Dakpakha +Added: 2009-07-29 +%% +Type: language +Subtag: dkk +Description: Dakka +Added: 2009-07-29 +%% +Type: language +Subtag: dkl +Description: Kolum So Dogon +Added: 2009-07-29 +Deprecated: 2011-08-16 +Comments: see aqd, dmb +%% +Type: language +Subtag: dkr +Description: Kuijau +Added: 2009-07-29 +%% +Type: language +Subtag: dks +Description: Southeastern Dinka +Added: 2009-07-29 +Macrolanguage: din +%% +Type: language +Subtag: dkx +Description: Mazagway +Added: 2009-07-29 +%% +Type: language +Subtag: dlg +Description: Dolgan +Added: 2009-07-29 +%% +Type: language +Subtag: dlm +Description: Dalmatian +Added: 2009-07-29 +%% +Type: language +Subtag: dln +Description: Darlong +Added: 2009-07-29 +%% +Type: language +Subtag: dma +Description: Duma +Added: 2009-07-29 +%% +Type: language +Subtag: dmb +Description: Mombo Dogon +Added: 2011-08-16 +%% +Type: language +Subtag: dmc +Description: Dimir +Added: 2009-07-29 +%% +Type: language +Subtag: dmd +Description: Madhi Madhi +Added: 2012-08-12 +%% +Type: language +Subtag: dme +Description: Dugwor +Added: 2009-07-29 +%% +Type: language +Subtag: dmg +Description: Upper Kinabatangan +Added: 2009-07-29 +%% +Type: language +Subtag: dmk +Description: Domaaki +Added: 2009-07-29 +%% +Type: language +Subtag: dml +Description: Dameli +Added: 2009-07-29 +%% +Type: language +Subtag: dmm +Description: Dama +Added: 2009-07-29 +%% +Type: language +Subtag: dmn +Description: Mande languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: dmo +Description: Kemedzung +Added: 2009-07-29 +%% +Type: language +Subtag: dmr +Description: East Damar +Added: 2009-07-29 +%% +Type: language +Subtag: dms +Description: Dampelas +Added: 2009-07-29 +%% +Type: language +Subtag: dmu +Description: Dubu +Description: Tebi +Added: 2009-07-29 +%% +Type: language +Subtag: dmv +Description: Dumpas +Added: 2009-07-29 +%% +Type: language +Subtag: dmx +Description: Dema +Added: 2009-07-29 +%% +Type: language +Subtag: dmy +Description: Demta +Description: Sowari +Added: 2009-07-29 +%% +Type: language +Subtag: dna +Description: Upper Grand Valley Dani +Added: 2009-07-29 +%% +Type: language +Subtag: dnd +Description: Daonda +Added: 2009-07-29 +%% +Type: language +Subtag: dne +Description: Ndendeule +Added: 2009-07-29 +%% +Type: language +Subtag: dng +Description: Dungan +Added: 2009-07-29 +%% +Type: language +Subtag: dni +Description: Lower Grand Valley Dani +Added: 2009-07-29 +%% +Type: language +Subtag: dnk +Description: Dengka +Added: 2009-07-29 +%% +Type: language +Subtag: dnn +Description: Dzùùngoo +Added: 2009-07-29 +%% +Type: language +Subtag: dnr +Description: Danaru +Added: 2009-07-29 +%% +Type: language +Subtag: dnt +Description: Mid Grand Valley Dani +Added: 2009-07-29 +%% +Type: language +Subtag: dnu +Description: Danau +Added: 2009-07-29 +%% +Type: language +Subtag: dnv +Description: Danu +Added: 2012-08-12 +%% +Type: language +Subtag: dnw +Description: Western Dani +Added: 2009-07-29 +%% +Type: language +Subtag: dny +Description: Dení +Added: 2009-07-29 +%% +Type: language +Subtag: doa +Description: Dom +Added: 2009-07-29 +%% +Type: language +Subtag: dob +Description: Dobu +Added: 2009-07-29 +%% +Type: language +Subtag: doc +Description: Northern Dong +Added: 2009-07-29 +%% +Type: language +Subtag: doe +Description: Doe +Added: 2009-07-29 +%% +Type: language +Subtag: dof +Description: Domu +Added: 2009-07-29 +%% +Type: language +Subtag: doh +Description: Dong +Added: 2009-07-29 +%% +Type: language +Subtag: doi +Description: Dogri (macrolanguage) +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: dok +Description: Dondo +Added: 2009-07-29 +%% +Type: language +Subtag: dol +Description: Doso +Added: 2009-07-29 +%% +Type: language +Subtag: don +Description: Toura (Papua New Guinea) +Added: 2009-07-29 +%% +Type: language +Subtag: doo +Description: Dongo +Added: 2009-07-29 +%% +Type: language +Subtag: dop +Description: Lukpa +Added: 2009-07-29 +%% +Type: language +Subtag: doq +Description: Dominican Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: dor +Description: Dori'o +Added: 2009-07-29 +%% +Type: language +Subtag: dos +Description: Dogosé +Added: 2009-07-29 +%% +Type: language +Subtag: dot +Description: Dass +Added: 2009-07-29 +%% +Type: language +Subtag: dov +Description: Dombe +Added: 2009-07-29 +%% +Type: language +Subtag: dow +Description: Doyayo +Added: 2009-07-29 +%% +Type: language +Subtag: dox +Description: Bussa +Added: 2009-07-29 +%% +Type: language +Subtag: doy +Description: Dompo +Added: 2009-07-29 +%% +Type: language +Subtag: doz +Description: Dorze +Added: 2009-07-29 +%% +Type: language +Subtag: dpp +Description: Papar +Added: 2009-07-29 +%% +Type: language +Subtag: dra +Description: Dravidian languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: drb +Description: Dair +Added: 2009-07-29 +%% +Type: language +Subtag: drc +Description: Minderico +Added: 2011-08-16 +%% +Type: language +Subtag: drd +Description: Darmiya +Added: 2009-07-29 +%% +Type: language +Subtag: dre +Description: Dolpo +Added: 2009-07-29 +%% +Type: language +Subtag: drg +Description: Rungus +Added: 2009-07-29 +%% +Type: language +Subtag: drh +Description: Darkhat +Added: 2009-07-29 +Deprecated: 2010-03-11 +Preferred-Value: khk +%% +Type: language +Subtag: dri +Description: C'lela +Added: 2009-07-29 +%% +Type: language +Subtag: drl +Description: Paakantyi +Added: 2009-07-29 +%% +Type: language +Subtag: drn +Description: West Damar +Added: 2009-07-29 +%% +Type: language +Subtag: dro +Description: Daro-Matu Melanau +Added: 2009-07-29 +%% +Type: language +Subtag: drq +Description: Dura +Added: 2009-07-29 +%% +Type: language +Subtag: drr +Description: Dororo +Added: 2009-07-29 +%% +Type: language +Subtag: drs +Description: Gedeo +Added: 2009-07-29 +%% +Type: language +Subtag: drt +Description: Drents +Added: 2009-07-29 +%% +Type: language +Subtag: dru +Description: Rukai +Added: 2009-07-29 +%% +Type: language +Subtag: drw +Description: Darwazi +Added: 2009-07-29 +Deprecated: 2010-03-11 +Preferred-Value: prs +%% +Type: language +Subtag: dry +Description: Darai +Added: 2009-07-29 +%% +Type: language +Subtag: dsb +Description: Lower Sorbian +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: dse +Description: Dutch Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: dsh +Description: Daasanach +Added: 2009-07-29 +%% +Type: language +Subtag: dsi +Description: Disa +Added: 2009-07-29 +%% +Type: language +Subtag: dsl +Description: Danish Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: dsn +Description: Dusner +Added: 2009-07-29 +%% +Type: language +Subtag: dso +Description: Desiya +Added: 2009-07-29 +%% +Type: language +Subtag: dsq +Description: Tadaksahak +Added: 2009-07-29 +%% +Type: language +Subtag: dta +Description: Daur +Added: 2009-07-29 +%% +Type: language +Subtag: dtb +Description: Labuk-Kinabatangan Kadazan +Added: 2009-07-29 +%% +Type: language +Subtag: dtd +Description: Ditidaht +Added: 2011-08-16 +%% +Type: language +Subtag: dth +Description: Adithinngithigh +Added: 2012-08-12 +%% +Type: language +Subtag: dti +Description: Ana Tinga Dogon +Added: 2009-07-29 +%% +Type: language +Subtag: dtk +Description: Tene Kan Dogon +Added: 2009-07-29 +%% +Type: language +Subtag: dtm +Description: Tomo Kan Dogon +Added: 2009-07-29 +%% +Type: language +Subtag: dto +Description: Tommo So Dogon +Added: 2012-08-12 +%% +Type: language +Subtag: dtp +Description: Central Dusun +Added: 2009-07-29 +%% +Type: language +Subtag: dtr +Description: Lotud +Added: 2009-07-29 +%% +Type: language +Subtag: dts +Description: Toro So Dogon +Added: 2009-07-29 +%% +Type: language +Subtag: dtt +Description: Toro Tegu Dogon +Added: 2009-07-29 +%% +Type: language +Subtag: dtu +Description: Tebul Ure Dogon +Added: 2009-07-29 +%% +Type: language +Subtag: dty +Description: Dotyali +Added: 2012-08-12 +Macrolanguage: ne +%% +Type: language +Subtag: dua +Description: Duala +Added: 2005-10-16 +%% +Type: language +Subtag: dub +Description: Dubli +Added: 2009-07-29 +%% +Type: language +Subtag: duc +Description: Duna +Added: 2009-07-29 +%% +Type: language +Subtag: dud +Description: Hun-Saare +Added: 2009-07-29 +%% +Type: language +Subtag: due +Description: Umiray Dumaget Agta +Added: 2009-07-29 +%% +Type: language +Subtag: duf +Description: Dumbea +Added: 2009-07-29 +%% +Type: language +Subtag: dug +Description: Duruma +Description: Chiduruma +Added: 2009-07-29 +%% +Type: language +Subtag: duh +Description: Dungra Bhil +Added: 2009-07-29 +%% +Type: language +Subtag: dui +Description: Dumun +Added: 2009-07-29 +%% +Type: language +Subtag: duj +Description: Dhuwal +Added: 2009-07-29 +%% +Type: language +Subtag: duk +Description: Uyajitaya +Added: 2009-07-29 +%% +Type: language +Subtag: dul +Description: Alabat Island Agta +Added: 2009-07-29 +%% +Type: language +Subtag: dum +Description: Middle Dutch (ca. 1050-1350) +Added: 2005-10-16 +%% +Type: language +Subtag: dun +Description: Dusun Deyah +Added: 2009-07-29 +%% +Type: language +Subtag: duo +Description: Dupaninan Agta +Added: 2009-07-29 +%% +Type: language +Subtag: dup +Description: Duano +Added: 2009-07-29 +Macrolanguage: ms +%% +Type: language +Subtag: duq +Description: Dusun Malang +Added: 2009-07-29 +%% +Type: language +Subtag: dur +Description: Dii +Added: 2009-07-29 +%% +Type: language +Subtag: dus +Description: Dumi +Added: 2009-07-29 +%% +Type: language +Subtag: duu +Description: Drung +Added: 2009-07-29 +%% +Type: language +Subtag: duv +Description: Duvle +Added: 2009-07-29 +%% +Type: language +Subtag: duw +Description: Dusun Witu +Added: 2009-07-29 +%% +Type: language +Subtag: dux +Description: Duungooma +Added: 2009-07-29 +%% +Type: language +Subtag: duy +Description: Dicamay Agta +Added: 2009-07-29 +%% +Type: language +Subtag: duz +Description: Duli +Added: 2009-07-29 +%% +Type: language +Subtag: dva +Description: Duau +Added: 2009-07-29 +%% +Type: language +Subtag: dwa +Description: Diri +Added: 2009-07-29 +%% +Type: language +Subtag: dwl +Description: Walo Kumbe Dogon +Added: 2009-07-29 +Deprecated: 2012-08-12 +Comments: see dbt, dbw +%% +Type: language +Subtag: dwr +Description: Dawro +Added: 2009-07-29 +%% +Type: language +Subtag: dws +Description: Dutton World Speedwords +Added: 2009-07-29 +%% +Type: language +Subtag: dww +Description: Dawawa +Added: 2009-07-29 +%% +Type: language +Subtag: dya +Description: Dyan +Added: 2009-07-29 +%% +Type: language +Subtag: dyb +Description: Dyaberdyaber +Added: 2009-07-29 +%% +Type: language +Subtag: dyd +Description: Dyugun +Added: 2009-07-29 +%% +Type: language +Subtag: dyg +Description: Villa Viciosa Agta +Added: 2009-07-29 +%% +Type: language +Subtag: dyi +Description: Djimini Senoufo +Added: 2009-07-29 +%% +Type: language +Subtag: dym +Description: Yanda Dom Dogon +Added: 2009-07-29 +%% +Type: language +Subtag: dyn +Description: Dyangadi +Added: 2009-07-29 +%% +Type: language +Subtag: dyo +Description: Jola-Fonyi +Added: 2009-07-29 +%% +Type: language +Subtag: dyu +Description: Dyula +Added: 2005-10-16 +%% +Type: language +Subtag: dyy +Description: Dyaabugay +Added: 2009-07-29 +%% +Type: language +Subtag: dza +Description: Tunzu +Added: 2009-07-29 +%% +Type: language +Subtag: dzd +Description: Daza +Added: 2009-07-29 +%% +Type: language +Subtag: dzg +Description: Dazaga +Added: 2009-07-29 +%% +Type: language +Subtag: dzl +Description: Dzalakha +Added: 2009-07-29 +%% +Type: language +Subtag: dzn +Description: Dzando +Added: 2009-07-29 +%% +Type: language +Subtag: ebg +Description: Ebughu +Added: 2009-07-29 +%% +Type: language +Subtag: ebk +Description: Eastern Bontok +Added: 2010-03-11 +Macrolanguage: bnc +%% +Type: language +Subtag: ebo +Description: Teke-Ebo +Added: 2009-07-29 +%% +Type: language +Subtag: ebr +Description: Ebrié +Added: 2009-07-29 +%% +Type: language +Subtag: ebu +Description: Embu +Description: Kiembu +Added: 2009-07-29 +%% +Type: language +Subtag: ecr +Description: Eteocretan +Added: 2009-07-29 +%% +Type: language +Subtag: ecs +Description: Ecuadorian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: ecy +Description: Eteocypriot +Added: 2009-07-29 +%% +Type: language +Subtag: eee +Description: E +Added: 2009-07-29 +%% +Type: language +Subtag: efa +Description: Efai +Added: 2009-07-29 +%% +Type: language +Subtag: efe +Description: Efe +Added: 2009-07-29 +%% +Type: language +Subtag: efi +Description: Efik +Added: 2005-10-16 +%% +Type: language +Subtag: ega +Description: Ega +Added: 2009-07-29 +%% +Type: language +Subtag: egl +Description: Emilian +Added: 2009-07-29 +%% +Type: language +Subtag: ego +Description: Eggon +Added: 2009-07-29 +%% +Type: language +Subtag: egx +Description: Egyptian languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: egy +Description: Egyptian (Ancient) +Added: 2005-10-16 +%% +Type: language +Subtag: ehu +Description: Ehueun +Added: 2009-07-29 +%% +Type: language +Subtag: eip +Description: Eipomek +Added: 2009-07-29 +%% +Type: language +Subtag: eit +Description: Eitiep +Added: 2009-07-29 +%% +Type: language +Subtag: eiv +Description: Askopan +Added: 2009-07-29 +%% +Type: language +Subtag: eja +Description: Ejamat +Added: 2009-07-29 +%% +Type: language +Subtag: eka +Description: Ekajuk +Added: 2005-10-16 +%% +Type: language +Subtag: eke +Description: Ekit +Added: 2009-07-29 +%% +Type: language +Subtag: ekg +Description: Ekari +Added: 2009-07-29 +%% +Type: language +Subtag: eki +Description: Eki +Added: 2009-07-29 +%% +Type: language +Subtag: ekk +Description: Standard Estonian +Added: 2009-07-29 +Macrolanguage: et +%% +Type: language +Subtag: ekl +Description: Kol (Bangladesh) +Description: Kol +Added: 2009-07-29 +%% +Type: language +Subtag: ekm +Description: Elip +Added: 2009-07-29 +%% +Type: language +Subtag: eko +Description: Koti +Added: 2009-07-29 +%% +Type: language +Subtag: ekp +Description: Ekpeye +Added: 2009-07-29 +%% +Type: language +Subtag: ekr +Description: Yace +Added: 2009-07-29 +%% +Type: language +Subtag: eky +Description: Eastern Kayah +Added: 2009-07-29 +%% +Type: language +Subtag: ele +Description: Elepi +Added: 2009-07-29 +%% +Type: language +Subtag: elh +Description: El Hugeirat +Added: 2009-07-29 +%% +Type: language +Subtag: eli +Description: Nding +Added: 2009-07-29 +%% +Type: language +Subtag: elk +Description: Elkei +Added: 2009-07-29 +%% +Type: language +Subtag: elm +Description: Eleme +Added: 2009-07-29 +%% +Type: language +Subtag: elo +Description: El Molo +Added: 2009-07-29 +%% +Type: language +Subtag: elp +Description: Elpaputih +Added: 2009-07-29 +Deprecated: 2012-08-12 +Comments: see amq, plh +%% +Type: language +Subtag: elu +Description: Elu +Added: 2009-07-29 +%% +Type: language +Subtag: elx +Description: Elamite +Added: 2005-10-16 +%% +Type: language +Subtag: ema +Description: Emai-Iuleha-Ora +Added: 2009-07-29 +%% +Type: language +Subtag: emb +Description: Embaloh +Added: 2009-07-29 +%% +Type: language +Subtag: eme +Description: Emerillon +Added: 2009-07-29 +%% +Type: language +Subtag: emg +Description: Eastern Meohang +Added: 2009-07-29 +%% +Type: language +Subtag: emi +Description: Mussau-Emira +Added: 2009-07-29 +%% +Type: language +Subtag: emk +Description: Eastern Maninkakan +Added: 2009-07-29 +Macrolanguage: man +%% +Type: language +Subtag: emm +Description: Mamulique +Added: 2009-07-29 +%% +Type: language +Subtag: emn +Description: Eman +Added: 2009-07-29 +%% +Type: language +Subtag: emo +Description: Emok +Added: 2009-07-29 +%% +Type: language +Subtag: emp +Description: Northern Emberá +Added: 2009-07-29 +%% +Type: language +Subtag: ems +Description: Pacific Gulf Yupik +Added: 2009-07-29 +%% +Type: language +Subtag: emu +Description: Eastern Muria +Added: 2009-07-29 +%% +Type: language +Subtag: emw +Description: Emplawas +Added: 2009-07-29 +%% +Type: language +Subtag: emx +Description: Erromintxela +Added: 2010-03-11 +%% +Type: language +Subtag: emy +Description: Epigraphic Mayan +Added: 2009-07-29 +%% +Type: language +Subtag: ena +Description: Apali +Added: 2009-07-29 +%% +Type: language +Subtag: enb +Description: Markweeta +Added: 2009-07-29 +Macrolanguage: kln +%% +Type: language +Subtag: enc +Description: En +Added: 2009-07-29 +%% +Type: language +Subtag: end +Description: Ende +Added: 2009-07-29 +%% +Type: language +Subtag: enf +Description: Forest Enets +Added: 2009-07-29 +%% +Type: language +Subtag: enh +Description: Tundra Enets +Added: 2009-07-29 +%% +Type: language +Subtag: enm +Description: Middle English (1100-1500) +Added: 2005-10-16 +%% +Type: language +Subtag: enn +Description: Engenni +Added: 2009-07-29 +%% +Type: language +Subtag: eno +Description: Enggano +Added: 2009-07-29 +%% +Type: language +Subtag: enq +Description: Enga +Added: 2009-07-29 +%% +Type: language +Subtag: enr +Description: Emumu +Description: Emem +Added: 2009-07-29 +%% +Type: language +Subtag: enu +Description: Enu +Added: 2009-07-29 +%% +Type: language +Subtag: env +Description: Enwan (Edu State) +Added: 2009-07-29 +%% +Type: language +Subtag: enw +Description: Enwan (Akwa Ibom State) +Added: 2009-07-29 +%% +Type: language +Subtag: eot +Description: Beti (Côte d'Ivoire) +Added: 2009-07-29 +%% +Type: language +Subtag: epi +Description: Epie +Added: 2009-07-29 +%% +Type: language +Subtag: era +Description: Eravallan +Added: 2009-07-29 +%% +Type: language +Subtag: erg +Description: Sie +Added: 2009-07-29 +%% +Type: language +Subtag: erh +Description: Eruwa +Added: 2009-07-29 +%% +Type: language +Subtag: eri +Description: Ogea +Added: 2009-07-29 +%% +Type: language +Subtag: erk +Description: South Efate +Added: 2009-07-29 +%% +Type: language +Subtag: ero +Description: Horpa +Added: 2009-07-29 +%% +Type: language +Subtag: err +Description: Erre +Added: 2009-07-29 +%% +Type: language +Subtag: ers +Description: Ersu +Added: 2009-07-29 +%% +Type: language +Subtag: ert +Description: Eritai +Added: 2009-07-29 +%% +Type: language +Subtag: erw +Description: Erokwanas +Added: 2009-07-29 +%% +Type: language +Subtag: ese +Description: Ese Ejja +Added: 2009-07-29 +%% +Type: language +Subtag: esh +Description: Eshtehardi +Added: 2009-07-29 +%% +Type: language +Subtag: esi +Description: North Alaskan Inupiatun +Added: 2009-07-29 +Macrolanguage: ik +%% +Type: language +Subtag: esk +Description: Northwest Alaska Inupiatun +Added: 2009-07-29 +Macrolanguage: ik +%% +Type: language +Subtag: esl +Description: Egypt Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: esm +Description: Esuma +Added: 2009-07-29 +%% +Type: language +Subtag: esn +Description: Salvadoran Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: eso +Description: Estonian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: esq +Description: Esselen +Added: 2009-07-29 +%% +Type: language +Subtag: ess +Description: Central Siberian Yupik +Added: 2009-07-29 +%% +Type: language +Subtag: esu +Description: Central Yupik +Added: 2009-07-29 +%% +Type: language +Subtag: esx +Description: Eskimo-Aleut languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: etb +Description: Etebi +Added: 2009-07-29 +%% +Type: language +Subtag: etc +Description: Etchemin +Added: 2009-07-29 +%% +Type: language +Subtag: eth +Description: Ethiopian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: etn +Description: Eton (Vanuatu) +Added: 2009-07-29 +%% +Type: language +Subtag: eto +Description: Eton (Cameroon) +Added: 2009-07-29 +%% +Type: language +Subtag: etr +Description: Edolo +Added: 2009-07-29 +%% +Type: language +Subtag: ets +Description: Yekhee +Added: 2009-07-29 +%% +Type: language +Subtag: ett +Description: Etruscan +Added: 2009-07-29 +%% +Type: language +Subtag: etu +Description: Ejagham +Added: 2009-07-29 +%% +Type: language +Subtag: etx +Description: Eten +Added: 2009-07-29 +%% +Type: language +Subtag: etz +Description: Semimi +Added: 2009-07-29 +%% +Type: language +Subtag: euq +Description: Basque (family) +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: eve +Description: Even +Added: 2009-07-29 +%% +Type: language +Subtag: evh +Description: Uvbie +Added: 2009-07-29 +%% +Type: language +Subtag: evn +Description: Evenki +Added: 2009-07-29 +%% +Type: language +Subtag: ewo +Description: Ewondo +Added: 2005-10-16 +%% +Type: language +Subtag: ext +Description: Extremaduran +Added: 2009-07-29 +%% +Type: language +Subtag: eya +Description: Eyak +Added: 2009-07-29 +%% +Type: language +Subtag: eyo +Description: Keiyo +Added: 2009-07-29 +Macrolanguage: kln +%% +Type: language +Subtag: eze +Description: Uzekwe +Added: 2009-07-29 +%% +Type: language +Subtag: faa +Description: Fasu +Added: 2009-07-29 +%% +Type: language +Subtag: fab +Description: Fa D'ambu +Added: 2009-07-29 +%% +Type: language +Subtag: fad +Description: Wagi +Added: 2009-07-29 +%% +Type: language +Subtag: faf +Description: Fagani +Added: 2009-07-29 +%% +Type: language +Subtag: fag +Description: Finongan +Added: 2009-07-29 +%% +Type: language +Subtag: fah +Description: Baissa Fali +Added: 2009-07-29 +%% +Type: language +Subtag: fai +Description: Faiwol +Added: 2009-07-29 +%% +Type: language +Subtag: faj +Description: Faita +Added: 2009-07-29 +%% +Type: language +Subtag: fak +Description: Fang (Cameroon) +Added: 2009-07-29 +%% +Type: language +Subtag: fal +Description: South Fali +Added: 2009-07-29 +%% +Type: language +Subtag: fam +Description: Fam +Added: 2009-07-29 +%% +Type: language +Subtag: fan +Description: Fang (Equatorial Guinea) +Added: 2005-10-16 +%% +Type: language +Subtag: fap +Description: Palor +Added: 2009-07-29 +%% +Type: language +Subtag: far +Description: Fataleka +Added: 2009-07-29 +%% +Type: language +Subtag: fat +Description: Fanti +Added: 2005-10-16 +Macrolanguage: ak +%% +Type: language +Subtag: fau +Description: Fayu +Added: 2009-07-29 +%% +Type: language +Subtag: fax +Description: Fala +Added: 2009-07-29 +%% +Type: language +Subtag: fay +Description: Southwestern Fars +Added: 2009-07-29 +%% +Type: language +Subtag: faz +Description: Northwestern Fars +Added: 2009-07-29 +%% +Type: language +Subtag: fbl +Description: West Albay Bikol +Added: 2010-03-11 +Macrolanguage: bik +%% +Type: language +Subtag: fcs +Description: Quebec Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: fer +Description: Feroge +Added: 2009-07-29 +%% +Type: language +Subtag: ffi +Description: Foia Foia +Added: 2009-07-29 +%% +Type: language +Subtag: ffm +Description: Maasina Fulfulde +Added: 2009-07-29 +Macrolanguage: ff +%% +Type: language +Subtag: fgr +Description: Fongoro +Added: 2009-07-29 +%% +Type: language +Subtag: fia +Description: Nobiin +Added: 2009-07-29 +%% +Type: language +Subtag: fie +Description: Fyer +Added: 2009-07-29 +%% +Type: language +Subtag: fil +Description: Filipino +Description: Pilipino +Added: 2005-10-16 +%% +Type: language +Subtag: fip +Description: Fipa +Added: 2009-07-29 +%% +Type: language +Subtag: fir +Description: Firan +Added: 2009-07-29 +%% +Type: language +Subtag: fit +Description: Tornedalen Finnish +Added: 2009-07-29 +%% +Type: language +Subtag: fiu +Description: Finno-Ugrian languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: fiw +Description: Fiwaga +Added: 2009-07-29 +%% +Type: language +Subtag: fkk +Description: Kirya-Konzəl +Added: 2012-08-12 +%% +Type: language +Subtag: fkv +Description: Kven Finnish +Added: 2009-07-29 +%% +Type: language +Subtag: fla +Description: Kalispel-Pend d'Oreille +Added: 2009-07-29 +%% +Type: language +Subtag: flh +Description: Foau +Added: 2009-07-29 +%% +Type: language +Subtag: fli +Description: Fali +Added: 2009-07-29 +%% +Type: language +Subtag: fll +Description: North Fali +Added: 2009-07-29 +%% +Type: language +Subtag: fln +Description: Flinders Island +Added: 2009-07-29 +%% +Type: language +Subtag: flr +Description: Fuliiru +Added: 2009-07-29 +%% +Type: language +Subtag: fly +Description: Tsotsitaal +Added: 2009-07-29 +%% +Type: language +Subtag: fmp +Description: Fe'fe' +Added: 2009-07-29 +%% +Type: language +Subtag: fmu +Description: Far Western Muria +Added: 2009-07-29 +%% +Type: language +Subtag: fng +Description: Fanagalo +Added: 2009-07-29 +%% +Type: language +Subtag: fni +Description: Fania +Added: 2009-07-29 +%% +Type: language +Subtag: fod +Description: Foodo +Added: 2009-07-29 +%% +Type: language +Subtag: foi +Description: Foi +Added: 2009-07-29 +%% +Type: language +Subtag: fom +Description: Foma +Added: 2009-07-29 +%% +Type: language +Subtag: fon +Description: Fon +Added: 2005-10-16 +%% +Type: language +Subtag: for +Description: Fore +Added: 2009-07-29 +%% +Type: language +Subtag: fos +Description: Siraya +Added: 2009-07-29 +%% +Type: language +Subtag: fox +Description: Formosan languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: fpe +Description: Fernando Po Creole English +Added: 2009-07-29 +%% +Type: language +Subtag: fqs +Description: Fas +Added: 2009-07-29 +%% +Type: language +Subtag: frc +Description: Cajun French +Added: 2009-07-29 +%% +Type: language +Subtag: frd +Description: Fordata +Added: 2009-07-29 +%% +Type: language +Subtag: frk +Description: Frankish +Added: 2009-07-29 +%% +Type: language +Subtag: frm +Description: Middle French (ca. 1400-1600) +Added: 2005-10-16 +%% +Type: language +Subtag: fro +Description: Old French (842-ca. 1400) +Added: 2005-10-16 +%% +Type: language +Subtag: frp +Description: Arpitan +Description: Francoprovençal +Added: 2009-07-29 +%% +Type: language +Subtag: frq +Description: Forak +Added: 2009-07-29 +%% +Type: language +Subtag: frr +Description: Northern Frisian +Added: 2006-03-08 +Suppress-Script: Latn +%% +Type: language +Subtag: frs +Description: Eastern Frisian +Added: 2006-03-08 +Suppress-Script: Latn +%% +Type: language +Subtag: frt +Description: Fortsenal +Added: 2009-07-29 +%% +Type: language +Subtag: fse +Description: Finnish Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: fsl +Description: French Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: fss +Description: Finland-Swedish Sign Language +Description: finlandssvenskt teckenspråk +Description: suomenruotsalainen viittomakieli +Added: 2009-07-29 +%% +Type: language +Subtag: fub +Description: Adamawa Fulfulde +Added: 2009-07-29 +Macrolanguage: ff +%% +Type: language +Subtag: fuc +Description: Pulaar +Added: 2009-07-29 +Macrolanguage: ff +%% +Type: language +Subtag: fud +Description: East Futuna +Added: 2009-07-29 +%% +Type: language +Subtag: fue +Description: Borgu Fulfulde +Added: 2009-07-29 +Macrolanguage: ff +%% +Type: language +Subtag: fuf +Description: Pular +Added: 2009-07-29 +Macrolanguage: ff +%% +Type: language +Subtag: fuh +Description: Western Niger Fulfulde +Added: 2009-07-29 +Macrolanguage: ff +%% +Type: language +Subtag: fui +Description: Bagirmi Fulfulde +Added: 2009-07-29 +Macrolanguage: ff +%% +Type: language +Subtag: fuj +Description: Ko +Added: 2009-07-29 +%% +Type: language +Subtag: fum +Description: Fum +Added: 2009-07-29 +%% +Type: language +Subtag: fun +Description: Fulniô +Added: 2009-07-29 +%% +Type: language +Subtag: fuq +Description: Central-Eastern Niger Fulfulde +Added: 2009-07-29 +Macrolanguage: ff +%% +Type: language +Subtag: fur +Description: Friulian +Added: 2005-10-16 +%% +Type: language +Subtag: fut +Description: Futuna-Aniwa +Added: 2009-07-29 +%% +Type: language +Subtag: fuu +Description: Furu +Added: 2009-07-29 +%% +Type: language +Subtag: fuv +Description: Nigerian Fulfulde +Added: 2009-07-29 +Macrolanguage: ff +%% +Type: language +Subtag: fuy +Description: Fuyug +Added: 2009-07-29 +%% +Type: language +Subtag: fvr +Description: Fur +Added: 2009-07-29 +%% +Type: language +Subtag: fwa +Description: Fwâi +Added: 2009-07-29 +%% +Type: language +Subtag: fwe +Description: Fwe +Added: 2009-07-29 +%% +Type: language +Subtag: gaa +Description: Ga +Added: 2005-10-16 +%% +Type: language +Subtag: gab +Description: Gabri +Added: 2009-07-29 +%% +Type: language +Subtag: gac +Description: Mixed Great Andamanese +Added: 2010-03-11 +%% +Type: language +Subtag: gad +Description: Gaddang +Added: 2009-07-29 +%% +Type: language +Subtag: gae +Description: Guarequena +Added: 2009-07-29 +%% +Type: language +Subtag: gaf +Description: Gende +Added: 2009-07-29 +%% +Type: language +Subtag: gag +Description: Gagauz +Added: 2009-07-29 +%% +Type: language +Subtag: gah +Description: Alekano +Added: 2009-07-29 +%% +Type: language +Subtag: gai +Description: Borei +Added: 2009-07-29 +%% +Type: language +Subtag: gaj +Description: Gadsup +Added: 2009-07-29 +%% +Type: language +Subtag: gak +Description: Gamkonora +Added: 2009-07-29 +%% +Type: language +Subtag: gal +Description: Galoli +Added: 2009-07-29 +%% +Type: language +Subtag: gam +Description: Kandawo +Added: 2009-07-29 +%% +Type: language +Subtag: gan +Description: Gan Chinese +Added: 2009-07-29 +Macrolanguage: zh +%% +Type: language +Subtag: gao +Description: Gants +Added: 2009-07-29 +%% +Type: language +Subtag: gap +Description: Gal +Added: 2009-07-29 +%% +Type: language +Subtag: gaq +Description: Gata' +Added: 2009-07-29 +%% +Type: language +Subtag: gar +Description: Galeya +Added: 2009-07-29 +%% +Type: language +Subtag: gas +Description: Adiwasi Garasia +Added: 2009-07-29 +%% +Type: language +Subtag: gat +Description: Kenati +Added: 2009-07-29 +%% +Type: language +Subtag: gau +Description: Mudhili Gadaba +Added: 2009-07-29 +%% +Type: language +Subtag: gav +Description: Gabutamon +Added: 2009-07-29 +Deprecated: 2010-03-11 +Preferred-Value: dev +%% +Type: language +Subtag: gaw +Description: Nobonob +Added: 2009-07-29 +%% +Type: language +Subtag: gax +Description: Borana-Arsi-Guji Oromo +Added: 2009-07-29 +Macrolanguage: om +%% +Type: language +Subtag: gay +Description: Gayo +Added: 2005-10-16 +%% +Type: language +Subtag: gaz +Description: West Central Oromo +Added: 2009-07-29 +Macrolanguage: om +%% +Type: language +Subtag: gba +Description: Gbaya (Central African Republic) +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: gbb +Description: Kaytetye +Added: 2009-07-29 +%% +Type: language +Subtag: gbc +Description: Garawa +Added: 2009-07-29 +Deprecated: 2012-08-12 +Comments: see wny, wrk +%% +Type: language +Subtag: gbd +Description: Karadjeri +Added: 2009-07-29 +%% +Type: language +Subtag: gbe +Description: Niksek +Added: 2009-07-29 +%% +Type: language +Subtag: gbf +Description: Gaikundi +Added: 2009-07-29 +%% +Type: language +Subtag: gbg +Description: Gbanziri +Added: 2009-07-29 +%% +Type: language +Subtag: gbh +Description: Defi Gbe +Added: 2009-07-29 +%% +Type: language +Subtag: gbi +Description: Galela +Added: 2009-07-29 +%% +Type: language +Subtag: gbj +Description: Bodo Gadaba +Added: 2009-07-29 +%% +Type: language +Subtag: gbk +Description: Gaddi +Added: 2009-07-29 +%% +Type: language +Subtag: gbl +Description: Gamit +Added: 2009-07-29 +%% +Type: language +Subtag: gbm +Description: Garhwali +Added: 2009-07-29 +%% +Type: language +Subtag: gbn +Description: Mo'da +Added: 2009-07-29 +%% +Type: language +Subtag: gbo +Description: Northern Grebo +Added: 2009-07-29 +Macrolanguage: grb +%% +Type: language +Subtag: gbp +Description: Gbaya-Bossangoa +Added: 2009-07-29 +Macrolanguage: gba +%% +Type: language +Subtag: gbq +Description: Gbaya-Bozoum +Added: 2009-07-29 +Macrolanguage: gba +%% +Type: language +Subtag: gbr +Description: Gbagyi +Added: 2009-07-29 +%% +Type: language +Subtag: gbs +Description: Gbesi Gbe +Added: 2009-07-29 +%% +Type: language +Subtag: gbu +Description: Gagadu +Added: 2009-07-29 +%% +Type: language +Subtag: gbv +Description: Gbanu +Added: 2009-07-29 +%% +Type: language +Subtag: gbx +Description: Eastern Xwla Gbe +Added: 2009-07-29 +%% +Type: language +Subtag: gby +Description: Gbari +Added: 2009-07-29 +%% +Type: language +Subtag: gbz +Description: Zoroastrian Dari +Added: 2009-07-29 +%% +Type: language +Subtag: gcc +Description: Mali +Added: 2009-07-29 +%% +Type: language +Subtag: gcd +Description: Ganggalida +Added: 2009-07-29 +%% +Type: language +Subtag: gce +Description: Galice +Added: 2009-07-29 +%% +Type: language +Subtag: gcf +Description: Guadeloupean Creole French +Added: 2009-07-29 +%% +Type: language +Subtag: gcl +Description: Grenadian Creole English +Added: 2009-07-29 +%% +Type: language +Subtag: gcn +Description: Gaina +Added: 2009-07-29 +%% +Type: language +Subtag: gcr +Description: Guianese Creole French +Added: 2009-07-29 +%% +Type: language +Subtag: gct +Description: Colonia Tovar German +Added: 2009-07-29 +%% +Type: language +Subtag: gda +Description: Gade Lohar +Added: 2009-07-29 +Macrolanguage: raj +%% +Type: language +Subtag: gdb +Description: Pottangi Ollar Gadaba +Added: 2009-07-29 +%% +Type: language +Subtag: gdc +Description: Gugu Badhun +Added: 2009-07-29 +%% +Type: language +Subtag: gdd +Description: Gedaged +Added: 2009-07-29 +%% +Type: language +Subtag: gde +Description: Gude +Added: 2009-07-29 +%% +Type: language +Subtag: gdf +Description: Guduf-Gava +Added: 2009-07-29 +%% +Type: language +Subtag: gdg +Description: Ga'dang +Added: 2009-07-29 +%% +Type: language +Subtag: gdh +Description: Gadjerawang +Added: 2009-07-29 +%% +Type: language +Subtag: gdi +Description: Gundi +Added: 2009-07-29 +%% +Type: language +Subtag: gdj +Description: Gurdjar +Added: 2009-07-29 +%% +Type: language +Subtag: gdk +Description: Gadang +Added: 2009-07-29 +%% +Type: language +Subtag: gdl +Description: Dirasha +Added: 2009-07-29 +%% +Type: language +Subtag: gdm +Description: Laal +Added: 2009-07-29 +%% +Type: language +Subtag: gdn +Description: Umanakaina +Added: 2009-07-29 +%% +Type: language +Subtag: gdo +Description: Ghodoberi +Added: 2009-07-29 +%% +Type: language +Subtag: gdq +Description: Mehri +Added: 2009-07-29 +%% +Type: language +Subtag: gdr +Description: Wipi +Added: 2009-07-29 +%% +Type: language +Subtag: gds +Description: Ghandruk Sign Language +Added: 2012-08-12 +%% +Type: language +Subtag: gdu +Description: Gudu +Added: 2009-07-29 +%% +Type: language +Subtag: gdx +Description: Godwari +Added: 2009-07-29 +%% +Type: language +Subtag: gea +Description: Geruma +Added: 2009-07-29 +%% +Type: language +Subtag: geb +Description: Kire +Added: 2009-07-29 +%% +Type: language +Subtag: gec +Description: Gboloo Grebo +Added: 2009-07-29 +Macrolanguage: grb +%% +Type: language +Subtag: ged +Description: Gade +Added: 2009-07-29 +%% +Type: language +Subtag: geg +Description: Gengle +Added: 2009-07-29 +%% +Type: language +Subtag: geh +Description: Hutterite German +Description: Hutterisch +Added: 2009-07-29 +%% +Type: language +Subtag: gei +Description: Gebe +Added: 2009-07-29 +%% +Type: language +Subtag: gej +Description: Gen +Added: 2009-07-29 +%% +Type: language +Subtag: gek +Description: Yiwom +Added: 2009-07-29 +%% +Type: language +Subtag: gel +Description: ut-Ma'in +Added: 2009-07-29 +%% +Type: language +Subtag: gem +Description: Germanic languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: geq +Description: Geme +Added: 2009-07-29 +%% +Type: language +Subtag: ges +Description: Geser-Gorom +Added: 2009-07-29 +%% +Type: language +Subtag: gew +Description: Gera +Added: 2009-07-29 +%% +Type: language +Subtag: gex +Description: Garre +Added: 2009-07-29 +%% +Type: language +Subtag: gey +Description: Enya +Added: 2009-07-29 +%% +Type: language +Subtag: gez +Description: Geez +Added: 2005-10-16 +%% +Type: language +Subtag: gfk +Description: Patpatar +Added: 2009-07-29 +%% +Type: language +Subtag: gft +Description: Gafat +Added: 2009-07-29 +%% +Type: language +Subtag: gfx +Description: Mangetti Dune !Xung +Added: 2012-08-12 +%% +Type: language +Subtag: gga +Description: Gao +Added: 2009-07-29 +%% +Type: language +Subtag: ggb +Description: Gbii +Added: 2009-07-29 +%% +Type: language +Subtag: ggd +Description: Gugadj +Added: 2009-07-29 +%% +Type: language +Subtag: gge +Description: Guragone +Added: 2009-07-29 +%% +Type: language +Subtag: ggg +Description: Gurgula +Added: 2009-07-29 +%% +Type: language +Subtag: ggk +Description: Kungarakany +Added: 2009-07-29 +%% +Type: language +Subtag: ggl +Description: Ganglau +Added: 2009-07-29 +%% +Type: language +Subtag: ggn +Description: Eastern Gurung +Added: 2009-07-29 +%% +Type: language +Subtag: ggo +Description: Southern Gondi +Added: 2009-07-29 +Macrolanguage: gon +%% +Type: language +Subtag: ggr +Description: Aghu Tharnggalu +Added: 2009-07-29 +%% +Type: language +Subtag: ggt +Description: Gitua +Added: 2009-07-29 +%% +Type: language +Subtag: ggu +Description: Gagu +Added: 2009-07-29 +%% +Type: language +Subtag: ggw +Description: Gogodala +Added: 2009-07-29 +%% +Type: language +Subtag: gha +Description: Ghadamès +Added: 2009-07-29 +%% +Type: language +Subtag: ghc +Description: Hiberno-Scottish Gaelic +Added: 2009-07-29 +%% +Type: language +Subtag: ghe +Description: Southern Ghale +Added: 2009-07-29 +%% +Type: language +Subtag: ghh +Description: Northern Ghale +Added: 2009-07-29 +%% +Type: language +Subtag: ghk +Description: Geko Karen +Added: 2009-07-29 +%% +Type: language +Subtag: ghl +Description: Ghulfan +Added: 2009-07-29 +%% +Type: language +Subtag: ghn +Description: Ghanongga +Added: 2009-07-29 +%% +Type: language +Subtag: gho +Description: Ghomara +Added: 2009-07-29 +%% +Type: language +Subtag: ghr +Description: Ghera +Added: 2009-07-29 +%% +Type: language +Subtag: ghs +Description: Guhu-Samane +Added: 2009-07-29 +%% +Type: language +Subtag: ght +Description: Kuke +Description: Kutang Ghale +Added: 2009-07-29 +%% +Type: language +Subtag: gia +Description: Kitja +Added: 2009-07-29 +%% +Type: language +Subtag: gib +Description: Gibanawa +Added: 2009-07-29 +%% +Type: language +Subtag: gic +Description: Gail +Added: 2009-07-29 +%% +Type: language +Subtag: gid +Description: Gidar +Added: 2009-07-29 +%% +Type: language +Subtag: gig +Description: Goaria +Added: 2009-07-29 +%% +Type: language +Subtag: gil +Description: Gilbertese +Added: 2005-10-16 +%% +Type: language +Subtag: gim +Description: Gimi (Eastern Highlands) +Added: 2009-07-29 +%% +Type: language +Subtag: gin +Description: Hinukh +Added: 2009-07-29 +%% +Type: language +Subtag: gio +Description: Gelao +Added: 2009-07-29 +Deprecated: 2012-08-12 +Comments: see aou, gqu +%% +Type: language +Subtag: gip +Description: Gimi (West New Britain) +Added: 2009-07-29 +%% +Type: language +Subtag: giq +Description: Green Gelao +Added: 2009-07-29 +%% +Type: language +Subtag: gir +Description: Red Gelao +Added: 2009-07-29 +%% +Type: language +Subtag: gis +Description: North Giziga +Added: 2009-07-29 +%% +Type: language +Subtag: git +Description: Gitxsan +Added: 2009-07-29 +%% +Type: language +Subtag: giu +Description: Mulao +Added: 2012-08-12 +%% +Type: language +Subtag: giw +Description: White Gelao +Added: 2009-07-29 +%% +Type: language +Subtag: gix +Description: Gilima +Added: 2009-07-29 +%% +Type: language +Subtag: giy +Description: Giyug +Added: 2009-07-29 +%% +Type: language +Subtag: giz +Description: South Giziga +Added: 2009-07-29 +%% +Type: language +Subtag: gji +Description: Geji +Added: 2009-07-29 +%% +Type: language +Subtag: gjk +Description: Kachi Koli +Added: 2009-07-29 +%% +Type: language +Subtag: gjn +Description: Gonja +Added: 2009-07-29 +%% +Type: language +Subtag: gju +Description: Gujari +Added: 2009-07-29 +Macrolanguage: raj +%% +Type: language +Subtag: gka +Description: Guya +Added: 2009-07-29 +%% +Type: language +Subtag: gke +Description: Ndai +Added: 2009-07-29 +%% +Type: language +Subtag: gkn +Description: Gokana +Added: 2009-07-29 +%% +Type: language +Subtag: gko +Description: Kok-Nar +Added: 2012-08-12 +%% +Type: language +Subtag: gkp +Description: Guinea Kpelle +Added: 2009-07-29 +Macrolanguage: kpe +%% +Type: language +Subtag: glc +Description: Bon Gula +Added: 2009-07-29 +%% +Type: language +Subtag: gld +Description: Nanai +Added: 2009-07-29 +%% +Type: language +Subtag: glh +Description: Northwest Pashayi +Added: 2009-07-29 +%% +Type: language +Subtag: gli +Description: Guliguli +Added: 2009-07-29 +%% +Type: language +Subtag: glj +Description: Gula Iro +Added: 2009-07-29 +%% +Type: language +Subtag: glk +Description: Gilaki +Added: 2009-07-29 +%% +Type: language +Subtag: glo +Description: Galambu +Added: 2009-07-29 +%% +Type: language +Subtag: glr +Description: Glaro-Twabo +Added: 2009-07-29 +%% +Type: language +Subtag: glu +Description: Gula (Chad) +Added: 2009-07-29 +%% +Type: language +Subtag: glw +Description: Glavda +Added: 2009-07-29 +%% +Type: language +Subtag: gly +Description: Gule +Added: 2009-07-29 +%% +Type: language +Subtag: gma +Description: Gambera +Added: 2009-07-29 +%% +Type: language +Subtag: gmb +Description: Gula'alaa +Added: 2009-07-29 +%% +Type: language +Subtag: gmd +Description: Mághdì +Added: 2009-07-29 +%% +Type: language +Subtag: gme +Description: East Germanic languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: gmh +Description: Middle High German (ca. 1050-1500) +Added: 2005-10-16 +%% +Type: language +Subtag: gml +Description: Middle Low German +Added: 2009-07-29 +%% +Type: language +Subtag: gmm +Description: Gbaya-Mbodomo +Added: 2009-07-29 +Macrolanguage: gba +%% +Type: language +Subtag: gmn +Description: Gimnime +Added: 2009-07-29 +%% +Type: language +Subtag: gmq +Description: North Germanic languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: gmu +Description: Gumalu +Added: 2009-07-29 +%% +Type: language +Subtag: gmv +Description: Gamo +Added: 2009-07-29 +%% +Type: language +Subtag: gmw +Description: West Germanic languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: gmx +Description: Magoma +Added: 2009-07-29 +%% +Type: language +Subtag: gmy +Description: Mycenaean Greek +Added: 2009-07-29 +%% +Type: language +Subtag: gna +Description: Kaansa +Added: 2009-07-29 +%% +Type: language +Subtag: gnb +Description: Gangte +Added: 2009-07-29 +%% +Type: language +Subtag: gnc +Description: Guanche +Added: 2009-07-29 +%% +Type: language +Subtag: gnd +Description: Zulgo-Gemzek +Added: 2009-07-29 +%% +Type: language +Subtag: gne +Description: Ganang +Added: 2009-07-29 +%% +Type: language +Subtag: gng +Description: Ngangam +Added: 2009-07-29 +%% +Type: language +Subtag: gnh +Description: Lere +Added: 2009-07-29 +%% +Type: language +Subtag: gni +Description: Gooniyandi +Added: 2009-07-29 +%% +Type: language +Subtag: gnk +Description: //Gana +Added: 2009-07-29 +%% +Type: language +Subtag: gnl +Description: Gangulu +Added: 2009-07-29 +%% +Type: language +Subtag: gnm +Description: Ginuman +Added: 2009-07-29 +%% +Type: language +Subtag: gnn +Description: Gumatj +Added: 2009-07-29 +%% +Type: language +Subtag: gno +Description: Northern Gondi +Added: 2009-07-29 +Macrolanguage: gon +%% +Type: language +Subtag: gnq +Description: Gana +Added: 2009-07-29 +%% +Type: language +Subtag: gnr +Description: Gureng Gureng +Added: 2009-07-29 +%% +Type: language +Subtag: gnt +Description: Guntai +Added: 2009-07-29 +%% +Type: language +Subtag: gnu +Description: Gnau +Added: 2009-07-29 +%% +Type: language +Subtag: gnw +Description: Western Bolivian Guaraní +Added: 2009-07-29 +Macrolanguage: gn +%% +Type: language +Subtag: gnz +Description: Ganzi +Added: 2009-07-29 +%% +Type: language +Subtag: goa +Description: Guro +Added: 2009-07-29 +%% +Type: language +Subtag: gob +Description: Playero +Added: 2009-07-29 +%% +Type: language +Subtag: goc +Description: Gorakor +Added: 2009-07-29 +%% +Type: language +Subtag: god +Description: Godié +Added: 2009-07-29 +%% +Type: language +Subtag: goe +Description: Gongduk +Added: 2009-07-29 +%% +Type: language +Subtag: gof +Description: Gofa +Added: 2009-07-29 +%% +Type: language +Subtag: gog +Description: Gogo +Added: 2009-07-29 +%% +Type: language +Subtag: goh +Description: Old High German (ca. 750-1050) +Added: 2005-10-16 +%% +Type: language +Subtag: goi +Description: Gobasi +Added: 2009-07-29 +%% +Type: language +Subtag: goj +Description: Gowlan +Added: 2009-07-29 +%% +Type: language +Subtag: gok +Description: Gowli +Added: 2009-07-29 +%% +Type: language +Subtag: gol +Description: Gola +Added: 2009-07-29 +%% +Type: language +Subtag: gom +Description: Goan Konkani +Added: 2009-07-29 +Macrolanguage: kok +%% +Type: language +Subtag: gon +Description: Gondi +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: goo +Description: Gone Dau +Added: 2009-07-29 +%% +Type: language +Subtag: gop +Description: Yeretuar +Added: 2009-07-29 +%% +Type: language +Subtag: goq +Description: Gorap +Added: 2009-07-29 +%% +Type: language +Subtag: gor +Description: Gorontalo +Added: 2005-10-16 +%% +Type: language +Subtag: gos +Description: Gronings +Added: 2009-07-29 +%% +Type: language +Subtag: got +Description: Gothic +Added: 2005-10-16 +%% +Type: language +Subtag: gou +Description: Gavar +Added: 2009-07-29 +%% +Type: language +Subtag: gow +Description: Gorowa +Added: 2009-07-29 +%% +Type: language +Subtag: gox +Description: Gobu +Added: 2009-07-29 +%% +Type: language +Subtag: goy +Description: Goundo +Added: 2009-07-29 +%% +Type: language +Subtag: goz +Description: Gozarkhani +Added: 2009-07-29 +%% +Type: language +Subtag: gpa +Description: Gupa-Abawa +Added: 2009-07-29 +%% +Type: language +Subtag: gpe +Description: Ghanaian Pidgin English +Added: 2012-08-12 +%% +Type: language +Subtag: gpn +Description: Taiap +Added: 2009-07-29 +%% +Type: language +Subtag: gqa +Description: Ga'anda +Added: 2009-07-29 +%% +Type: language +Subtag: gqi +Description: Guiqiong +Added: 2009-07-29 +%% +Type: language +Subtag: gqn +Description: Guana (Brazil) +Added: 2009-07-29 +%% +Type: language +Subtag: gqr +Description: Gor +Added: 2009-07-29 +%% +Type: language +Subtag: gqu +Description: Qau +Added: 2012-08-12 +%% +Type: language +Subtag: gra +Description: Rajput Garasia +Added: 2009-07-29 +%% +Type: language +Subtag: grb +Description: Grebo +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: grc +Description: Ancient Greek (to 1453) +Added: 2005-10-16 +%% +Type: language +Subtag: grd +Description: Guruntum-Mbaaru +Added: 2009-07-29 +%% +Type: language +Subtag: grg +Description: Madi +Added: 2009-07-29 +%% +Type: language +Subtag: grh +Description: Gbiri-Niragu +Added: 2009-07-29 +%% +Type: language +Subtag: gri +Description: Ghari +Added: 2009-07-29 +%% +Type: language +Subtag: grj +Description: Southern Grebo +Added: 2009-07-29 +Macrolanguage: grb +%% +Type: language +Subtag: grk +Description: Greek languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: grm +Description: Kota Marudu Talantang +Added: 2009-07-29 +%% +Type: language +Subtag: gro +Description: Groma +Added: 2009-07-29 +%% +Type: language +Subtag: grq +Description: Gorovu +Added: 2009-07-29 +%% +Type: language +Subtag: grr +Description: Taznatit +Added: 2009-07-29 +%% +Type: language +Subtag: grs +Description: Gresi +Added: 2009-07-29 +%% +Type: language +Subtag: grt +Description: Garo +Added: 2009-07-29 +%% +Type: language +Subtag: gru +Description: Kistane +Added: 2009-07-29 +%% +Type: language +Subtag: grv +Description: Central Grebo +Added: 2009-07-29 +Macrolanguage: grb +%% +Type: language +Subtag: grw +Description: Gweda +Added: 2009-07-29 +%% +Type: language +Subtag: grx +Description: Guriaso +Added: 2009-07-29 +%% +Type: language +Subtag: gry +Description: Barclayville Grebo +Added: 2009-07-29 +Macrolanguage: grb +%% +Type: language +Subtag: grz +Description: Guramalum +Added: 2009-07-29 +%% +Type: language +Subtag: gse +Description: Ghanaian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: gsg +Description: German Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: gsl +Description: Gusilay +Added: 2009-07-29 +%% +Type: language +Subtag: gsm +Description: Guatemalan Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: gsn +Description: Gusan +Added: 2009-07-29 +%% +Type: language +Subtag: gso +Description: Southwest Gbaya +Added: 2009-07-29 +Macrolanguage: gba +%% +Type: language +Subtag: gsp +Description: Wasembo +Added: 2009-07-29 +%% +Type: language +Subtag: gss +Description: Greek Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: gsw +Description: Swiss German +Description: Alemannic +Description: Alsatian +Added: 2006-03-08 +Suppress-Script: Latn +%% +Type: language +Subtag: gta +Description: Guató +Added: 2009-07-29 +%% +Type: language +Subtag: gti +Description: Gbati-ri +Added: 2009-07-29 +%% +Type: language +Subtag: gua +Description: Shiki +Added: 2009-07-29 +%% +Type: language +Subtag: gub +Description: Guajajára +Added: 2009-07-29 +%% +Type: language +Subtag: guc +Description: Wayuu +Added: 2009-07-29 +%% +Type: language +Subtag: gud +Description: Yocoboué Dida +Added: 2009-07-29 +%% +Type: language +Subtag: gue +Description: Gurinji +Added: 2009-07-29 +%% +Type: language +Subtag: guf +Description: Gupapuyngu +Added: 2009-07-29 +%% +Type: language +Subtag: gug +Description: Paraguayan Guaraní +Added: 2009-07-29 +Macrolanguage: gn +%% +Type: language +Subtag: guh +Description: Guahibo +Added: 2009-07-29 +%% +Type: language +Subtag: gui +Description: Eastern Bolivian Guaraní +Added: 2009-07-29 +Macrolanguage: gn +%% +Type: language +Subtag: guk +Description: Gumuz +Added: 2009-07-29 +%% +Type: language +Subtag: gul +Description: Sea Island Creole English +Added: 2009-07-29 +%% +Type: language +Subtag: gum +Description: Guambiano +Added: 2009-07-29 +%% +Type: language +Subtag: gun +Description: Mbyá Guaraní +Added: 2009-07-29 +Macrolanguage: gn +%% +Type: language +Subtag: guo +Description: Guayabero +Added: 2009-07-29 +%% +Type: language +Subtag: gup +Description: Gunwinggu +Added: 2009-07-29 +%% +Type: language +Subtag: guq +Description: Aché +Added: 2009-07-29 +%% +Type: language +Subtag: gur +Description: Farefare +Added: 2009-07-29 +%% +Type: language +Subtag: gus +Description: Guinean Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: gut +Description: Maléku Jaíka +Added: 2009-07-29 +%% +Type: language +Subtag: guu +Description: Yanomamö +Added: 2009-07-29 +%% +Type: language +Subtag: guv +Description: Gey +Added: 2009-07-29 +%% +Type: language +Subtag: guw +Description: Gun +Added: 2009-07-29 +%% +Type: language +Subtag: gux +Description: Gourmanchéma +Added: 2009-07-29 +%% +Type: language +Subtag: guz +Description: Gusii +Description: Ekegusii +Added: 2009-07-29 +%% +Type: language +Subtag: gva +Description: Guana (Paraguay) +Added: 2009-07-29 +%% +Type: language +Subtag: gvc +Description: Guanano +Added: 2009-07-29 +%% +Type: language +Subtag: gve +Description: Duwet +Added: 2009-07-29 +%% +Type: language +Subtag: gvf +Description: Golin +Added: 2009-07-29 +%% +Type: language +Subtag: gvj +Description: Guajá +Added: 2009-07-29 +%% +Type: language +Subtag: gvl +Description: Gulay +Added: 2009-07-29 +%% +Type: language +Subtag: gvm +Description: Gurmana +Added: 2009-07-29 +%% +Type: language +Subtag: gvn +Description: Kuku-Yalanji +Added: 2009-07-29 +%% +Type: language +Subtag: gvo +Description: Gavião Do Jiparaná +Added: 2009-07-29 +%% +Type: language +Subtag: gvp +Description: Pará Gavião +Added: 2009-07-29 +%% +Type: language +Subtag: gvr +Description: Western Gurung +Added: 2009-07-29 +%% +Type: language +Subtag: gvs +Description: Gumawana +Added: 2009-07-29 +%% +Type: language +Subtag: gvy +Description: Guyani +Added: 2009-07-29 +%% +Type: language +Subtag: gwa +Description: Mbato +Added: 2009-07-29 +%% +Type: language +Subtag: gwb +Description: Gwa +Added: 2009-07-29 +%% +Type: language +Subtag: gwc +Description: Kalami +Added: 2009-07-29 +%% +Type: language +Subtag: gwd +Description: Gawwada +Added: 2009-07-29 +%% +Type: language +Subtag: gwe +Description: Gweno +Added: 2009-07-29 +%% +Type: language +Subtag: gwf +Description: Gowro +Added: 2009-07-29 +%% +Type: language +Subtag: gwg +Description: Moo +Added: 2009-07-29 +%% +Type: language +Subtag: gwi +Description: Gwichʼin +Added: 2005-10-16 +%% +Type: language +Subtag: gwj +Description: /Gwi +Added: 2009-07-29 +%% +Type: language +Subtag: gwm +Description: Awngthim +Added: 2012-08-12 +%% +Type: language +Subtag: gwn +Description: Gwandara +Added: 2009-07-29 +%% +Type: language +Subtag: gwr +Description: Gwere +Added: 2009-07-29 +%% +Type: language +Subtag: gwt +Description: Gawar-Bati +Added: 2009-07-29 +%% +Type: language +Subtag: gwu +Description: Guwamu +Added: 2009-07-29 +%% +Type: language +Subtag: gww +Description: Kwini +Added: 2009-07-29 +%% +Type: language +Subtag: gwx +Description: Gua +Added: 2009-07-29 +%% +Type: language +Subtag: gxx +Description: Wè Southern +Added: 2009-07-29 +%% +Type: language +Subtag: gya +Description: Northwest Gbaya +Added: 2009-07-29 +Macrolanguage: gba +%% +Type: language +Subtag: gyb +Description: Garus +Added: 2009-07-29 +%% +Type: language +Subtag: gyd +Description: Kayardild +Added: 2009-07-29 +%% +Type: language +Subtag: gye +Description: Gyem +Added: 2009-07-29 +%% +Type: language +Subtag: gyf +Description: Gungabula +Added: 2009-07-29 +%% +Type: language +Subtag: gyg +Description: Gbayi +Added: 2009-07-29 +%% +Type: language +Subtag: gyi +Description: Gyele +Added: 2009-07-29 +%% +Type: language +Subtag: gyl +Description: Gayil +Added: 2009-07-29 +%% +Type: language +Subtag: gym +Description: Ngäbere +Added: 2009-07-29 +%% +Type: language +Subtag: gyn +Description: Guyanese Creole English +Added: 2009-07-29 +%% +Type: language +Subtag: gyr +Description: Guarayu +Added: 2009-07-29 +%% +Type: language +Subtag: gyy +Description: Gunya +Added: 2009-07-29 +%% +Type: language +Subtag: gza +Description: Ganza +Added: 2009-07-29 +%% +Type: language +Subtag: gzi +Description: Gazi +Added: 2009-07-29 +%% +Type: language +Subtag: gzn +Description: Gane +Added: 2009-07-29 +%% +Type: language +Subtag: haa +Description: Han +Added: 2009-07-29 +%% +Type: language +Subtag: hab +Description: Hanoi Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: hac +Description: Gurani +Added: 2009-07-29 +%% +Type: language +Subtag: had +Description: Hatam +Added: 2009-07-29 +%% +Type: language +Subtag: hae +Description: Eastern Oromo +Added: 2009-07-29 +Macrolanguage: om +%% +Type: language +Subtag: haf +Description: Haiphong Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: hag +Description: Hanga +Added: 2009-07-29 +%% +Type: language +Subtag: hah +Description: Hahon +Added: 2009-07-29 +%% +Type: language +Subtag: hai +Description: Haida +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: haj +Description: Hajong +Added: 2009-07-29 +%% +Type: language +Subtag: hak +Description: Hakka Chinese +Added: 2009-07-29 +Macrolanguage: zh +%% +Type: language +Subtag: hal +Description: Halang +Added: 2009-07-29 +%% +Type: language +Subtag: ham +Description: Hewa +Added: 2009-07-29 +%% +Type: language +Subtag: han +Description: Hangaza +Added: 2009-07-29 +%% +Type: language +Subtag: hao +Description: Hakö +Added: 2009-07-29 +%% +Type: language +Subtag: hap +Description: Hupla +Added: 2009-07-29 +%% +Type: language +Subtag: haq +Description: Ha +Added: 2009-07-29 +%% +Type: language +Subtag: har +Description: Harari +Added: 2009-07-29 +%% +Type: language +Subtag: has +Description: Haisla +Added: 2009-07-29 +%% +Type: language +Subtag: hav +Description: Havu +Added: 2009-07-29 +%% +Type: language +Subtag: haw +Description: Hawaiian +Added: 2005-10-16 +%% +Type: language +Subtag: hax +Description: Southern Haida +Added: 2009-07-29 +Macrolanguage: hai +%% +Type: language +Subtag: hay +Description: Haya +Added: 2009-07-29 +%% +Type: language +Subtag: haz +Description: Hazaragi +Added: 2009-07-29 +%% +Type: language +Subtag: hba +Description: Hamba +Added: 2009-07-29 +%% +Type: language +Subtag: hbb +Description: Huba +Added: 2009-07-29 +%% +Type: language +Subtag: hbn +Description: Heiban +Added: 2009-07-29 +%% +Type: language +Subtag: hbo +Description: Ancient Hebrew +Added: 2009-07-29 +%% +Type: language +Subtag: hbu +Description: Habu +Added: 2009-07-29 +%% +Type: language +Subtag: hca +Description: Andaman Creole Hindi +Added: 2009-07-29 +%% +Type: language +Subtag: hch +Description: Huichol +Added: 2009-07-29 +%% +Type: language +Subtag: hdn +Description: Northern Haida +Added: 2009-07-29 +Macrolanguage: hai +%% +Type: language +Subtag: hds +Description: Honduras Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: hdy +Description: Hadiyya +Added: 2009-07-29 +%% +Type: language +Subtag: hea +Description: Northern Qiandong Miao +Added: 2009-07-29 +Macrolanguage: hmn +%% +Type: language +Subtag: hed +Description: Herdé +Added: 2009-07-29 +%% +Type: language +Subtag: heg +Description: Helong +Added: 2009-07-29 +%% +Type: language +Subtag: heh +Description: Hehe +Added: 2009-07-29 +%% +Type: language +Subtag: hei +Description: Heiltsuk +Added: 2009-07-29 +%% +Type: language +Subtag: hem +Description: Hemba +Added: 2009-07-29 +%% +Type: language +Subtag: hgm +Description: Hai//om +Added: 2009-07-29 +%% +Type: language +Subtag: hgw +Description: Haigwai +Added: 2009-07-29 +%% +Type: language +Subtag: hhi +Description: Hoia Hoia +Added: 2009-07-29 +%% +Type: language +Subtag: hhr +Description: Kerak +Added: 2009-07-29 +%% +Type: language +Subtag: hhy +Description: Hoyahoya +Added: 2009-07-29 +%% +Type: language +Subtag: hia +Description: Lamang +Added: 2009-07-29 +%% +Type: language +Subtag: hib +Description: Hibito +Added: 2009-07-29 +%% +Type: language +Subtag: hid +Description: Hidatsa +Added: 2009-07-29 +%% +Type: language +Subtag: hif +Description: Fiji Hindi +Added: 2009-07-29 +%% +Type: language +Subtag: hig +Description: Kamwe +Added: 2009-07-29 +%% +Type: language +Subtag: hih +Description: Pamosu +Added: 2009-07-29 +%% +Type: language +Subtag: hii +Description: Hinduri +Added: 2009-07-29 +%% +Type: language +Subtag: hij +Description: Hijuk +Added: 2009-07-29 +%% +Type: language +Subtag: hik +Description: Seit-Kaitetu +Added: 2009-07-29 +%% +Type: language +Subtag: hil +Description: Hiligaynon +Added: 2005-10-16 +%% +Type: language +Subtag: him +Description: Himachali languages +Description: Western Pahari languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: hio +Description: Tsoa +Added: 2009-07-29 +%% +Type: language +Subtag: hir +Description: Himarimã +Added: 2009-07-29 +%% +Type: language +Subtag: hit +Description: Hittite +Added: 2005-10-16 +%% +Type: language +Subtag: hiw +Description: Hiw +Added: 2009-07-29 +%% +Type: language +Subtag: hix +Description: Hixkaryána +Added: 2009-07-29 +%% +Type: language +Subtag: hji +Description: Haji +Added: 2009-07-29 +Macrolanguage: ms +%% +Type: language +Subtag: hka +Description: Kahe +Added: 2009-07-29 +%% +Type: language +Subtag: hke +Description: Hunde +Added: 2009-07-29 +%% +Type: language +Subtag: hkk +Description: Hunjara-Kaina Ke +Added: 2009-07-29 +%% +Type: language +Subtag: hks +Description: Hong Kong Sign Language +Description: Heung Kong Sau Yue +Added: 2009-07-29 +%% +Type: language +Subtag: hla +Description: Halia +Added: 2009-07-29 +%% +Type: language +Subtag: hlb +Description: Halbi +Added: 2009-07-29 +%% +Type: language +Subtag: hld +Description: Halang Doan +Added: 2009-07-29 +%% +Type: language +Subtag: hle +Description: Hlersu +Added: 2009-07-29 +%% +Type: language +Subtag: hlt +Description: Matu Chin +Added: 2009-07-29 +%% +Type: language +Subtag: hlu +Description: Hieroglyphic Luwian +Added: 2009-07-29 +%% +Type: language +Subtag: hma +Description: Southern Mashan Hmong +Description: Southern Mashan Miao +Added: 2009-07-29 +Macrolanguage: hmn +%% +Type: language +Subtag: hmb +Description: Humburi Senni Songhay +Added: 2009-07-29 +%% +Type: language +Subtag: hmc +Description: Central Huishui Hmong +Description: Central Huishui Miao +Added: 2009-07-29 +Macrolanguage: hmn +%% +Type: language +Subtag: hmd +Description: Large Flowery Miao +Description: A-hmaos +Description: Da-Hua Miao +Added: 2009-07-29 +Macrolanguage: hmn +%% +Type: language +Subtag: hme +Description: Eastern Huishui Hmong +Description: Eastern Huishui Miao +Added: 2009-07-29 +Macrolanguage: hmn +%% +Type: language +Subtag: hmf +Description: Hmong Don +Added: 2009-07-29 +%% +Type: language +Subtag: hmg +Description: Southwestern Guiyang Hmong +Added: 2009-07-29 +Macrolanguage: hmn +%% +Type: language +Subtag: hmh +Description: Southwestern Huishui Hmong +Description: Southwestern Huishui Miao +Added: 2009-07-29 +Macrolanguage: hmn +%% +Type: language +Subtag: hmi +Description: Northern Huishui Hmong +Description: Northern Huishui Miao +Added: 2009-07-29 +Macrolanguage: hmn +%% +Type: language +Subtag: hmj +Description: Ge +Description: Gejia +Added: 2009-07-29 +Macrolanguage: hmn +%% +Type: language +Subtag: hmk +Description: Maek +Added: 2009-07-29 +%% +Type: language +Subtag: hml +Description: Luopohe Hmong +Description: Luopohe Miao +Added: 2009-07-29 +Macrolanguage: hmn +%% +Type: language +Subtag: hmm +Description: Central Mashan Hmong +Description: Central Mashan Miao +Added: 2009-07-29 +Macrolanguage: hmn +%% +Type: language +Subtag: hmn +Description: Hmong +Description: Mong +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: hmp +Description: Northern Mashan Hmong +Description: Northern Mashan Miao +Added: 2009-07-29 +Macrolanguage: hmn +%% +Type: language +Subtag: hmq +Description: Eastern Qiandong Miao +Added: 2009-07-29 +Macrolanguage: hmn +%% +Type: language +Subtag: hmr +Description: Hmar +Added: 2009-07-29 +%% +Type: language +Subtag: hms +Description: Southern Qiandong Miao +Added: 2009-07-29 +Macrolanguage: hmn +%% +Type: language +Subtag: hmt +Description: Hamtai +Added: 2009-07-29 +%% +Type: language +Subtag: hmu +Description: Hamap +Added: 2009-07-29 +%% +Type: language +Subtag: hmv +Description: Hmong Dô +Added: 2009-07-29 +%% +Type: language +Subtag: hmw +Description: Western Mashan Hmong +Description: Western Mashan Miao +Added: 2009-07-29 +Macrolanguage: hmn +%% +Type: language +Subtag: hmx +Description: Hmong-Mien languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: hmy +Description: Southern Guiyang Hmong +Description: Southern Guiyang Miao +Added: 2009-07-29 +Macrolanguage: hmn +%% +Type: language +Subtag: hmz +Description: Hmong Shua +Description: Sinicized Miao +Added: 2009-07-29 +Macrolanguage: hmn +%% +Type: language +Subtag: hna +Description: Mina (Cameroon) +Added: 2009-07-29 +%% +Type: language +Subtag: hnd +Description: Southern Hindko +Added: 2009-07-29 +Macrolanguage: lah +%% +Type: language +Subtag: hne +Description: Chhattisgarhi +Added: 2009-07-29 +%% +Type: language +Subtag: hnh +Description: //Ani +Added: 2009-07-29 +%% +Type: language +Subtag: hni +Description: Hani +Added: 2009-07-29 +%% +Type: language +Subtag: hnj +Description: Hmong Njua +Description: Mong Leng +Description: Mong Njua +Added: 2009-07-29 +Macrolanguage: hmn +%% +Type: language +Subtag: hnn +Description: Hanunoo +Added: 2009-07-29 +%% +Type: language +Subtag: hno +Description: Northern Hindko +Added: 2009-07-29 +Macrolanguage: lah +%% +Type: language +Subtag: hns +Description: Caribbean Hindustani +Added: 2009-07-29 +%% +Type: language +Subtag: hnu +Description: Hung +Added: 2009-07-29 +%% +Type: language +Subtag: hoa +Description: Hoava +Added: 2009-07-29 +%% +Type: language +Subtag: hob +Description: Mari (Madang Province) +Added: 2009-07-29 +%% +Type: language +Subtag: hoc +Description: Ho +Added: 2009-07-29 +%% +Type: language +Subtag: hod +Description: Holma +Added: 2009-07-29 +%% +Type: language +Subtag: hoe +Description: Horom +Added: 2009-07-29 +%% +Type: language +Subtag: hoh +Description: Hobyót +Added: 2009-07-29 +%% +Type: language +Subtag: hoi +Description: Holikachuk +Added: 2009-07-29 +%% +Type: language +Subtag: hoj +Description: Hadothi +Description: Haroti +Added: 2009-07-29 +Macrolanguage: raj +%% +Type: language +Subtag: hok +Description: Hokan languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: hol +Description: Holu +Added: 2009-07-29 +%% +Type: language +Subtag: hom +Description: Homa +Added: 2009-07-29 +%% +Type: language +Subtag: hoo +Description: Holoholo +Added: 2009-07-29 +%% +Type: language +Subtag: hop +Description: Hopi +Added: 2009-07-29 +%% +Type: language +Subtag: hor +Description: Horo +Added: 2009-07-29 +%% +Type: language +Subtag: hos +Description: Ho Chi Minh City Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: hot +Description: Hote +Description: Malê +Added: 2009-07-29 +%% +Type: language +Subtag: hov +Description: Hovongan +Added: 2009-07-29 +%% +Type: language +Subtag: how +Description: Honi +Added: 2009-07-29 +%% +Type: language +Subtag: hoy +Description: Holiya +Added: 2009-07-29 +%% +Type: language +Subtag: hoz +Description: Hozo +Added: 2009-07-29 +%% +Type: language +Subtag: hpo +Description: Hpon +Added: 2009-07-29 +%% +Type: language +Subtag: hps +Description: Hawai'i Pidgin Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: hra +Description: Hrangkhol +Added: 2009-07-29 +%% +Type: language +Subtag: hre +Description: Hre +Added: 2009-07-29 +%% +Type: language +Subtag: hrk +Description: Haruku +Added: 2009-07-29 +%% +Type: language +Subtag: hrm +Description: Horned Miao +Added: 2009-07-29 +Macrolanguage: hmn +%% +Type: language +Subtag: hro +Description: Haroi +Added: 2009-07-29 +%% +Type: language +Subtag: hrr +Description: Horuru +Added: 2009-07-29 +Deprecated: 2012-08-12 +Preferred-Value: jal +%% +Type: language +Subtag: hrt +Description: Hértevin +Added: 2009-07-29 +%% +Type: language +Subtag: hru +Description: Hruso +Added: 2009-07-29 +%% +Type: language +Subtag: hrx +Description: Hunsrik +Added: 2009-07-29 +%% +Type: language +Subtag: hrz +Description: Harzani +Added: 2009-07-29 +%% +Type: language +Subtag: hsb +Description: Upper Sorbian +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: hsh +Description: Hungarian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: hsl +Description: Hausa Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: hsn +Description: Xiang Chinese +Added: 2009-07-29 +Macrolanguage: zh +%% +Type: language +Subtag: hss +Description: Harsusi +Added: 2009-07-29 +%% +Type: language +Subtag: hti +Description: Hoti +Added: 2009-07-29 +%% +Type: language +Subtag: hto +Description: Minica Huitoto +Added: 2009-07-29 +%% +Type: language +Subtag: hts +Description: Hadza +Added: 2009-07-29 +%% +Type: language +Subtag: htu +Description: Hitu +Added: 2009-07-29 +%% +Type: language +Subtag: htx +Description: Middle Hittite +Added: 2009-07-29 +%% +Type: language +Subtag: hub +Description: Huambisa +Added: 2009-07-29 +%% +Type: language +Subtag: huc +Description: =/Hua +Added: 2009-07-29 +%% +Type: language +Subtag: hud +Description: Huaulu +Added: 2009-07-29 +%% +Type: language +Subtag: hue +Description: San Francisco Del Mar Huave +Added: 2009-07-29 +%% +Type: language +Subtag: huf +Description: Humene +Added: 2009-07-29 +%% +Type: language +Subtag: hug +Description: Huachipaeri +Added: 2009-07-29 +%% +Type: language +Subtag: huh +Description: Huilliche +Added: 2009-07-29 +%% +Type: language +Subtag: hui +Description: Huli +Added: 2009-07-29 +%% +Type: language +Subtag: huj +Description: Northern Guiyang Hmong +Description: Northern Guiyang Miao +Added: 2009-07-29 +Macrolanguage: hmn +%% +Type: language +Subtag: huk +Description: Hulung +Added: 2009-07-29 +%% +Type: language +Subtag: hul +Description: Hula +Added: 2009-07-29 +%% +Type: language +Subtag: hum +Description: Hungana +Added: 2009-07-29 +%% +Type: language +Subtag: huo +Description: Hu +Added: 2009-07-29 +%% +Type: language +Subtag: hup +Description: Hupa +Added: 2005-10-16 +%% +Type: language +Subtag: huq +Description: Tsat +Added: 2009-07-29 +%% +Type: language +Subtag: hur +Description: Halkomelem +Added: 2009-07-29 +%% +Type: language +Subtag: hus +Description: Huastec +Added: 2009-07-29 +%% +Type: language +Subtag: hut +Description: Humla +Added: 2009-07-29 +%% +Type: language +Subtag: huu +Description: Murui Huitoto +Added: 2009-07-29 +%% +Type: language +Subtag: huv +Description: San Mateo Del Mar Huave +Added: 2009-07-29 +%% +Type: language +Subtag: huw +Description: Hukumina +Added: 2009-07-29 +%% +Type: language +Subtag: hux +Description: Nüpode Huitoto +Added: 2009-07-29 +%% +Type: language +Subtag: huy +Description: Hulaulá +Added: 2009-07-29 +%% +Type: language +Subtag: huz +Description: Hunzib +Added: 2009-07-29 +%% +Type: language +Subtag: hvc +Description: Haitian Vodoun Culture Language +Added: 2009-07-29 +%% +Type: language +Subtag: hve +Description: San Dionisio Del Mar Huave +Added: 2009-07-29 +%% +Type: language +Subtag: hvk +Description: Haveke +Added: 2009-07-29 +%% +Type: language +Subtag: hvn +Description: Sabu +Added: 2009-07-29 +%% +Type: language +Subtag: hvv +Description: Santa María Del Mar Huave +Added: 2009-07-29 +%% +Type: language +Subtag: hwa +Description: Wané +Added: 2009-07-29 +%% +Type: language +Subtag: hwc +Description: Hawai'i Creole English +Added: 2009-07-29 +%% +Type: language +Subtag: hwo +Description: Hwana +Added: 2009-07-29 +%% +Type: language +Subtag: hya +Description: Hya +Added: 2009-07-29 +%% +Type: language +Subtag: hyx +Description: Armenian (family) +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: iai +Description: Iaai +Added: 2009-07-29 +%% +Type: language +Subtag: ian +Description: Iatmul +Added: 2009-07-29 +%% +Type: language +Subtag: iap +Description: Iapama +Added: 2009-07-29 +%% +Type: language +Subtag: iar +Description: Purari +Added: 2009-07-29 +%% +Type: language +Subtag: iba +Description: Iban +Added: 2005-10-16 +%% +Type: language +Subtag: ibb +Description: Ibibio +Added: 2009-07-29 +%% +Type: language +Subtag: ibd +Description: Iwaidja +Added: 2009-07-29 +%% +Type: language +Subtag: ibe +Description: Akpes +Added: 2009-07-29 +%% +Type: language +Subtag: ibg +Description: Ibanag +Added: 2009-07-29 +%% +Type: language +Subtag: ibi +Description: Ibilo +Added: 2009-07-29 +Deprecated: 2012-08-12 +Preferred-Value: opa +%% +Type: language +Subtag: ibl +Description: Ibaloi +Added: 2009-07-29 +%% +Type: language +Subtag: ibm +Description: Agoi +Added: 2009-07-29 +%% +Type: language +Subtag: ibn +Description: Ibino +Added: 2009-07-29 +%% +Type: language +Subtag: ibr +Description: Ibuoro +Added: 2009-07-29 +%% +Type: language +Subtag: ibu +Description: Ibu +Added: 2009-07-29 +%% +Type: language +Subtag: iby +Description: Ibani +Added: 2009-07-29 +%% +Type: language +Subtag: ica +Description: Ede Ica +Added: 2009-07-29 +%% +Type: language +Subtag: ich +Description: Etkywan +Added: 2009-07-29 +%% +Type: language +Subtag: icl +Description: Icelandic Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: icr +Description: Islander Creole English +Added: 2009-07-29 +%% +Type: language +Subtag: ida +Description: Idakho-Isukha-Tiriki +Description: Luidakho-Luisukha-Lutirichi +Added: 2009-07-29 +Macrolanguage: luy +%% +Type: language +Subtag: idb +Description: Indo-Portuguese +Added: 2009-07-29 +%% +Type: language +Subtag: idc +Description: Idon +Added: 2009-07-29 +%% +Type: language +Subtag: idd +Description: Ede Idaca +Added: 2009-07-29 +%% +Type: language +Subtag: ide +Description: Idere +Added: 2009-07-29 +%% +Type: language +Subtag: idi +Description: Idi +Added: 2009-07-29 +%% +Type: language +Subtag: idr +Description: Indri +Added: 2009-07-29 +%% +Type: language +Subtag: ids +Description: Idesa +Added: 2009-07-29 +%% +Type: language +Subtag: idt +Description: Idaté +Added: 2009-07-29 +%% +Type: language +Subtag: idu +Description: Idoma +Added: 2009-07-29 +%% +Type: language +Subtag: ifa +Description: Amganad Ifugao +Added: 2009-07-29 +%% +Type: language +Subtag: ifb +Description: Batad Ifugao +Description: Ayangan Ifugao +Added: 2009-07-29 +%% +Type: language +Subtag: ife +Description: Ifè +Added: 2009-07-29 +%% +Type: language +Subtag: iff +Description: Ifo +Added: 2009-07-29 +%% +Type: language +Subtag: ifk +Description: Tuwali Ifugao +Added: 2009-07-29 +%% +Type: language +Subtag: ifm +Description: Teke-Fuumu +Added: 2009-07-29 +%% +Type: language +Subtag: ifu +Description: Mayoyao Ifugao +Added: 2009-07-29 +%% +Type: language +Subtag: ify +Description: Keley-I Kallahan +Added: 2009-07-29 +%% +Type: language +Subtag: igb +Description: Ebira +Added: 2009-07-29 +%% +Type: language +Subtag: ige +Description: Igede +Added: 2009-07-29 +%% +Type: language +Subtag: igg +Description: Igana +Added: 2009-07-29 +%% +Type: language +Subtag: igl +Description: Igala +Added: 2009-07-29 +%% +Type: language +Subtag: igm +Description: Kanggape +Added: 2009-07-29 +%% +Type: language +Subtag: ign +Description: Ignaciano +Added: 2009-07-29 +%% +Type: language +Subtag: igo +Description: Isebe +Added: 2009-07-29 +%% +Type: language +Subtag: igs +Description: Interglossa +Added: 2009-07-29 +%% +Type: language +Subtag: igw +Description: Igwe +Added: 2009-07-29 +%% +Type: language +Subtag: ihb +Description: Iha Based Pidgin +Added: 2009-07-29 +%% +Type: language +Subtag: ihi +Description: Ihievbe +Added: 2009-07-29 +%% +Type: language +Subtag: ihp +Description: Iha +Added: 2009-07-29 +%% +Type: language +Subtag: ihw +Description: Bidhawal +Added: 2012-08-12 +%% +Type: language +Subtag: iir +Description: Indo-Iranian languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: ijc +Description: Izon +Added: 2009-07-29 +%% +Type: language +Subtag: ije +Description: Biseni +Added: 2009-07-29 +%% +Type: language +Subtag: ijj +Description: Ede Ije +Added: 2009-07-29 +%% +Type: language +Subtag: ijn +Description: Kalabari +Added: 2009-07-29 +%% +Type: language +Subtag: ijo +Description: Ijo languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: ijs +Description: Southeast Ijo +Added: 2009-07-29 +%% +Type: language +Subtag: ike +Description: Eastern Canadian Inuktitut +Added: 2009-07-29 +Macrolanguage: iu +%% +Type: language +Subtag: iki +Description: Iko +Added: 2009-07-29 +%% +Type: language +Subtag: ikk +Description: Ika +Added: 2009-07-29 +%% +Type: language +Subtag: ikl +Description: Ikulu +Added: 2009-07-29 +%% +Type: language +Subtag: iko +Description: Olulumo-Ikom +Added: 2009-07-29 +%% +Type: language +Subtag: ikp +Description: Ikpeshi +Added: 2009-07-29 +%% +Type: language +Subtag: ikt +Description: Inuinnaqtun +Description: Western Canadian Inuktitut +Added: 2009-07-29 +Macrolanguage: iu +%% +Type: language +Subtag: ikv +Description: Iku-Gora-Ankwa +Added: 2009-07-29 +%% +Type: language +Subtag: ikw +Description: Ikwere +Added: 2009-07-29 +%% +Type: language +Subtag: ikx +Description: Ik +Added: 2009-07-29 +%% +Type: language +Subtag: ikz +Description: Ikizu +Added: 2009-07-29 +%% +Type: language +Subtag: ila +Description: Ile Ape +Added: 2009-07-29 +%% +Type: language +Subtag: ilb +Description: Ila +Added: 2009-07-29 +%% +Type: language +Subtag: ilg +Description: Garig-Ilgar +Added: 2009-07-29 +%% +Type: language +Subtag: ili +Description: Ili Turki +Added: 2009-07-29 +%% +Type: language +Subtag: ilk +Description: Ilongot +Added: 2009-07-29 +%% +Type: language +Subtag: ill +Description: Iranun +Added: 2009-07-29 +%% +Type: language +Subtag: ilo +Description: Iloko +Added: 2005-10-16 +%% +Type: language +Subtag: ils +Description: International Sign +Added: 2009-07-29 +%% +Type: language +Subtag: ilu +Description: Ili'uun +Added: 2009-07-29 +%% +Type: language +Subtag: ilv +Description: Ilue +Added: 2009-07-29 +%% +Type: language +Subtag: ilw +Description: Talur +Added: 2009-07-29 +%% +Type: language +Subtag: ima +Description: Mala Malasar +Added: 2009-07-29 +%% +Type: language +Subtag: ime +Description: Imeraguen +Added: 2009-07-29 +%% +Type: language +Subtag: imi +Description: Anamgura +Added: 2009-07-29 +%% +Type: language +Subtag: iml +Description: Miluk +Added: 2009-07-29 +%% +Type: language +Subtag: imn +Description: Imonda +Added: 2009-07-29 +%% +Type: language +Subtag: imo +Description: Imbongu +Added: 2009-07-29 +%% +Type: language +Subtag: imr +Description: Imroing +Added: 2009-07-29 +%% +Type: language +Subtag: ims +Description: Marsian +Added: 2009-07-29 +%% +Type: language +Subtag: imy +Description: Milyan +Added: 2009-07-29 +%% +Type: language +Subtag: inb +Description: Inga +Added: 2009-07-29 +%% +Type: language +Subtag: inc +Description: Indic languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: ine +Description: Indo-European languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: ing +Description: Degexit'an +Added: 2009-07-29 +%% +Type: language +Subtag: inh +Description: Ingush +Added: 2005-10-16 +%% +Type: language +Subtag: inj +Description: Jungle Inga +Added: 2009-07-29 +%% +Type: language +Subtag: inl +Description: Indonesian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: inm +Description: Minaean +Added: 2009-07-29 +%% +Type: language +Subtag: inn +Description: Isinai +Added: 2009-07-29 +%% +Type: language +Subtag: ino +Description: Inoke-Yate +Added: 2009-07-29 +%% +Type: language +Subtag: inp +Description: Iñapari +Added: 2009-07-29 +%% +Type: language +Subtag: ins +Description: Indian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: int +Description: Intha +Added: 2009-07-29 +%% +Type: language +Subtag: inz +Description: Ineseño +Added: 2009-07-29 +%% +Type: language +Subtag: ior +Description: Inor +Added: 2009-07-29 +%% +Type: language +Subtag: iou +Description: Tuma-Irumu +Added: 2009-07-29 +%% +Type: language +Subtag: iow +Description: Iowa-Oto +Added: 2009-07-29 +%% +Type: language +Subtag: ipi +Description: Ipili +Added: 2009-07-29 +%% +Type: language +Subtag: ipo +Description: Ipiko +Added: 2009-07-29 +%% +Type: language +Subtag: iqu +Description: Iquito +Added: 2009-07-29 +%% +Type: language +Subtag: ira +Description: Iranian languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: ire +Description: Iresim +Added: 2009-07-29 +%% +Type: language +Subtag: irh +Description: Irarutu +Added: 2009-07-29 +%% +Type: language +Subtag: iri +Description: Irigwe +Added: 2009-07-29 +%% +Type: language +Subtag: irk +Description: Iraqw +Added: 2009-07-29 +%% +Type: language +Subtag: irn +Description: Irántxe +Added: 2009-07-29 +%% +Type: language +Subtag: iro +Description: Iroquoian languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: irr +Description: Ir +Added: 2009-07-29 +%% +Type: language +Subtag: iru +Description: Irula +Added: 2009-07-29 +%% +Type: language +Subtag: irx +Description: Kamberau +Added: 2009-07-29 +%% +Type: language +Subtag: iry +Description: Iraya +Added: 2009-07-29 +%% +Type: language +Subtag: isa +Description: Isabi +Added: 2009-07-29 +%% +Type: language +Subtag: isc +Description: Isconahua +Added: 2009-07-29 +%% +Type: language +Subtag: isd +Description: Isnag +Added: 2009-07-29 +%% +Type: language +Subtag: ise +Description: Italian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: isg +Description: Irish Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: ish +Description: Esan +Added: 2009-07-29 +%% +Type: language +Subtag: isi +Description: Nkem-Nkum +Added: 2009-07-29 +%% +Type: language +Subtag: isk +Description: Ishkashimi +Added: 2010-03-11 +%% +Type: language +Subtag: ism +Description: Masimasi +Added: 2009-07-29 +%% +Type: language +Subtag: isn +Description: Isanzu +Added: 2009-07-29 +%% +Type: language +Subtag: iso +Description: Isoko +Added: 2009-07-29 +%% +Type: language +Subtag: isr +Description: Israeli Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: ist +Description: Istriot +Added: 2009-07-29 +%% +Type: language +Subtag: isu +Description: Isu (Menchum Division) +Added: 2009-07-29 +%% +Type: language +Subtag: itb +Description: Binongan Itneg +Added: 2009-07-29 +%% +Type: language +Subtag: itc +Description: Italic languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: ite +Description: Itene +Added: 2009-07-29 +%% +Type: language +Subtag: iti +Description: Inlaod Itneg +Added: 2009-07-29 +%% +Type: language +Subtag: itk +Description: Judeo-Italian +Added: 2009-07-29 +%% +Type: language +Subtag: itl +Description: Itelmen +Added: 2009-07-29 +%% +Type: language +Subtag: itm +Description: Itu Mbon Uzo +Added: 2009-07-29 +%% +Type: language +Subtag: ito +Description: Itonama +Added: 2009-07-29 +%% +Type: language +Subtag: itr +Description: Iteri +Added: 2009-07-29 +%% +Type: language +Subtag: its +Description: Isekiri +Added: 2009-07-29 +%% +Type: language +Subtag: itt +Description: Maeng Itneg +Added: 2009-07-29 +%% +Type: language +Subtag: itv +Description: Itawit +Added: 2009-07-29 +%% +Type: language +Subtag: itw +Description: Ito +Added: 2009-07-29 +%% +Type: language +Subtag: itx +Description: Itik +Added: 2009-07-29 +%% +Type: language +Subtag: ity +Description: Moyadan Itneg +Added: 2009-07-29 +%% +Type: language +Subtag: itz +Description: Itzá +Added: 2009-07-29 +%% +Type: language +Subtag: ium +Description: Iu Mien +Added: 2009-07-29 +%% +Type: language +Subtag: ivb +Description: Ibatan +Added: 2009-07-29 +%% +Type: language +Subtag: ivv +Description: Ivatan +Added: 2009-07-29 +%% +Type: language +Subtag: iwk +Description: I-Wak +Added: 2009-07-29 +%% +Type: language +Subtag: iwm +Description: Iwam +Added: 2009-07-29 +%% +Type: language +Subtag: iwo +Description: Iwur +Added: 2009-07-29 +%% +Type: language +Subtag: iws +Description: Sepik Iwam +Added: 2009-07-29 +%% +Type: language +Subtag: ixc +Description: Ixcatec +Added: 2009-07-29 +%% +Type: language +Subtag: ixl +Description: Ixil +Added: 2009-07-29 +%% +Type: language +Subtag: iya +Description: Iyayu +Added: 2009-07-29 +%% +Type: language +Subtag: iyo +Description: Mesaka +Added: 2009-07-29 +%% +Type: language +Subtag: iyx +Description: Yaka (Congo) +Added: 2009-07-29 +%% +Type: language +Subtag: izh +Description: Ingrian +Added: 2009-07-29 +%% +Type: language +Subtag: izi +Description: Izi-Ezaa-Ikwo-Mgbo +Added: 2009-07-29 +%% +Type: language +Subtag: izr +Description: Izere +Added: 2009-07-29 +%% +Type: language +Subtag: jaa +Description: Jamamadí +Added: 2009-07-29 +%% +Type: language +Subtag: jab +Description: Hyam +Added: 2009-07-29 +%% +Type: language +Subtag: jac +Description: Popti' +Description: Jakalteko +Added: 2009-07-29 +%% +Type: language +Subtag: jad +Description: Jahanka +Added: 2009-07-29 +%% +Type: language +Subtag: jae +Description: Yabem +Added: 2009-07-29 +%% +Type: language +Subtag: jaf +Description: Jara +Added: 2009-07-29 +%% +Type: language +Subtag: jah +Description: Jah Hut +Added: 2009-07-29 +%% +Type: language +Subtag: jaj +Description: Zazao +Added: 2009-07-29 +%% +Type: language +Subtag: jak +Description: Jakun +Added: 2009-07-29 +Macrolanguage: ms +%% +Type: language +Subtag: jal +Description: Yalahatan +Added: 2009-07-29 +%% +Type: language +Subtag: jam +Description: Jamaican Creole English +Added: 2009-07-29 +%% +Type: language +Subtag: jan +Description: Jandai +Added: 2012-08-12 +%% +Type: language +Subtag: jao +Description: Yanyuwa +Added: 2009-07-29 +%% +Type: language +Subtag: jaq +Description: Yaqay +Added: 2009-07-29 +%% +Type: language +Subtag: jar +Description: Jarawa (Nigeria) +Added: 2009-07-29 +Deprecated: 2012-08-12 +Comments: see jgk, jjr +%% +Type: language +Subtag: jas +Description: New Caledonian Javanese +Added: 2009-07-29 +%% +Type: language +Subtag: jat +Description: Jakati +Added: 2009-07-29 +Macrolanguage: lah +%% +Type: language +Subtag: jau +Description: Yaur +Added: 2009-07-29 +%% +Type: language +Subtag: jax +Description: Jambi Malay +Added: 2009-07-29 +Macrolanguage: ms +%% +Type: language +Subtag: jay +Description: Yan-nhangu +Added: 2009-07-29 +%% +Type: language +Subtag: jaz +Description: Jawe +Added: 2009-07-29 +%% +Type: language +Subtag: jbe +Description: Judeo-Berber +Added: 2009-07-29 +%% +Type: language +Subtag: jbj +Description: Arandai +Added: 2009-07-29 +%% +Type: language +Subtag: jbk +Description: Barikewa +Added: 2012-08-12 +%% +Type: language +Subtag: jbn +Description: Nafusi +Added: 2009-07-29 +%% +Type: language +Subtag: jbo +Description: Lojban +Added: 2005-10-16 +%% +Type: language +Subtag: jbr +Description: Jofotek-Bromnya +Added: 2009-07-29 +%% +Type: language +Subtag: jbt +Description: Jabutí +Added: 2009-07-29 +%% +Type: language +Subtag: jbu +Description: Jukun Takum +Added: 2009-07-29 +%% +Type: language +Subtag: jbw +Description: Yawijibaya +Added: 2012-08-12 +%% +Type: language +Subtag: jcs +Description: Jamaican Country Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: jct +Description: Krymchak +Added: 2009-07-29 +%% +Type: language +Subtag: jda +Description: Jad +Added: 2009-07-29 +%% +Type: language +Subtag: jdg +Description: Jadgali +Added: 2009-07-29 +%% +Type: language +Subtag: jdt +Description: Judeo-Tat +Added: 2009-07-29 +%% +Type: language +Subtag: jeb +Description: Jebero +Added: 2009-07-29 +%% +Type: language +Subtag: jee +Description: Jerung +Added: 2009-07-29 +%% +Type: language +Subtag: jeg +Description: Jeng +Added: 2009-07-29 +%% +Type: language +Subtag: jeh +Description: Jeh +Added: 2009-07-29 +%% +Type: language +Subtag: jei +Description: Yei +Added: 2009-07-29 +%% +Type: language +Subtag: jek +Description: Jeri Kuo +Added: 2009-07-29 +%% +Type: language +Subtag: jel +Description: Yelmek +Added: 2009-07-29 +%% +Type: language +Subtag: jen +Description: Dza +Added: 2009-07-29 +%% +Type: language +Subtag: jer +Description: Jere +Added: 2009-07-29 +%% +Type: language +Subtag: jet +Description: Manem +Added: 2009-07-29 +%% +Type: language +Subtag: jeu +Description: Jonkor Bourmataguil +Added: 2009-07-29 +%% +Type: language +Subtag: jgb +Description: Ngbee +Added: 2009-07-29 +%% +Type: language +Subtag: jge +Description: Judeo-Georgian +Added: 2009-07-29 +%% +Type: language +Subtag: jgk +Description: Gwak +Added: 2012-08-12 +%% +Type: language +Subtag: jgo +Description: Ngomba +Added: 2009-07-29 +%% +Type: language +Subtag: jhi +Description: Jehai +Added: 2009-07-29 +%% +Type: language +Subtag: jhs +Description: Jhankot Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: jia +Description: Jina +Added: 2009-07-29 +%% +Type: language +Subtag: jib +Description: Jibu +Added: 2009-07-29 +%% +Type: language +Subtag: jic +Description: Tol +Added: 2009-07-29 +%% +Type: language +Subtag: jid +Description: Bu +Added: 2009-07-29 +%% +Type: language +Subtag: jie +Description: Jilbe +Added: 2009-07-29 +%% +Type: language +Subtag: jig +Description: Djingili +Added: 2009-07-29 +%% +Type: language +Subtag: jih +Description: sTodsde +Description: Shangzhai +Added: 2009-07-29 +%% +Type: language +Subtag: jii +Description: Jiiddu +Added: 2009-07-29 +%% +Type: language +Subtag: jil +Description: Jilim +Added: 2009-07-29 +%% +Type: language +Subtag: jim +Description: Jimi (Cameroon) +Added: 2009-07-29 +%% +Type: language +Subtag: jio +Description: Jiamao +Added: 2009-07-29 +%% +Type: language +Subtag: jiq +Description: Guanyinqiao +Description: Lavrung +Added: 2009-07-29 +%% +Type: language +Subtag: jit +Description: Jita +Added: 2009-07-29 +%% +Type: language +Subtag: jiu +Description: Youle Jinuo +Added: 2009-07-29 +%% +Type: language +Subtag: jiv +Description: Shuar +Added: 2009-07-29 +%% +Type: language +Subtag: jiy +Description: Buyuan Jinuo +Added: 2009-07-29 +%% +Type: language +Subtag: jjr +Description: Bankal +Added: 2012-08-12 +%% +Type: language +Subtag: jkm +Description: Mobwa Karen +Added: 2012-08-12 +%% +Type: language +Subtag: jko +Description: Kubo +Added: 2009-07-29 +%% +Type: language +Subtag: jkp +Description: Paku Karen +Added: 2012-08-12 +%% +Type: language +Subtag: jkr +Description: Koro (India) +Added: 2012-08-12 +%% +Type: language +Subtag: jku +Description: Labir +Added: 2009-07-29 +%% +Type: language +Subtag: jle +Description: Ngile +Added: 2009-07-29 +%% +Type: language +Subtag: jls +Description: Jamaican Sign Language +Added: 2010-03-11 +%% +Type: language +Subtag: jma +Description: Dima +Added: 2009-07-29 +%% +Type: language +Subtag: jmb +Description: Zumbun +Added: 2009-07-29 +%% +Type: language +Subtag: jmc +Description: Machame +Added: 2009-07-29 +%% +Type: language +Subtag: jmd +Description: Yamdena +Added: 2009-07-29 +%% +Type: language +Subtag: jmi +Description: Jimi (Nigeria) +Added: 2009-07-29 +%% +Type: language +Subtag: jml +Description: Jumli +Added: 2009-07-29 +%% +Type: language +Subtag: jmn +Description: Makuri Naga +Added: 2009-07-29 +%% +Type: language +Subtag: jmr +Description: Kamara +Added: 2009-07-29 +%% +Type: language +Subtag: jms +Description: Mashi (Nigeria) +Added: 2009-07-29 +%% +Type: language +Subtag: jmw +Description: Mouwase +Added: 2012-08-12 +%% +Type: language +Subtag: jmx +Description: Western Juxtlahuaca Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: jna +Description: Jangshung +Added: 2009-07-29 +%% +Type: language +Subtag: jnd +Description: Jandavra +Added: 2009-07-29 +%% +Type: language +Subtag: jng +Description: Yangman +Added: 2009-07-29 +%% +Type: language +Subtag: jni +Description: Janji +Added: 2009-07-29 +%% +Type: language +Subtag: jnj +Description: Yemsa +Added: 2009-07-29 +%% +Type: language +Subtag: jnl +Description: Rawat +Added: 2009-07-29 +%% +Type: language +Subtag: jns +Description: Jaunsari +Added: 2009-07-29 +%% +Type: language +Subtag: job +Description: Joba +Added: 2009-07-29 +%% +Type: language +Subtag: jod +Description: Wojenaka +Added: 2009-07-29 +%% +Type: language +Subtag: jor +Description: Jorá +Added: 2009-07-29 +%% +Type: language +Subtag: jos +Description: Jordanian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: jow +Description: Jowulu +Added: 2009-07-29 +%% +Type: language +Subtag: jpa +Description: Jewish Palestinian Aramaic +Added: 2009-07-29 +%% +Type: language +Subtag: jpr +Description: Judeo-Persian +Added: 2005-10-16 +%% +Type: language +Subtag: jpx +Description: Japanese (family) +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: jqr +Description: Jaqaru +Added: 2009-07-29 +%% +Type: language +Subtag: jra +Description: Jarai +Added: 2009-07-29 +%% +Type: language +Subtag: jrb +Description: Judeo-Arabic +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: jrr +Description: Jiru +Added: 2009-07-29 +%% +Type: language +Subtag: jrt +Description: Jorto +Added: 2009-07-29 +%% +Type: language +Subtag: jru +Description: Japrería +Added: 2009-07-29 +%% +Type: language +Subtag: jsl +Description: Japanese Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: jua +Description: Júma +Added: 2009-07-29 +%% +Type: language +Subtag: jub +Description: Wannu +Added: 2009-07-29 +%% +Type: language +Subtag: juc +Description: Jurchen +Added: 2009-07-29 +%% +Type: language +Subtag: jud +Description: Worodougou +Added: 2009-07-29 +%% +Type: language +Subtag: juh +Description: Hõne +Added: 2009-07-29 +%% +Type: language +Subtag: jui +Description: Ngadjuri +Added: 2012-08-12 +%% +Type: language +Subtag: juk +Description: Wapan +Added: 2009-07-29 +%% +Type: language +Subtag: jul +Description: Jirel +Added: 2009-07-29 +%% +Type: language +Subtag: jum +Description: Jumjum +Added: 2009-07-29 +%% +Type: language +Subtag: jun +Description: Juang +Added: 2009-07-29 +%% +Type: language +Subtag: juo +Description: Jiba +Added: 2009-07-29 +%% +Type: language +Subtag: jup +Description: Hupdë +Added: 2009-07-29 +%% +Type: language +Subtag: jur +Description: Jurúna +Added: 2009-07-29 +%% +Type: language +Subtag: jus +Description: Jumla Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: jut +Description: Jutish +Added: 2009-07-29 +%% +Type: language +Subtag: juu +Description: Ju +Added: 2009-07-29 +%% +Type: language +Subtag: juw +Description: Wãpha +Added: 2009-07-29 +%% +Type: language +Subtag: juy +Description: Juray +Added: 2009-07-29 +%% +Type: language +Subtag: jvd +Description: Javindo +Added: 2009-07-29 +%% +Type: language +Subtag: jvn +Description: Caribbean Javanese +Added: 2009-07-29 +%% +Type: language +Subtag: jwi +Description: Jwira-Pepesa +Added: 2009-07-29 +%% +Type: language +Subtag: jya +Description: Jiarong +Added: 2009-07-29 +%% +Type: language +Subtag: jye +Description: Judeo-Yemeni Arabic +Added: 2009-07-29 +Macrolanguage: jrb +%% +Type: language +Subtag: jyy +Description: Jaya +Added: 2009-07-29 +%% +Type: language +Subtag: kaa +Description: Kara-Kalpak +Added: 2005-10-16 +%% +Type: language +Subtag: kab +Description: Kabyle +Added: 2005-10-16 +%% +Type: language +Subtag: kac +Description: Kachin +Description: Jingpho +Added: 2005-10-16 +%% +Type: language +Subtag: kad +Description: Adara +Added: 2009-07-29 +%% +Type: language +Subtag: kae +Description: Ketangalan +Added: 2009-07-29 +%% +Type: language +Subtag: kaf +Description: Katso +Added: 2009-07-29 +%% +Type: language +Subtag: kag +Description: Kajaman +Added: 2009-07-29 +%% +Type: language +Subtag: kah +Description: Kara (Central African Republic) +Added: 2009-07-29 +%% +Type: language +Subtag: kai +Description: Karekare +Added: 2009-07-29 +%% +Type: language +Subtag: kaj +Description: Jju +Added: 2009-07-29 +%% +Type: language +Subtag: kak +Description: Kayapa Kallahan +Added: 2009-07-29 +%% +Type: language +Subtag: kam +Description: Kamba (Kenya) +Added: 2005-10-16 +%% +Type: language +Subtag: kao +Description: Xaasongaxango +Added: 2009-07-29 +%% +Type: language +Subtag: kap +Description: Bezhta +Added: 2009-07-29 +%% +Type: language +Subtag: kaq +Description: Capanahua +Added: 2009-07-29 +%% +Type: language +Subtag: kar +Description: Karen languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: kav +Description: Katukína +Added: 2009-07-29 +%% +Type: language +Subtag: kaw +Description: Kawi +Added: 2005-10-16 +%% +Type: language +Subtag: kax +Description: Kao +Added: 2009-07-29 +%% +Type: language +Subtag: kay +Description: Kamayurá +Added: 2009-07-29 +%% +Type: language +Subtag: kba +Description: Kalarko +Added: 2009-07-29 +%% +Type: language +Subtag: kbb +Description: Kaxuiâna +Added: 2009-07-29 +%% +Type: language +Subtag: kbc +Description: Kadiwéu +Added: 2009-07-29 +%% +Type: language +Subtag: kbd +Description: Kabardian +Added: 2005-10-16 +%% +Type: language +Subtag: kbe +Description: Kanju +Added: 2009-07-29 +%% +Type: language +Subtag: kbf +Description: Kakauhua +Added: 2009-07-29 +%% +Type: language +Subtag: kbg +Description: Khamba +Added: 2009-07-29 +%% +Type: language +Subtag: kbh +Description: Camsá +Added: 2009-07-29 +%% +Type: language +Subtag: kbi +Description: Kaptiau +Added: 2009-07-29 +%% +Type: language +Subtag: kbj +Description: Kari +Added: 2009-07-29 +%% +Type: language +Subtag: kbk +Description: Grass Koiari +Added: 2009-07-29 +%% +Type: language +Subtag: kbl +Description: Kanembu +Added: 2009-07-29 +%% +Type: language +Subtag: kbm +Description: Iwal +Added: 2009-07-29 +%% +Type: language +Subtag: kbn +Description: Kare (Central African Republic) +Added: 2009-07-29 +%% +Type: language +Subtag: kbo +Description: Keliko +Added: 2009-07-29 +%% +Type: language +Subtag: kbp +Description: Kabiyè +Added: 2009-07-29 +%% +Type: language +Subtag: kbq +Description: Kamano +Added: 2009-07-29 +%% +Type: language +Subtag: kbr +Description: Kafa +Added: 2009-07-29 +%% +Type: language +Subtag: kbs +Description: Kande +Added: 2009-07-29 +%% +Type: language +Subtag: kbt +Description: Abadi +Added: 2009-07-29 +%% +Type: language +Subtag: kbu +Description: Kabutra +Added: 2009-07-29 +%% +Type: language +Subtag: kbv +Description: Dera (Indonesia) +Added: 2009-07-29 +%% +Type: language +Subtag: kbw +Description: Kaiep +Added: 2009-07-29 +%% +Type: language +Subtag: kbx +Description: Ap Ma +Added: 2009-07-29 +%% +Type: language +Subtag: kby +Description: Manga Kanuri +Added: 2009-07-29 +Macrolanguage: kr +%% +Type: language +Subtag: kbz +Description: Duhwa +Added: 2009-07-29 +%% +Type: language +Subtag: kca +Description: Khanty +Added: 2009-07-29 +%% +Type: language +Subtag: kcb +Description: Kawacha +Added: 2009-07-29 +%% +Type: language +Subtag: kcc +Description: Lubila +Added: 2009-07-29 +%% +Type: language +Subtag: kcd +Description: Ngkâlmpw Kanum +Added: 2009-07-29 +%% +Type: language +Subtag: kce +Description: Kaivi +Added: 2009-07-29 +%% +Type: language +Subtag: kcf +Description: Ukaan +Added: 2009-07-29 +%% +Type: language +Subtag: kcg +Description: Tyap +Added: 2009-07-29 +%% +Type: language +Subtag: kch +Description: Vono +Added: 2009-07-29 +%% +Type: language +Subtag: kci +Description: Kamantan +Added: 2009-07-29 +%% +Type: language +Subtag: kcj +Description: Kobiana +Added: 2009-07-29 +%% +Type: language +Subtag: kck +Description: Kalanga +Added: 2009-07-29 +%% +Type: language +Subtag: kcl +Description: Kela (Papua New Guinea) +Description: Kala +Added: 2009-07-29 +%% +Type: language +Subtag: kcm +Description: Gula (Central African Republic) +Added: 2009-07-29 +%% +Type: language +Subtag: kcn +Description: Nubi +Added: 2009-07-29 +%% +Type: language +Subtag: kco +Description: Kinalakna +Added: 2009-07-29 +%% +Type: language +Subtag: kcp +Description: Kanga +Added: 2009-07-29 +%% +Type: language +Subtag: kcq +Description: Kamo +Added: 2009-07-29 +%% +Type: language +Subtag: kcr +Description: Katla +Added: 2009-07-29 +%% +Type: language +Subtag: kcs +Description: Koenoem +Added: 2009-07-29 +%% +Type: language +Subtag: kct +Description: Kaian +Added: 2009-07-29 +%% +Type: language +Subtag: kcu +Description: Kami (Tanzania) +Added: 2009-07-29 +%% +Type: language +Subtag: kcv +Description: Kete +Added: 2009-07-29 +%% +Type: language +Subtag: kcw +Description: Kabwari +Added: 2009-07-29 +%% +Type: language +Subtag: kcx +Description: Kachama-Ganjule +Added: 2009-07-29 +%% +Type: language +Subtag: kcy +Description: Korandje +Added: 2009-07-29 +%% +Type: language +Subtag: kcz +Description: Konongo +Added: 2009-07-29 +%% +Type: language +Subtag: kda +Description: Worimi +Added: 2009-07-29 +%% +Type: language +Subtag: kdc +Description: Kutu +Added: 2009-07-29 +%% +Type: language +Subtag: kdd +Description: Yankunytjatjara +Added: 2009-07-29 +%% +Type: language +Subtag: kde +Description: Makonde +Added: 2009-07-29 +%% +Type: language +Subtag: kdf +Description: Mamusi +Added: 2009-07-29 +%% +Type: language +Subtag: kdg +Description: Seba +Added: 2009-07-29 +%% +Type: language +Subtag: kdh +Description: Tem +Added: 2009-07-29 +%% +Type: language +Subtag: kdi +Description: Kumam +Added: 2009-07-29 +%% +Type: language +Subtag: kdj +Description: Karamojong +Added: 2009-07-29 +%% +Type: language +Subtag: kdk +Description: Numee +Added: 2009-07-29 +%% +Type: language +Subtag: kdl +Description: Tsikimba +Added: 2009-07-29 +%% +Type: language +Subtag: kdm +Description: Kagoma +Added: 2009-07-29 +%% +Type: language +Subtag: kdn +Description: Kunda +Added: 2009-07-29 +%% +Type: language +Subtag: kdo +Description: Kordofanian languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: kdp +Description: Kaningdon-Nindem +Added: 2009-07-29 +%% +Type: language +Subtag: kdq +Description: Koch +Added: 2009-07-29 +%% +Type: language +Subtag: kdr +Description: Karaim +Added: 2009-07-29 +%% +Type: language +Subtag: kdt +Description: Kuy +Added: 2009-07-29 +%% +Type: language +Subtag: kdu +Description: Kadaru +Added: 2009-07-29 +%% +Type: language +Subtag: kdv +Description: Kado +Added: 2009-07-29 +Deprecated: 2012-08-12 +Comments: see zkd, zkn +%% +Type: language +Subtag: kdw +Description: Koneraw +Added: 2009-07-29 +%% +Type: language +Subtag: kdx +Description: Kam +Added: 2009-07-29 +%% +Type: language +Subtag: kdy +Description: Keder +Description: Keijar +Added: 2009-07-29 +%% +Type: language +Subtag: kdz +Description: Kwaja +Added: 2009-07-29 +%% +Type: language +Subtag: kea +Description: Kabuverdianu +Added: 2009-07-29 +%% +Type: language +Subtag: keb +Description: Kélé +Added: 2009-07-29 +%% +Type: language +Subtag: kec +Description: Keiga +Added: 2009-07-29 +%% +Type: language +Subtag: ked +Description: Kerewe +Added: 2009-07-29 +%% +Type: language +Subtag: kee +Description: Eastern Keres +Added: 2009-07-29 +%% +Type: language +Subtag: kef +Description: Kpessi +Added: 2009-07-29 +%% +Type: language +Subtag: keg +Description: Tese +Added: 2009-07-29 +%% +Type: language +Subtag: keh +Description: Keak +Added: 2009-07-29 +%% +Type: language +Subtag: kei +Description: Kei +Added: 2009-07-29 +%% +Type: language +Subtag: kej +Description: Kadar +Added: 2009-07-29 +%% +Type: language +Subtag: kek +Description: Kekchí +Added: 2009-07-29 +%% +Type: language +Subtag: kel +Description: Kela (Democratic Republic of Congo) +Added: 2009-07-29 +%% +Type: language +Subtag: kem +Description: Kemak +Added: 2009-07-29 +%% +Type: language +Subtag: ken +Description: Kenyang +Added: 2009-07-29 +%% +Type: language +Subtag: keo +Description: Kakwa +Added: 2009-07-29 +%% +Type: language +Subtag: kep +Description: Kaikadi +Added: 2009-07-29 +%% +Type: language +Subtag: keq +Description: Kamar +Added: 2009-07-29 +%% +Type: language +Subtag: ker +Description: Kera +Added: 2009-07-29 +%% +Type: language +Subtag: kes +Description: Kugbo +Added: 2009-07-29 +%% +Type: language +Subtag: ket +Description: Ket +Added: 2009-07-29 +%% +Type: language +Subtag: keu +Description: Akebu +Added: 2009-07-29 +%% +Type: language +Subtag: kev +Description: Kanikkaran +Added: 2009-07-29 +%% +Type: language +Subtag: kew +Description: West Kewa +Added: 2009-07-29 +%% +Type: language +Subtag: kex +Description: Kukna +Added: 2009-07-29 +%% +Type: language +Subtag: key +Description: Kupia +Added: 2009-07-29 +%% +Type: language +Subtag: kez +Description: Kukele +Added: 2009-07-29 +%% +Type: language +Subtag: kfa +Description: Kodava +Added: 2009-07-29 +%% +Type: language +Subtag: kfb +Description: Northwestern Kolami +Added: 2009-07-29 +%% +Type: language +Subtag: kfc +Description: Konda-Dora +Added: 2009-07-29 +%% +Type: language +Subtag: kfd +Description: Korra Koraga +Added: 2009-07-29 +%% +Type: language +Subtag: kfe +Description: Kota (India) +Added: 2009-07-29 +%% +Type: language +Subtag: kff +Description: Koya +Added: 2009-07-29 +%% +Type: language +Subtag: kfg +Description: Kudiya +Added: 2009-07-29 +%% +Type: language +Subtag: kfh +Description: Kurichiya +Added: 2009-07-29 +%% +Type: language +Subtag: kfi +Description: Kannada Kurumba +Added: 2009-07-29 +%% +Type: language +Subtag: kfj +Description: Kemiehua +Added: 2009-07-29 +%% +Type: language +Subtag: kfk +Description: Kinnauri +Added: 2009-07-29 +%% +Type: language +Subtag: kfl +Description: Kung +Added: 2009-07-29 +%% +Type: language +Subtag: kfm +Description: Khunsari +Added: 2009-07-29 +%% +Type: language +Subtag: kfn +Description: Kuk +Added: 2009-07-29 +%% +Type: language +Subtag: kfo +Description: Koro (Côte d'Ivoire) +Added: 2009-07-29 +%% +Type: language +Subtag: kfp +Description: Korwa +Added: 2009-07-29 +%% +Type: language +Subtag: kfq +Description: Korku +Added: 2009-07-29 +%% +Type: language +Subtag: kfr +Description: Kachchi +Added: 2009-07-29 +%% +Type: language +Subtag: kfs +Description: Bilaspuri +Added: 2009-07-29 +%% +Type: language +Subtag: kft +Description: Kanjari +Added: 2009-07-29 +%% +Type: language +Subtag: kfu +Description: Katkari +Added: 2009-07-29 +%% +Type: language +Subtag: kfv +Description: Kurmukar +Added: 2009-07-29 +%% +Type: language +Subtag: kfw +Description: Kharam Naga +Added: 2009-07-29 +%% +Type: language +Subtag: kfx +Description: Kullu Pahari +Added: 2009-07-29 +%% +Type: language +Subtag: kfy +Description: Kumaoni +Added: 2009-07-29 +%% +Type: language +Subtag: kfz +Description: Koromfé +Added: 2009-07-29 +%% +Type: language +Subtag: kga +Description: Koyaga +Added: 2009-07-29 +%% +Type: language +Subtag: kgb +Description: Kawe +Added: 2009-07-29 +%% +Type: language +Subtag: kgc +Description: Kasseng +Added: 2009-07-29 +%% +Type: language +Subtag: kgd +Description: Kataang +Added: 2009-07-29 +%% +Type: language +Subtag: kge +Description: Komering +Added: 2009-07-29 +%% +Type: language +Subtag: kgf +Description: Kube +Added: 2009-07-29 +%% +Type: language +Subtag: kgg +Description: Kusunda +Added: 2009-07-29 +%% +Type: language +Subtag: kgh +Description: Upper Tanudan Kalinga +Added: 2009-07-29 +Deprecated: 2012-08-12 +Preferred-Value: kml +%% +Type: language +Subtag: kgi +Description: Selangor Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: kgj +Description: Gamale Kham +Added: 2009-07-29 +%% +Type: language +Subtag: kgk +Description: Kaiwá +Added: 2009-07-29 +%% +Type: language +Subtag: kgl +Description: Kunggari +Added: 2009-07-29 +%% +Type: language +Subtag: kgm +Description: Karipúna +Added: 2009-07-29 +%% +Type: language +Subtag: kgn +Description: Karingani +Added: 2009-07-29 +%% +Type: language +Subtag: kgo +Description: Krongo +Added: 2009-07-29 +%% +Type: language +Subtag: kgp +Description: Kaingang +Added: 2009-07-29 +%% +Type: language +Subtag: kgq +Description: Kamoro +Added: 2009-07-29 +%% +Type: language +Subtag: kgr +Description: Abun +Added: 2009-07-29 +%% +Type: language +Subtag: kgs +Description: Kumbainggar +Added: 2009-07-29 +%% +Type: language +Subtag: kgt +Description: Somyev +Added: 2009-07-29 +%% +Type: language +Subtag: kgu +Description: Kobol +Added: 2009-07-29 +%% +Type: language +Subtag: kgv +Description: Karas +Added: 2009-07-29 +%% +Type: language +Subtag: kgw +Description: Karon Dori +Added: 2009-07-29 +%% +Type: language +Subtag: kgx +Description: Kamaru +Added: 2009-07-29 +%% +Type: language +Subtag: kgy +Description: Kyerung +Added: 2009-07-29 +%% +Type: language +Subtag: kha +Description: Khasi +Added: 2005-10-16 +Comments: as of 2008-04-21 this subtag does not include Lyngngam; see + lyg +%% +Type: language +Subtag: khb +Description: Lü +Added: 2009-07-29 +%% +Type: language +Subtag: khc +Description: Tukang Besi North +Added: 2009-07-29 +%% +Type: language +Subtag: khd +Description: Bädi Kanum +Added: 2009-07-29 +%% +Type: language +Subtag: khe +Description: Korowai +Added: 2009-07-29 +%% +Type: language +Subtag: khf +Description: Khuen +Added: 2009-07-29 +%% +Type: language +Subtag: khg +Description: Khams Tibetan +Added: 2009-07-29 +%% +Type: language +Subtag: khh +Description: Kehu +Added: 2009-07-29 +%% +Type: language +Subtag: khi +Description: Khoisan languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: khj +Description: Kuturmi +Added: 2009-07-29 +%% +Type: language +Subtag: khk +Description: Halh Mongolian +Added: 2009-07-29 +Macrolanguage: mn +%% +Type: language +Subtag: khl +Description: Lusi +Added: 2009-07-29 +%% +Type: language +Subtag: khn +Description: Khandesi +Added: 2009-07-29 +%% +Type: language +Subtag: kho +Description: Khotanese +Description: Sakan +Added: 2005-10-16 +%% +Type: language +Subtag: khp +Description: Kapori +Description: Kapauri +Added: 2009-07-29 +%% +Type: language +Subtag: khq +Description: Koyra Chiini Songhay +Added: 2009-07-29 +%% +Type: language +Subtag: khr +Description: Kharia +Added: 2009-07-29 +%% +Type: language +Subtag: khs +Description: Kasua +Added: 2009-07-29 +%% +Type: language +Subtag: kht +Description: Khamti +Added: 2009-07-29 +%% +Type: language +Subtag: khu +Description: Nkhumbi +Added: 2009-07-29 +%% +Type: language +Subtag: khv +Description: Khvarshi +Added: 2009-07-29 +%% +Type: language +Subtag: khw +Description: Khowar +Added: 2009-07-29 +%% +Type: language +Subtag: khx +Description: Kanu +Added: 2009-07-29 +%% +Type: language +Subtag: khy +Description: Kele (Democratic Republic of Congo) +Added: 2009-07-29 +%% +Type: language +Subtag: khz +Description: Keapara +Added: 2009-07-29 +%% +Type: language +Subtag: kia +Description: Kim +Added: 2009-07-29 +%% +Type: language +Subtag: kib +Description: Koalib +Added: 2009-07-29 +%% +Type: language +Subtag: kic +Description: Kickapoo +Added: 2009-07-29 +%% +Type: language +Subtag: kid +Description: Koshin +Added: 2009-07-29 +%% +Type: language +Subtag: kie +Description: Kibet +Added: 2009-07-29 +%% +Type: language +Subtag: kif +Description: Eastern Parbate Kham +Added: 2009-07-29 +%% +Type: language +Subtag: kig +Description: Kimaama +Description: Kimaghima +Added: 2009-07-29 +%% +Type: language +Subtag: kih +Description: Kilmeri +Added: 2009-07-29 +%% +Type: language +Subtag: kii +Description: Kitsai +Added: 2009-07-29 +%% +Type: language +Subtag: kij +Description: Kilivila +Added: 2009-07-29 +%% +Type: language +Subtag: kil +Description: Kariya +Added: 2009-07-29 +%% +Type: language +Subtag: kim +Description: Karagas +Added: 2009-07-29 +%% +Type: language +Subtag: kio +Description: Kiowa +Added: 2009-07-29 +%% +Type: language +Subtag: kip +Description: Sheshi Kham +Added: 2009-07-29 +%% +Type: language +Subtag: kiq +Description: Kosadle +Description: Kosare +Added: 2009-07-29 +%% +Type: language +Subtag: kis +Description: Kis +Added: 2009-07-29 +%% +Type: language +Subtag: kit +Description: Agob +Added: 2009-07-29 +%% +Type: language +Subtag: kiu +Description: Kirmanjki (individual language) +Added: 2009-07-29 +Macrolanguage: zza +%% +Type: language +Subtag: kiv +Description: Kimbu +Added: 2009-07-29 +%% +Type: language +Subtag: kiw +Description: Northeast Kiwai +Added: 2009-07-29 +%% +Type: language +Subtag: kix +Description: Khiamniungan Naga +Added: 2009-07-29 +%% +Type: language +Subtag: kiy +Description: Kirikiri +Added: 2009-07-29 +%% +Type: language +Subtag: kiz +Description: Kisi +Added: 2009-07-29 +%% +Type: language +Subtag: kja +Description: Mlap +Added: 2009-07-29 +%% +Type: language +Subtag: kjb +Description: Q'anjob'al +Description: Kanjobal +Added: 2009-07-29 +%% +Type: language +Subtag: kjc +Description: Coastal Konjo +Added: 2009-07-29 +%% +Type: language +Subtag: kjd +Description: Southern Kiwai +Added: 2009-07-29 +%% +Type: language +Subtag: kje +Description: Kisar +Added: 2009-07-29 +%% +Type: language +Subtag: kjf +Description: Khalaj +Added: 2009-07-29 +%% +Type: language +Subtag: kjg +Description: Khmu +Added: 2009-07-29 +%% +Type: language +Subtag: kjh +Description: Khakas +Added: 2009-07-29 +%% +Type: language +Subtag: kji +Description: Zabana +Added: 2009-07-29 +%% +Type: language +Subtag: kjj +Description: Khinalugh +Added: 2009-07-29 +%% +Type: language +Subtag: kjk +Description: Highland Konjo +Added: 2009-07-29 +%% +Type: language +Subtag: kjl +Description: Western Parbate Kham +Added: 2009-07-29 +%% +Type: language +Subtag: kjm +Description: Kháng +Added: 2009-07-29 +%% +Type: language +Subtag: kjn +Description: Kunjen +Added: 2009-07-29 +%% +Type: language +Subtag: kjo +Description: Harijan Kinnauri +Added: 2009-07-29 +%% +Type: language +Subtag: kjp +Description: Pwo Eastern Karen +Added: 2009-07-29 +%% +Type: language +Subtag: kjq +Description: Western Keres +Added: 2009-07-29 +%% +Type: language +Subtag: kjr +Description: Kurudu +Added: 2009-07-29 +%% +Type: language +Subtag: kjs +Description: East Kewa +Added: 2009-07-29 +%% +Type: language +Subtag: kjt +Description: Phrae Pwo Karen +Added: 2009-07-29 +%% +Type: language +Subtag: kju +Description: Kashaya +Added: 2009-07-29 +%% +Type: language +Subtag: kjx +Description: Ramopa +Added: 2009-07-29 +%% +Type: language +Subtag: kjy +Description: Erave +Added: 2009-07-29 +%% +Type: language +Subtag: kjz +Description: Bumthangkha +Added: 2009-07-29 +%% +Type: language +Subtag: kka +Description: Kakanda +Added: 2009-07-29 +%% +Type: language +Subtag: kkb +Description: Kwerisa +Added: 2009-07-29 +%% +Type: language +Subtag: kkc +Description: Odoodee +Added: 2009-07-29 +%% +Type: language +Subtag: kkd +Description: Kinuku +Added: 2009-07-29 +%% +Type: language +Subtag: kke +Description: Kakabe +Added: 2009-07-29 +%% +Type: language +Subtag: kkf +Description: Kalaktang Monpa +Added: 2009-07-29 +%% +Type: language +Subtag: kkg +Description: Mabaka Valley Kalinga +Added: 2009-07-29 +%% +Type: language +Subtag: kkh +Description: Khün +Added: 2009-07-29 +%% +Type: language +Subtag: kki +Description: Kagulu +Added: 2009-07-29 +%% +Type: language +Subtag: kkj +Description: Kako +Added: 2009-07-29 +%% +Type: language +Subtag: kkk +Description: Kokota +Added: 2009-07-29 +%% +Type: language +Subtag: kkl +Description: Kosarek Yale +Added: 2009-07-29 +%% +Type: language +Subtag: kkm +Description: Kiong +Added: 2009-07-29 +%% +Type: language +Subtag: kkn +Description: Kon Keu +Added: 2009-07-29 +%% +Type: language +Subtag: kko +Description: Karko +Added: 2009-07-29 +%% +Type: language +Subtag: kkp +Description: Gugubera +Added: 2009-07-29 +%% +Type: language +Subtag: kkq +Description: Kaiku +Added: 2009-07-29 +%% +Type: language +Subtag: kkr +Description: Kir-Balar +Added: 2009-07-29 +%% +Type: language +Subtag: kks +Description: Giiwo +Added: 2009-07-29 +%% +Type: language +Subtag: kkt +Description: Koi +Added: 2009-07-29 +%% +Type: language +Subtag: kku +Description: Tumi +Added: 2009-07-29 +%% +Type: language +Subtag: kkv +Description: Kangean +Added: 2009-07-29 +%% +Type: language +Subtag: kkw +Description: Teke-Kukuya +Added: 2009-07-29 +%% +Type: language +Subtag: kkx +Description: Kohin +Added: 2009-07-29 +%% +Type: language +Subtag: kky +Description: Guguyimidjir +Added: 2009-07-29 +%% +Type: language +Subtag: kkz +Description: Kaska +Added: 2009-07-29 +%% +Type: language +Subtag: kla +Description: Klamath-Modoc +Added: 2009-07-29 +%% +Type: language +Subtag: klb +Description: Kiliwa +Added: 2009-07-29 +%% +Type: language +Subtag: klc +Description: Kolbila +Added: 2009-07-29 +%% +Type: language +Subtag: kld +Description: Gamilaraay +Added: 2009-07-29 +%% +Type: language +Subtag: kle +Description: Kulung (Nepal) +Added: 2009-07-29 +%% +Type: language +Subtag: klf +Description: Kendeje +Added: 2009-07-29 +%% +Type: language +Subtag: klg +Description: Tagakaulo +Added: 2009-07-29 +%% +Type: language +Subtag: klh +Description: Weliki +Added: 2009-07-29 +%% +Type: language +Subtag: kli +Description: Kalumpang +Added: 2009-07-29 +%% +Type: language +Subtag: klj +Description: Turkic Khalaj +Added: 2009-07-29 +%% +Type: language +Subtag: klk +Description: Kono (Nigeria) +Added: 2009-07-29 +%% +Type: language +Subtag: kll +Description: Kagan Kalagan +Added: 2009-07-29 +%% +Type: language +Subtag: klm +Description: Migum +Added: 2009-07-29 +%% +Type: language +Subtag: kln +Description: Kalenjin +Added: 2009-07-29 +Scope: macrolanguage +%% +Type: language +Subtag: klo +Description: Kapya +Added: 2009-07-29 +%% +Type: language +Subtag: klp +Description: Kamasa +Added: 2009-07-29 +%% +Type: language +Subtag: klq +Description: Rumu +Added: 2009-07-29 +%% +Type: language +Subtag: klr +Description: Khaling +Added: 2009-07-29 +%% +Type: language +Subtag: kls +Description: Kalasha +Added: 2009-07-29 +%% +Type: language +Subtag: klt +Description: Nukna +Added: 2009-07-29 +%% +Type: language +Subtag: klu +Description: Klao +Added: 2009-07-29 +%% +Type: language +Subtag: klv +Description: Maskelynes +Added: 2009-07-29 +%% +Type: language +Subtag: klw +Description: Lindu +Added: 2009-07-29 +%% +Type: language +Subtag: klx +Description: Koluwawa +Added: 2009-07-29 +%% +Type: language +Subtag: kly +Description: Kalao +Added: 2009-07-29 +%% +Type: language +Subtag: klz +Description: Kabola +Added: 2009-07-29 +%% +Type: language +Subtag: kma +Description: Konni +Added: 2009-07-29 +%% +Type: language +Subtag: kmb +Description: Kimbundu +Added: 2005-10-16 +%% +Type: language +Subtag: kmc +Description: Southern Dong +Added: 2009-07-29 +%% +Type: language +Subtag: kmd +Description: Majukayang Kalinga +Added: 2009-07-29 +%% +Type: language +Subtag: kme +Description: Bakole +Added: 2009-07-29 +%% +Type: language +Subtag: kmf +Description: Kare (Papua New Guinea) +Added: 2009-07-29 +%% +Type: language +Subtag: kmg +Description: Kâte +Added: 2009-07-29 +%% +Type: language +Subtag: kmh +Description: Kalam +Added: 2009-07-29 +%% +Type: language +Subtag: kmi +Description: Kami (Nigeria) +Added: 2009-07-29 +%% +Type: language +Subtag: kmj +Description: Kumarbhag Paharia +Added: 2009-07-29 +%% +Type: language +Subtag: kmk +Description: Limos Kalinga +Added: 2009-07-29 +%% +Type: language +Subtag: kml +Description: Tanudan Kalinga +Added: 2009-07-29 +%% +Type: language +Subtag: kmm +Description: Kom (India) +Added: 2009-07-29 +%% +Type: language +Subtag: kmn +Description: Awtuw +Added: 2009-07-29 +%% +Type: language +Subtag: kmo +Description: Kwoma +Added: 2009-07-29 +%% +Type: language +Subtag: kmp +Description: Gimme +Added: 2009-07-29 +%% +Type: language +Subtag: kmq +Description: Kwama +Added: 2009-07-29 +%% +Type: language +Subtag: kmr +Description: Northern Kurdish +Added: 2009-07-29 +Macrolanguage: ku +%% +Type: language +Subtag: kms +Description: Kamasau +Added: 2009-07-29 +%% +Type: language +Subtag: kmt +Description: Kemtuik +Added: 2009-07-29 +%% +Type: language +Subtag: kmu +Description: Kanite +Added: 2009-07-29 +%% +Type: language +Subtag: kmv +Description: Karipúna Creole French +Added: 2009-07-29 +%% +Type: language +Subtag: kmw +Description: Komo (Democratic Republic of Congo) +Added: 2009-07-29 +%% +Type: language +Subtag: kmx +Description: Waboda +Added: 2009-07-29 +%% +Type: language +Subtag: kmy +Description: Koma +Added: 2009-07-29 +%% +Type: language +Subtag: kmz +Description: Khorasani Turkish +Added: 2009-07-29 +%% +Type: language +Subtag: kna +Description: Dera (Nigeria) +Added: 2009-07-29 +%% +Type: language +Subtag: knb +Description: Lubuagan Kalinga +Added: 2009-07-29 +%% +Type: language +Subtag: knc +Description: Central Kanuri +Added: 2009-07-29 +Macrolanguage: kr +%% +Type: language +Subtag: knd +Description: Konda +Added: 2009-07-29 +%% +Type: language +Subtag: kne +Description: Kankanaey +Added: 2009-07-29 +%% +Type: language +Subtag: knf +Description: Mankanya +Added: 2009-07-29 +%% +Type: language +Subtag: kng +Description: Koongo +Added: 2009-07-29 +Macrolanguage: kg +%% +Type: language +Subtag: kni +Description: Kanufi +Added: 2009-07-29 +%% +Type: language +Subtag: knj +Description: Western Kanjobal +Added: 2009-07-29 +%% +Type: language +Subtag: knk +Description: Kuranko +Added: 2009-07-29 +%% +Type: language +Subtag: knl +Description: Keninjal +Added: 2009-07-29 +%% +Type: language +Subtag: knm +Description: Kanamarí +Added: 2009-07-29 +%% +Type: language +Subtag: knn +Description: Konkani (individual language) +Added: 2009-07-29 +Macrolanguage: kok +%% +Type: language +Subtag: kno +Description: Kono (Sierra Leone) +Added: 2009-07-29 +%% +Type: language +Subtag: knp +Description: Kwanja +Added: 2009-07-29 +%% +Type: language +Subtag: knq +Description: Kintaq +Added: 2009-07-29 +%% +Type: language +Subtag: knr +Description: Kaningra +Added: 2009-07-29 +%% +Type: language +Subtag: kns +Description: Kensiu +Added: 2009-07-29 +%% +Type: language +Subtag: knt +Description: Panoan Katukína +Added: 2009-07-29 +%% +Type: language +Subtag: knu +Description: Kono (Guinea) +Added: 2009-07-29 +%% +Type: language +Subtag: knv +Description: Tabo +Added: 2009-07-29 +%% +Type: language +Subtag: knw +Description: Kung-Ekoka +Added: 2009-07-29 +%% +Type: language +Subtag: knx +Description: Kendayan +Description: Salako +Added: 2009-07-29 +%% +Type: language +Subtag: kny +Description: Kanyok +Added: 2009-07-29 +%% +Type: language +Subtag: knz +Description: Kalamsé +Added: 2009-07-29 +%% +Type: language +Subtag: koa +Description: Konomala +Added: 2009-07-29 +%% +Type: language +Subtag: koc +Description: Kpati +Added: 2009-07-29 +%% +Type: language +Subtag: kod +Description: Kodi +Added: 2009-07-29 +%% +Type: language +Subtag: koe +Description: Kacipo-Balesi +Added: 2009-07-29 +%% +Type: language +Subtag: kof +Description: Kubi +Added: 2009-07-29 +%% +Type: language +Subtag: kog +Description: Cogui +Description: Kogi +Added: 2009-07-29 +%% +Type: language +Subtag: koh +Description: Koyo +Added: 2009-07-29 +%% +Type: language +Subtag: koi +Description: Komi-Permyak +Added: 2009-07-29 +Macrolanguage: kv +%% +Type: language +Subtag: koj +Description: Sara Dunjo +Added: 2009-07-29 +%% +Type: language +Subtag: kok +Description: Konkani (macrolanguage) +Added: 2005-10-16 +Suppress-Script: Deva +Scope: macrolanguage +%% +Type: language +Subtag: kol +Description: Kol (Papua New Guinea) +Added: 2009-07-29 +%% +Type: language +Subtag: koo +Description: Konzo +Added: 2009-07-29 +%% +Type: language +Subtag: kop +Description: Waube +Added: 2009-07-29 +%% +Type: language +Subtag: koq +Description: Kota (Gabon) +Added: 2009-07-29 +%% +Type: language +Subtag: kos +Description: Kosraean +Added: 2005-10-16 +%% +Type: language +Subtag: kot +Description: Lagwan +Added: 2009-07-29 +%% +Type: language +Subtag: kou +Description: Koke +Added: 2009-07-29 +%% +Type: language +Subtag: kov +Description: Kudu-Camo +Added: 2009-07-29 +%% +Type: language +Subtag: kow +Description: Kugama +Added: 2009-07-29 +%% +Type: language +Subtag: kox +Description: Coxima +Added: 2009-07-29 +%% +Type: language +Subtag: koy +Description: Koyukon +Added: 2009-07-29 +%% +Type: language +Subtag: koz +Description: Korak +Added: 2009-07-29 +%% +Type: language +Subtag: kpa +Description: Kutto +Added: 2009-07-29 +%% +Type: language +Subtag: kpb +Description: Mullu Kurumba +Added: 2009-07-29 +%% +Type: language +Subtag: kpc +Description: Curripaco +Added: 2009-07-29 +%% +Type: language +Subtag: kpd +Description: Koba +Added: 2009-07-29 +%% +Type: language +Subtag: kpe +Description: Kpelle +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: kpf +Description: Komba +Added: 2009-07-29 +%% +Type: language +Subtag: kpg +Description: Kapingamarangi +Added: 2009-07-29 +%% +Type: language +Subtag: kph +Description: Kplang +Added: 2009-07-29 +%% +Type: language +Subtag: kpi +Description: Kofei +Added: 2009-07-29 +%% +Type: language +Subtag: kpj +Description: Karajá +Added: 2009-07-29 +%% +Type: language +Subtag: kpk +Description: Kpan +Added: 2009-07-29 +%% +Type: language +Subtag: kpl +Description: Kpala +Added: 2009-07-29 +%% +Type: language +Subtag: kpm +Description: Koho +Added: 2009-07-29 +%% +Type: language +Subtag: kpn +Description: Kepkiriwát +Added: 2009-07-29 +%% +Type: language +Subtag: kpo +Description: Ikposo +Added: 2009-07-29 +%% +Type: language +Subtag: kpp +Description: Paku Karen +Added: 2009-07-29 +Deprecated: 2012-08-12 +Comments: see jkm, jkp +%% +Type: language +Subtag: kpq +Description: Korupun-Sela +Added: 2009-07-29 +%% +Type: language +Subtag: kpr +Description: Korafe-Yegha +Added: 2009-07-29 +%% +Type: language +Subtag: kps +Description: Tehit +Added: 2009-07-29 +%% +Type: language +Subtag: kpt +Description: Karata +Added: 2009-07-29 +%% +Type: language +Subtag: kpu +Description: Kafoa +Added: 2009-07-29 +%% +Type: language +Subtag: kpv +Description: Komi-Zyrian +Added: 2009-07-29 +Macrolanguage: kv +%% +Type: language +Subtag: kpw +Description: Kobon +Added: 2009-07-29 +%% +Type: language +Subtag: kpx +Description: Mountain Koiali +Added: 2009-07-29 +%% +Type: language +Subtag: kpy +Description: Koryak +Added: 2009-07-29 +%% +Type: language +Subtag: kpz +Description: Kupsabiny +Added: 2009-07-29 +%% +Type: language +Subtag: kqa +Description: Mum +Added: 2009-07-29 +%% +Type: language +Subtag: kqb +Description: Kovai +Added: 2009-07-29 +%% +Type: language +Subtag: kqc +Description: Doromu-Koki +Added: 2009-07-29 +%% +Type: language +Subtag: kqd +Description: Koy Sanjaq Surat +Added: 2009-07-29 +%% +Type: language +Subtag: kqe +Description: Kalagan +Added: 2009-07-29 +%% +Type: language +Subtag: kqf +Description: Kakabai +Added: 2009-07-29 +%% +Type: language +Subtag: kqg +Description: Khe +Added: 2009-07-29 +%% +Type: language +Subtag: kqh +Description: Kisankasa +Added: 2009-07-29 +%% +Type: language +Subtag: kqi +Description: Koitabu +Added: 2009-07-29 +%% +Type: language +Subtag: kqj +Description: Koromira +Added: 2009-07-29 +%% +Type: language +Subtag: kqk +Description: Kotafon Gbe +Added: 2009-07-29 +%% +Type: language +Subtag: kql +Description: Kyenele +Added: 2009-07-29 +%% +Type: language +Subtag: kqm +Description: Khisa +Added: 2009-07-29 +%% +Type: language +Subtag: kqn +Description: Kaonde +Added: 2009-07-29 +%% +Type: language +Subtag: kqo +Description: Eastern Krahn +Added: 2009-07-29 +%% +Type: language +Subtag: kqp +Description: Kimré +Added: 2009-07-29 +%% +Type: language +Subtag: kqq +Description: Krenak +Added: 2009-07-29 +%% +Type: language +Subtag: kqr +Description: Kimaragang +Added: 2009-07-29 +%% +Type: language +Subtag: kqs +Description: Northern Kissi +Added: 2009-07-29 +%% +Type: language +Subtag: kqt +Description: Klias River Kadazan +Added: 2009-07-29 +%% +Type: language +Subtag: kqu +Description: Seroa +Added: 2009-07-29 +%% +Type: language +Subtag: kqv +Description: Okolod +Added: 2009-07-29 +%% +Type: language +Subtag: kqw +Description: Kandas +Added: 2009-07-29 +%% +Type: language +Subtag: kqx +Description: Mser +Added: 2009-07-29 +%% +Type: language +Subtag: kqy +Description: Koorete +Added: 2009-07-29 +%% +Type: language +Subtag: kqz +Description: Korana +Added: 2009-07-29 +%% +Type: language +Subtag: kra +Description: Kumhali +Added: 2009-07-29 +%% +Type: language +Subtag: krb +Description: Karkin +Added: 2009-07-29 +%% +Type: language +Subtag: krc +Description: Karachay-Balkar +Added: 2005-10-16 +%% +Type: language +Subtag: krd +Description: Kairui-Midiki +Added: 2009-07-29 +%% +Type: language +Subtag: kre +Description: Panará +Added: 2009-07-29 +%% +Type: language +Subtag: krf +Description: Koro (Vanuatu) +Added: 2009-07-29 +%% +Type: language +Subtag: krh +Description: Kurama +Added: 2009-07-29 +%% +Type: language +Subtag: kri +Description: Krio +Added: 2009-07-29 +%% +Type: language +Subtag: krj +Description: Kinaray-A +Added: 2009-07-29 +%% +Type: language +Subtag: krk +Description: Kerek +Added: 2009-07-29 +%% +Type: language +Subtag: krl +Description: Karelian +Added: 2006-03-08 +%% +Type: language +Subtag: krm +Description: Krim +Added: 2009-07-29 +%% +Type: language +Subtag: krn +Description: Sapo +Added: 2009-07-29 +%% +Type: language +Subtag: kro +Description: Kru languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: krp +Description: Korop +Added: 2009-07-29 +%% +Type: language +Subtag: krr +Description: Kru'ng 2 +Added: 2009-07-29 +%% +Type: language +Subtag: krs +Description: Gbaya (Sudan) +Added: 2009-07-29 +%% +Type: language +Subtag: krt +Description: Tumari Kanuri +Added: 2009-07-29 +Macrolanguage: kr +%% +Type: language +Subtag: kru +Description: Kurukh +Added: 2005-10-16 +%% +Type: language +Subtag: krv +Description: Kavet +Added: 2009-07-29 +%% +Type: language +Subtag: krw +Description: Western Krahn +Added: 2009-07-29 +%% +Type: language +Subtag: krx +Description: Karon +Added: 2009-07-29 +%% +Type: language +Subtag: kry +Description: Kryts +Added: 2009-07-29 +%% +Type: language +Subtag: krz +Description: Sota Kanum +Added: 2009-07-29 +%% +Type: language +Subtag: ksa +Description: Shuwa-Zamani +Added: 2009-07-29 +%% +Type: language +Subtag: ksb +Description: Shambala +Added: 2009-07-29 +%% +Type: language +Subtag: ksc +Description: Southern Kalinga +Added: 2009-07-29 +%% +Type: language +Subtag: ksd +Description: Kuanua +Added: 2009-07-29 +%% +Type: language +Subtag: kse +Description: Kuni +Added: 2009-07-29 +%% +Type: language +Subtag: ksf +Description: Bafia +Added: 2009-07-29 +%% +Type: language +Subtag: ksg +Description: Kusaghe +Added: 2009-07-29 +%% +Type: language +Subtag: ksh +Description: Kölsch +Added: 2009-07-29 +%% +Type: language +Subtag: ksi +Description: Krisa +Description: I'saka +Added: 2009-07-29 +%% +Type: language +Subtag: ksj +Description: Uare +Added: 2009-07-29 +%% +Type: language +Subtag: ksk +Description: Kansa +Added: 2009-07-29 +%% +Type: language +Subtag: ksl +Description: Kumalu +Added: 2009-07-29 +%% +Type: language +Subtag: ksm +Description: Kumba +Added: 2009-07-29 +%% +Type: language +Subtag: ksn +Description: Kasiguranin +Added: 2009-07-29 +%% +Type: language +Subtag: kso +Description: Kofa +Added: 2009-07-29 +%% +Type: language +Subtag: ksp +Description: Kaba +Added: 2009-07-29 +%% +Type: language +Subtag: ksq +Description: Kwaami +Added: 2009-07-29 +%% +Type: language +Subtag: ksr +Description: Borong +Added: 2009-07-29 +%% +Type: language +Subtag: kss +Description: Southern Kisi +Added: 2009-07-29 +%% +Type: language +Subtag: kst +Description: Winyé +Added: 2009-07-29 +%% +Type: language +Subtag: ksu +Description: Khamyang +Added: 2009-07-29 +%% +Type: language +Subtag: ksv +Description: Kusu +Added: 2009-07-29 +%% +Type: language +Subtag: ksw +Description: S'gaw Karen +Added: 2009-07-29 +%% +Type: language +Subtag: ksx +Description: Kedang +Added: 2009-07-29 +%% +Type: language +Subtag: ksy +Description: Kharia Thar +Added: 2009-07-29 +%% +Type: language +Subtag: ksz +Description: Kodaku +Added: 2009-07-29 +%% +Type: language +Subtag: kta +Description: Katua +Added: 2009-07-29 +%% +Type: language +Subtag: ktb +Description: Kambaata +Added: 2009-07-29 +%% +Type: language +Subtag: ktc +Description: Kholok +Added: 2009-07-29 +%% +Type: language +Subtag: ktd +Description: Kokata +Added: 2009-07-29 +%% +Type: language +Subtag: kte +Description: Nubri +Added: 2009-07-29 +%% +Type: language +Subtag: ktf +Description: Kwami +Added: 2009-07-29 +%% +Type: language +Subtag: ktg +Description: Kalkutung +Added: 2009-07-29 +%% +Type: language +Subtag: kth +Description: Karanga +Added: 2009-07-29 +%% +Type: language +Subtag: kti +Description: North Muyu +Added: 2009-07-29 +%% +Type: language +Subtag: ktj +Description: Plapo Krumen +Added: 2009-07-29 +%% +Type: language +Subtag: ktk +Description: Kaniet +Added: 2009-07-29 +%% +Type: language +Subtag: ktl +Description: Koroshi +Added: 2009-07-29 +%% +Type: language +Subtag: ktm +Description: Kurti +Added: 2009-07-29 +%% +Type: language +Subtag: ktn +Description: Karitiâna +Added: 2009-07-29 +%% +Type: language +Subtag: kto +Description: Kuot +Added: 2009-07-29 +%% +Type: language +Subtag: ktp +Description: Kaduo +Added: 2009-07-29 +%% +Type: language +Subtag: ktq +Description: Katabaga +Added: 2009-07-29 +%% +Type: language +Subtag: ktr +Description: Kota Marudu Tinagas +Added: 2009-07-29 +%% +Type: language +Subtag: kts +Description: South Muyu +Added: 2009-07-29 +%% +Type: language +Subtag: ktt +Description: Ketum +Added: 2009-07-29 +%% +Type: language +Subtag: ktu +Description: Kituba (Democratic Republic of Congo) +Added: 2009-07-29 +%% +Type: language +Subtag: ktv +Description: Eastern Katu +Added: 2009-07-29 +%% +Type: language +Subtag: ktw +Description: Kato +Added: 2009-07-29 +%% +Type: language +Subtag: ktx +Description: Kaxararí +Added: 2009-07-29 +%% +Type: language +Subtag: kty +Description: Kango (Bas-Uélé District) +Added: 2009-07-29 +%% +Type: language +Subtag: ktz +Description: Ju/'hoan +Added: 2009-07-29 +%% +Type: language +Subtag: kub +Description: Kutep +Added: 2009-07-29 +%% +Type: language +Subtag: kuc +Description: Kwinsu +Added: 2009-07-29 +%% +Type: language +Subtag: kud +Description: 'Auhelawa +Added: 2009-07-29 +%% +Type: language +Subtag: kue +Description: Kuman +Added: 2009-07-29 +%% +Type: language +Subtag: kuf +Description: Western Katu +Added: 2009-07-29 +%% +Type: language +Subtag: kug +Description: Kupa +Added: 2009-07-29 +%% +Type: language +Subtag: kuh +Description: Kushi +Added: 2009-07-29 +%% +Type: language +Subtag: kui +Description: Kuikúro-Kalapálo +Added: 2009-07-29 +%% +Type: language +Subtag: kuj +Description: Kuria +Added: 2009-07-29 +%% +Type: language +Subtag: kuk +Description: Kepo' +Added: 2009-07-29 +%% +Type: language +Subtag: kul +Description: Kulere +Added: 2009-07-29 +%% +Type: language +Subtag: kum +Description: Kumyk +Added: 2005-10-16 +%% +Type: language +Subtag: kun +Description: Kunama +Added: 2009-07-29 +%% +Type: language +Subtag: kuo +Description: Kumukio +Added: 2009-07-29 +%% +Type: language +Subtag: kup +Description: Kunimaipa +Added: 2009-07-29 +%% +Type: language +Subtag: kuq +Description: Karipuna +Added: 2009-07-29 +%% +Type: language +Subtag: kus +Description: Kusaal +Added: 2009-07-29 +%% +Type: language +Subtag: kut +Description: Kutenai +Added: 2005-10-16 +%% +Type: language +Subtag: kuu +Description: Upper Kuskokwim +Added: 2009-07-29 +%% +Type: language +Subtag: kuv +Description: Kur +Added: 2009-07-29 +%% +Type: language +Subtag: kuw +Description: Kpagua +Added: 2009-07-29 +%% +Type: language +Subtag: kux +Description: Kukatja +Added: 2009-07-29 +%% +Type: language +Subtag: kuy +Description: Kuuku-Ya'u +Added: 2009-07-29 +%% +Type: language +Subtag: kuz +Description: Kunza +Added: 2009-07-29 +%% +Type: language +Subtag: kva +Description: Bagvalal +Added: 2009-07-29 +%% +Type: language +Subtag: kvb +Description: Kubu +Added: 2009-07-29 +Macrolanguage: ms +%% +Type: language +Subtag: kvc +Description: Kove +Added: 2009-07-29 +%% +Type: language +Subtag: kvd +Description: Kui (Indonesia) +Added: 2009-07-29 +%% +Type: language +Subtag: kve +Description: Kalabakan +Added: 2009-07-29 +%% +Type: language +Subtag: kvf +Description: Kabalai +Added: 2009-07-29 +%% +Type: language +Subtag: kvg +Description: Kuni-Boazi +Added: 2009-07-29 +%% +Type: language +Subtag: kvh +Description: Komodo +Added: 2009-07-29 +%% +Type: language +Subtag: kvi +Description: Kwang +Added: 2009-07-29 +%% +Type: language +Subtag: kvj +Description: Psikye +Added: 2009-07-29 +%% +Type: language +Subtag: kvk +Description: Korean Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: kvl +Description: Kayaw +Added: 2009-07-29 +%% +Type: language +Subtag: kvm +Description: Kendem +Added: 2009-07-29 +%% +Type: language +Subtag: kvn +Description: Border Kuna +Added: 2009-07-29 +%% +Type: language +Subtag: kvo +Description: Dobel +Added: 2009-07-29 +%% +Type: language +Subtag: kvp +Description: Kompane +Added: 2009-07-29 +%% +Type: language +Subtag: kvq +Description: Geba Karen +Added: 2009-07-29 +%% +Type: language +Subtag: kvr +Description: Kerinci +Added: 2009-07-29 +Macrolanguage: ms +%% +Type: language +Subtag: kvs +Description: Kunggara +Added: 2009-07-29 +%% +Type: language +Subtag: kvt +Description: Lahta Karen +Description: Lahta +Added: 2009-07-29 +%% +Type: language +Subtag: kvu +Description: Yinbaw Karen +Added: 2009-07-29 +%% +Type: language +Subtag: kvv +Description: Kola +Added: 2009-07-29 +%% +Type: language +Subtag: kvw +Description: Wersing +Added: 2009-07-29 +%% +Type: language +Subtag: kvx +Description: Parkari Koli +Added: 2009-07-29 +%% +Type: language +Subtag: kvy +Description: Yintale Karen +Description: Yintale +Added: 2009-07-29 +%% +Type: language +Subtag: kvz +Description: Tsakwambo +Description: Tsaukambo +Added: 2009-07-29 +%% +Type: language +Subtag: kwa +Description: Dâw +Added: 2009-07-29 +%% +Type: language +Subtag: kwb +Description: Kwa +Added: 2009-07-29 +%% +Type: language +Subtag: kwc +Description: Likwala +Added: 2009-07-29 +%% +Type: language +Subtag: kwd +Description: Kwaio +Added: 2009-07-29 +%% +Type: language +Subtag: kwe +Description: Kwerba +Added: 2009-07-29 +%% +Type: language +Subtag: kwf +Description: Kwara'ae +Added: 2009-07-29 +%% +Type: language +Subtag: kwg +Description: Sara Kaba Deme +Added: 2009-07-29 +%% +Type: language +Subtag: kwh +Description: Kowiai +Added: 2009-07-29 +%% +Type: language +Subtag: kwi +Description: Awa-Cuaiquer +Added: 2009-07-29 +%% +Type: language +Subtag: kwj +Description: Kwanga +Added: 2009-07-29 +%% +Type: language +Subtag: kwk +Description: Kwakiutl +Added: 2009-07-29 +%% +Type: language +Subtag: kwl +Description: Kofyar +Added: 2009-07-29 +%% +Type: language +Subtag: kwm +Description: Kwambi +Added: 2009-07-29 +%% +Type: language +Subtag: kwn +Description: Kwangali +Added: 2009-07-29 +%% +Type: language +Subtag: kwo +Description: Kwomtari +Added: 2009-07-29 +%% +Type: language +Subtag: kwp +Description: Kodia +Added: 2009-07-29 +%% +Type: language +Subtag: kwq +Description: Kwak +Added: 2009-07-29 +%% +Type: language +Subtag: kwr +Description: Kwer +Added: 2009-07-29 +%% +Type: language +Subtag: kws +Description: Kwese +Added: 2009-07-29 +%% +Type: language +Subtag: kwt +Description: Kwesten +Added: 2009-07-29 +%% +Type: language +Subtag: kwu +Description: Kwakum +Added: 2009-07-29 +%% +Type: language +Subtag: kwv +Description: Sara Kaba Náà +Added: 2009-07-29 +%% +Type: language +Subtag: kww +Description: Kwinti +Added: 2009-07-29 +%% +Type: language +Subtag: kwx +Description: Khirwar +Added: 2009-07-29 +%% +Type: language +Subtag: kwy +Description: San Salvador Kongo +Added: 2009-07-29 +Macrolanguage: kg +%% +Type: language +Subtag: kwz +Description: Kwadi +Added: 2009-07-29 +%% +Type: language +Subtag: kxa +Description: Kairiru +Added: 2009-07-29 +%% +Type: language +Subtag: kxb +Description: Krobu +Added: 2009-07-29 +%% +Type: language +Subtag: kxc +Description: Konso +Description: Khonso +Added: 2009-07-29 +%% +Type: language +Subtag: kxd +Description: Brunei +Added: 2009-07-29 +Macrolanguage: ms +%% +Type: language +Subtag: kxe +Description: Kakihum +Added: 2009-07-29 +%% +Type: language +Subtag: kxf +Description: Manumanaw Karen +Description: Manumanaw +Added: 2009-07-29 +%% +Type: language +Subtag: kxh +Description: Karo (Ethiopia) +Added: 2009-07-29 +%% +Type: language +Subtag: kxi +Description: Keningau Murut +Added: 2009-07-29 +%% +Type: language +Subtag: kxj +Description: Kulfa +Added: 2009-07-29 +%% +Type: language +Subtag: kxk +Description: Zayein Karen +Added: 2009-07-29 +%% +Type: language +Subtag: kxl +Description: Nepali Kurux +Added: 2009-07-29 +%% +Type: language +Subtag: kxm +Description: Northern Khmer +Added: 2009-07-29 +%% +Type: language +Subtag: kxn +Description: Kanowit-Tanjong Melanau +Added: 2009-07-29 +%% +Type: language +Subtag: kxo +Description: Kanoé +Added: 2009-07-29 +%% +Type: language +Subtag: kxp +Description: Wadiyara Koli +Added: 2009-07-29 +%% +Type: language +Subtag: kxq +Description: Smärky Kanum +Added: 2009-07-29 +%% +Type: language +Subtag: kxr +Description: Koro (Papua New Guinea) +Added: 2009-07-29 +%% +Type: language +Subtag: kxs +Description: Kangjia +Added: 2009-07-29 +%% +Type: language +Subtag: kxt +Description: Koiwat +Added: 2009-07-29 +%% +Type: language +Subtag: kxu +Description: Kui (India) +Added: 2009-07-29 +%% +Type: language +Subtag: kxv +Description: Kuvi +Added: 2009-07-29 +%% +Type: language +Subtag: kxw +Description: Konai +Added: 2009-07-29 +%% +Type: language +Subtag: kxx +Description: Likuba +Added: 2009-07-29 +%% +Type: language +Subtag: kxy +Description: Kayong +Added: 2009-07-29 +%% +Type: language +Subtag: kxz +Description: Kerewo +Added: 2009-07-29 +%% +Type: language +Subtag: kya +Description: Kwaya +Added: 2009-07-29 +%% +Type: language +Subtag: kyb +Description: Butbut Kalinga +Added: 2009-07-29 +%% +Type: language +Subtag: kyc +Description: Kyaka +Added: 2009-07-29 +%% +Type: language +Subtag: kyd +Description: Karey +Added: 2009-07-29 +%% +Type: language +Subtag: kye +Description: Krache +Added: 2009-07-29 +%% +Type: language +Subtag: kyf +Description: Kouya +Added: 2009-07-29 +%% +Type: language +Subtag: kyg +Description: Keyagana +Added: 2009-07-29 +%% +Type: language +Subtag: kyh +Description: Karok +Added: 2009-07-29 +%% +Type: language +Subtag: kyi +Description: Kiput +Added: 2009-07-29 +%% +Type: language +Subtag: kyj +Description: Karao +Added: 2009-07-29 +%% +Type: language +Subtag: kyk +Description: Kamayo +Added: 2009-07-29 +%% +Type: language +Subtag: kyl +Description: Kalapuya +Added: 2009-07-29 +%% +Type: language +Subtag: kym +Description: Kpatili +Added: 2009-07-29 +%% +Type: language +Subtag: kyn +Description: Northern Binukidnon +Added: 2009-07-29 +%% +Type: language +Subtag: kyo +Description: Kelon +Added: 2009-07-29 +%% +Type: language +Subtag: kyp +Description: Kang +Added: 2009-07-29 +%% +Type: language +Subtag: kyq +Description: Kenga +Added: 2009-07-29 +%% +Type: language +Subtag: kyr +Description: Kuruáya +Added: 2009-07-29 +%% +Type: language +Subtag: kys +Description: Baram Kayan +Added: 2009-07-29 +%% +Type: language +Subtag: kyt +Description: Kayagar +Added: 2009-07-29 +%% +Type: language +Subtag: kyu +Description: Western Kayah +Added: 2009-07-29 +%% +Type: language +Subtag: kyv +Description: Kayort +Added: 2009-07-29 +%% +Type: language +Subtag: kyw +Description: Kudmali +Added: 2009-07-29 +%% +Type: language +Subtag: kyx +Description: Rapoisi +Added: 2009-07-29 +%% +Type: language +Subtag: kyy +Description: Kambaira +Added: 2009-07-29 +%% +Type: language +Subtag: kyz +Description: Kayabí +Added: 2009-07-29 +%% +Type: language +Subtag: kza +Description: Western Karaboro +Added: 2009-07-29 +%% +Type: language +Subtag: kzb +Description: Kaibobo +Added: 2009-07-29 +%% +Type: language +Subtag: kzc +Description: Bondoukou Kulango +Added: 2009-07-29 +%% +Type: language +Subtag: kzd +Description: Kadai +Added: 2009-07-29 +%% +Type: language +Subtag: kze +Description: Kosena +Added: 2009-07-29 +%% +Type: language +Subtag: kzf +Description: Da'a Kaili +Added: 2009-07-29 +%% +Type: language +Subtag: kzg +Description: Kikai +Added: 2009-07-29 +%% +Type: language +Subtag: kzh +Description: Kenuzi-Dongola +Added: 2009-07-29 +Deprecated: 2012-08-12 +Comments: see dgl, xnz +%% +Type: language +Subtag: kzi +Description: Kelabit +Added: 2009-07-29 +%% +Type: language +Subtag: kzj +Description: Coastal Kadazan +Added: 2009-07-29 +%% +Type: language +Subtag: kzk +Description: Kazukuru +Added: 2009-07-29 +%% +Type: language +Subtag: kzl +Description: Kayeli +Added: 2009-07-29 +%% +Type: language +Subtag: kzm +Description: Kais +Added: 2009-07-29 +%% +Type: language +Subtag: kzn +Description: Kokola +Added: 2009-07-29 +%% +Type: language +Subtag: kzo +Description: Kaningi +Added: 2009-07-29 +%% +Type: language +Subtag: kzp +Description: Kaidipang +Added: 2009-07-29 +%% +Type: language +Subtag: kzq +Description: Kaike +Added: 2009-07-29 +%% +Type: language +Subtag: kzr +Description: Karang +Added: 2009-07-29 +%% +Type: language +Subtag: kzs +Description: Sugut Dusun +Added: 2009-07-29 +%% +Type: language +Subtag: kzt +Description: Tambunan Dusun +Added: 2009-07-29 +%% +Type: language +Subtag: kzu +Description: Kayupulau +Added: 2009-07-29 +%% +Type: language +Subtag: kzv +Description: Komyandaret +Added: 2009-07-29 +%% +Type: language +Subtag: kzw +Description: Karirí-Xocó +Added: 2009-07-29 +%% +Type: language +Subtag: kzx +Description: Kamarian +Added: 2009-07-29 +%% +Type: language +Subtag: kzy +Description: Kango (Tshopo District) +Added: 2009-07-29 +%% +Type: language +Subtag: kzz +Description: Kalabra +Added: 2009-07-29 +%% +Type: language +Subtag: laa +Description: Southern Subanen +Added: 2009-07-29 +%% +Type: language +Subtag: lab +Description: Linear A +Added: 2009-07-29 +%% +Type: language +Subtag: lac +Description: Lacandon +Added: 2009-07-29 +%% +Type: language +Subtag: lad +Description: Ladino +Added: 2005-10-16 +%% +Type: language +Subtag: lae +Description: Pattani +Added: 2009-07-29 +%% +Type: language +Subtag: laf +Description: Lafofa +Added: 2009-07-29 +%% +Type: language +Subtag: lag +Description: Langi +Added: 2009-07-29 +%% +Type: language +Subtag: lah +Description: Lahnda +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: lai +Description: Lambya +Added: 2009-07-29 +%% +Type: language +Subtag: laj +Description: Lango (Uganda) +Added: 2009-07-29 +%% +Type: language +Subtag: lak +Description: Laka (Nigeria) +Added: 2009-07-29 +%% +Type: language +Subtag: lal +Description: Lalia +Added: 2009-07-29 +%% +Type: language +Subtag: lam +Description: Lamba +Added: 2005-10-16 +%% +Type: language +Subtag: lan +Description: Laru +Added: 2009-07-29 +%% +Type: language +Subtag: lap +Description: Laka (Chad) +Added: 2009-07-29 +%% +Type: language +Subtag: laq +Description: Qabiao +Added: 2009-07-29 +%% +Type: language +Subtag: lar +Description: Larteh +Added: 2009-07-29 +%% +Type: language +Subtag: las +Description: Lama (Togo) +Added: 2009-07-29 +%% +Type: language +Subtag: lau +Description: Laba +Added: 2009-07-29 +%% +Type: language +Subtag: law +Description: Lauje +Added: 2009-07-29 +%% +Type: language +Subtag: lax +Description: Tiwa +Added: 2009-07-29 +%% +Type: language +Subtag: lay +Description: Lama (Myanmar) +Added: 2009-07-29 +%% +Type: language +Subtag: laz +Description: Aribwatsa +Added: 2009-07-29 +%% +Type: language +Subtag: lba +Description: Lui +Added: 2009-07-29 +%% +Type: language +Subtag: lbb +Description: Label +Added: 2009-07-29 +%% +Type: language +Subtag: lbc +Description: Lakkia +Added: 2009-07-29 +%% +Type: language +Subtag: lbe +Description: Lak +Added: 2009-07-29 +%% +Type: language +Subtag: lbf +Description: Tinani +Added: 2009-07-29 +%% +Type: language +Subtag: lbg +Description: Laopang +Added: 2009-07-29 +%% +Type: language +Subtag: lbi +Description: La'bi +Added: 2009-07-29 +%% +Type: language +Subtag: lbj +Description: Ladakhi +Added: 2009-07-29 +%% +Type: language +Subtag: lbk +Description: Central Bontok +Added: 2010-03-11 +Macrolanguage: bnc +%% +Type: language +Subtag: lbl +Description: Libon Bikol +Added: 2010-03-11 +Macrolanguage: bik +%% +Type: language +Subtag: lbm +Description: Lodhi +Added: 2009-07-29 +%% +Type: language +Subtag: lbn +Description: Lamet +Added: 2009-07-29 +%% +Type: language +Subtag: lbo +Description: Laven +Added: 2009-07-29 +%% +Type: language +Subtag: lbq +Description: Wampar +Added: 2009-07-29 +%% +Type: language +Subtag: lbr +Description: Lohorung +Added: 2009-07-29 +%% +Type: language +Subtag: lbs +Description: Libyan Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: lbt +Description: Lachi +Added: 2009-07-29 +%% +Type: language +Subtag: lbu +Description: Labu +Added: 2009-07-29 +%% +Type: language +Subtag: lbv +Description: Lavatbura-Lamusong +Added: 2009-07-29 +%% +Type: language +Subtag: lbw +Description: Tolaki +Added: 2009-07-29 +%% +Type: language +Subtag: lbx +Description: Lawangan +Added: 2009-07-29 +%% +Type: language +Subtag: lby +Description: Lamu-Lamu +Added: 2009-07-29 +%% +Type: language +Subtag: lbz +Description: Lardil +Added: 2009-07-29 +%% +Type: language +Subtag: lcc +Description: Legenyem +Added: 2009-07-29 +%% +Type: language +Subtag: lcd +Description: Lola +Added: 2009-07-29 +%% +Type: language +Subtag: lce +Description: Loncong +Added: 2009-07-29 +Macrolanguage: ms +%% +Type: language +Subtag: lcf +Description: Lubu +Added: 2009-07-29 +Macrolanguage: ms +%% +Type: language +Subtag: lch +Description: Luchazi +Added: 2009-07-29 +%% +Type: language +Subtag: lcl +Description: Lisela +Added: 2009-07-29 +%% +Type: language +Subtag: lcm +Description: Tungag +Added: 2009-07-29 +%% +Type: language +Subtag: lcp +Description: Western Lawa +Added: 2009-07-29 +%% +Type: language +Subtag: lcq +Description: Luhu +Added: 2009-07-29 +Deprecated: 2012-08-12 +Preferred-Value: ppr +%% +Type: language +Subtag: lcs +Description: Lisabata-Nuniali +Added: 2009-07-29 +%% +Type: language +Subtag: ldb +Description: Dũya +Added: 2009-07-29 +%% +Type: language +Subtag: ldd +Description: Luri +Added: 2009-07-29 +%% +Type: language +Subtag: ldg +Description: Lenyima +Added: 2009-07-29 +%% +Type: language +Subtag: ldh +Description: Lamja-Dengsa-Tola +Added: 2009-07-29 +%% +Type: language +Subtag: ldi +Description: Laari +Added: 2009-07-29 +Macrolanguage: kg +%% +Type: language +Subtag: ldj +Description: Lemoro +Added: 2009-07-29 +%% +Type: language +Subtag: ldk +Description: Leelau +Added: 2009-07-29 +%% +Type: language +Subtag: ldl +Description: Kaan +Added: 2009-07-29 +%% +Type: language +Subtag: ldm +Description: Landoma +Added: 2009-07-29 +%% +Type: language +Subtag: ldn +Description: Láadan +Added: 2009-07-29 +%% +Type: language +Subtag: ldo +Description: Loo +Added: 2009-07-29 +%% +Type: language +Subtag: ldp +Description: Tso +Added: 2009-07-29 +%% +Type: language +Subtag: ldq +Description: Lufu +Added: 2009-07-29 +%% +Type: language +Subtag: lea +Description: Lega-Shabunda +Added: 2009-07-29 +%% +Type: language +Subtag: leb +Description: Lala-Bisa +Added: 2009-07-29 +%% +Type: language +Subtag: lec +Description: Leco +Added: 2009-07-29 +%% +Type: language +Subtag: led +Description: Lendu +Added: 2009-07-29 +%% +Type: language +Subtag: lee +Description: Lyélé +Added: 2009-07-29 +%% +Type: language +Subtag: lef +Description: Lelemi +Added: 2009-07-29 +%% +Type: language +Subtag: leg +Description: Lengua +Added: 2009-07-29 +%% +Type: language +Subtag: leh +Description: Lenje +Added: 2009-07-29 +%% +Type: language +Subtag: lei +Description: Lemio +Added: 2009-07-29 +%% +Type: language +Subtag: lej +Description: Lengola +Added: 2009-07-29 +%% +Type: language +Subtag: lek +Description: Leipon +Added: 2009-07-29 +%% +Type: language +Subtag: lel +Description: Lele (Democratic Republic of Congo) +Added: 2009-07-29 +%% +Type: language +Subtag: lem +Description: Nomaande +Added: 2009-07-29 +%% +Type: language +Subtag: len +Description: Lenca +Added: 2009-07-29 +%% +Type: language +Subtag: leo +Description: Leti (Cameroon) +Added: 2009-07-29 +%% +Type: language +Subtag: lep +Description: Lepcha +Added: 2009-07-29 +%% +Type: language +Subtag: leq +Description: Lembena +Added: 2009-07-29 +%% +Type: language +Subtag: ler +Description: Lenkau +Added: 2009-07-29 +%% +Type: language +Subtag: les +Description: Lese +Added: 2009-07-29 +%% +Type: language +Subtag: let +Description: Lesing-Gelimi +Description: Amio-Gelimi +Added: 2009-07-29 +%% +Type: language +Subtag: leu +Description: Kara (Papua New Guinea) +Added: 2009-07-29 +%% +Type: language +Subtag: lev +Description: Lamma +Added: 2009-07-29 +%% +Type: language +Subtag: lew +Description: Ledo Kaili +Added: 2009-07-29 +%% +Type: language +Subtag: lex +Description: Luang +Added: 2009-07-29 +%% +Type: language +Subtag: ley +Description: Lemolang +Added: 2009-07-29 +%% +Type: language +Subtag: lez +Description: Lezghian +Added: 2005-10-16 +%% +Type: language +Subtag: lfa +Description: Lefa +Added: 2009-07-29 +%% +Type: language +Subtag: lfn +Description: Lingua Franca Nova +Added: 2009-07-29 +%% +Type: language +Subtag: lga +Description: Lungga +Added: 2009-07-29 +%% +Type: language +Subtag: lgb +Description: Laghu +Added: 2009-07-29 +%% +Type: language +Subtag: lgg +Description: Lugbara +Added: 2009-07-29 +%% +Type: language +Subtag: lgh +Description: Laghuu +Added: 2009-07-29 +%% +Type: language +Subtag: lgi +Description: Lengilu +Added: 2009-07-29 +%% +Type: language +Subtag: lgk +Description: Lingarak +Description: Neverver +Added: 2009-07-29 +%% +Type: language +Subtag: lgl +Description: Wala +Added: 2009-07-29 +%% +Type: language +Subtag: lgm +Description: Lega-Mwenga +Added: 2009-07-29 +%% +Type: language +Subtag: lgn +Description: Opuuo +Added: 2009-07-29 +%% +Type: language +Subtag: lgq +Description: Logba +Added: 2009-07-29 +%% +Type: language +Subtag: lgr +Description: Lengo +Added: 2009-07-29 +%% +Type: language +Subtag: lgt +Description: Pahi +Added: 2009-07-29 +%% +Type: language +Subtag: lgu +Description: Longgu +Added: 2009-07-29 +%% +Type: language +Subtag: lgz +Description: Ligenza +Added: 2009-07-29 +%% +Type: language +Subtag: lha +Description: Laha (Viet Nam) +Added: 2009-07-29 +%% +Type: language +Subtag: lhh +Description: Laha (Indonesia) +Added: 2009-07-29 +%% +Type: language +Subtag: lhi +Description: Lahu Shi +Added: 2009-07-29 +%% +Type: language +Subtag: lhl +Description: Lahul Lohar +Added: 2009-07-29 +%% +Type: language +Subtag: lhm +Description: Lhomi +Added: 2009-07-29 +%% +Type: language +Subtag: lhn +Description: Lahanan +Added: 2009-07-29 +%% +Type: language +Subtag: lhp +Description: Lhokpu +Added: 2009-07-29 +%% +Type: language +Subtag: lhs +Description: Mlahsö +Added: 2009-07-29 +%% +Type: language +Subtag: lht +Description: Lo-Toga +Added: 2009-07-29 +%% +Type: language +Subtag: lhu +Description: Lahu +Added: 2009-07-29 +%% +Type: language +Subtag: lia +Description: West-Central Limba +Added: 2009-07-29 +%% +Type: language +Subtag: lib +Description: Likum +Added: 2009-07-29 +%% +Type: language +Subtag: lic +Description: Hlai +Added: 2009-07-29 +%% +Type: language +Subtag: lid +Description: Nyindrou +Added: 2009-07-29 +%% +Type: language +Subtag: lie +Description: Likila +Added: 2009-07-29 +%% +Type: language +Subtag: lif +Description: Limbu +Added: 2009-07-29 +%% +Type: language +Subtag: lig +Description: Ligbi +Added: 2009-07-29 +%% +Type: language +Subtag: lih +Description: Lihir +Added: 2009-07-29 +%% +Type: language +Subtag: lii +Description: Lingkhim +Added: 2009-07-29 +%% +Type: language +Subtag: lij +Description: Ligurian +Added: 2009-07-29 +%% +Type: language +Subtag: lik +Description: Lika +Added: 2009-07-29 +%% +Type: language +Subtag: lil +Description: Lillooet +Added: 2009-07-29 +%% +Type: language +Subtag: lio +Description: Liki +Added: 2009-07-29 +%% +Type: language +Subtag: lip +Description: Sekpele +Added: 2009-07-29 +%% +Type: language +Subtag: liq +Description: Libido +Added: 2009-07-29 +%% +Type: language +Subtag: lir +Description: Liberian English +Added: 2009-07-29 +%% +Type: language +Subtag: lis +Description: Lisu +Added: 2009-07-29 +%% +Type: language +Subtag: liu +Description: Logorik +Added: 2009-07-29 +%% +Type: language +Subtag: liv +Description: Liv +Added: 2009-07-29 +%% +Type: language +Subtag: liw +Description: Col +Added: 2009-07-29 +Macrolanguage: ms +%% +Type: language +Subtag: lix +Description: Liabuku +Added: 2009-07-29 +%% +Type: language +Subtag: liy +Description: Banda-Bambari +Added: 2009-07-29 +%% +Type: language +Subtag: liz +Description: Libinza +Added: 2009-07-29 +%% +Type: language +Subtag: lje +Description: Rampi +Added: 2009-07-29 +%% +Type: language +Subtag: lji +Description: Laiyolo +Added: 2009-07-29 +%% +Type: language +Subtag: ljl +Description: Li'o +Added: 2009-07-29 +%% +Type: language +Subtag: ljp +Description: Lampung Api +Added: 2009-07-29 +%% +Type: language +Subtag: lka +Description: Lakalei +Added: 2009-07-29 +%% +Type: language +Subtag: lkb +Description: Kabras +Description: Lukabaras +Added: 2009-07-29 +Macrolanguage: luy +%% +Type: language +Subtag: lkc +Description: Kucong +Added: 2009-07-29 +%% +Type: language +Subtag: lkd +Description: Lakondê +Added: 2009-07-29 +%% +Type: language +Subtag: lke +Description: Kenyi +Added: 2009-07-29 +%% +Type: language +Subtag: lkh +Description: Lakha +Added: 2009-07-29 +%% +Type: language +Subtag: lki +Description: Laki +Added: 2009-07-29 +%% +Type: language +Subtag: lkj +Description: Remun +Added: 2009-07-29 +%% +Type: language +Subtag: lkl +Description: Laeko-Libuat +Added: 2009-07-29 +%% +Type: language +Subtag: lkn +Description: Lakon +Description: Vure +Added: 2009-07-29 +%% +Type: language +Subtag: lko +Description: Khayo +Description: Olukhayo +Added: 2009-07-29 +Macrolanguage: luy +%% +Type: language +Subtag: lkr +Description: Päri +Added: 2009-07-29 +%% +Type: language +Subtag: lks +Description: Kisa +Description: Olushisa +Added: 2009-07-29 +Macrolanguage: luy +%% +Type: language +Subtag: lkt +Description: Lakota +Added: 2009-07-29 +%% +Type: language +Subtag: lky +Description: Lokoya +Added: 2009-07-29 +%% +Type: language +Subtag: lla +Description: Lala-Roba +Added: 2009-07-29 +%% +Type: language +Subtag: llb +Description: Lolo +Added: 2009-07-29 +%% +Type: language +Subtag: llc +Description: Lele (Guinea) +Added: 2009-07-29 +%% +Type: language +Subtag: lld +Description: Ladin +Added: 2009-07-29 +%% +Type: language +Subtag: lle +Description: Lele (Papua New Guinea) +Added: 2009-07-29 +%% +Type: language +Subtag: llf +Description: Hermit +Added: 2009-07-29 +%% +Type: language +Subtag: llg +Description: Lole +Added: 2009-07-29 +%% +Type: language +Subtag: llh +Description: Lamu +Added: 2009-07-29 +%% +Type: language +Subtag: lli +Description: Teke-Laali +Added: 2009-07-29 +%% +Type: language +Subtag: llj +Description: Ladji Ladji +Added: 2012-08-12 +%% +Type: language +Subtag: llk +Description: Lelak +Added: 2009-07-29 +%% +Type: language +Subtag: lll +Description: Lilau +Added: 2009-07-29 +%% +Type: language +Subtag: llm +Description: Lasalimu +Added: 2009-07-29 +%% +Type: language +Subtag: lln +Description: Lele (Chad) +Added: 2009-07-29 +%% +Type: language +Subtag: llo +Description: Khlor +Added: 2009-07-29 +%% +Type: language +Subtag: llp +Description: North Efate +Added: 2009-07-29 +%% +Type: language +Subtag: llq +Description: Lolak +Added: 2009-07-29 +%% +Type: language +Subtag: lls +Description: Lithuanian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: llu +Description: Lau +Added: 2009-07-29 +%% +Type: language +Subtag: llx +Description: Lauan +Added: 2009-07-29 +%% +Type: language +Subtag: lma +Description: East Limba +Added: 2009-07-29 +%% +Type: language +Subtag: lmb +Description: Merei +Added: 2009-07-29 +%% +Type: language +Subtag: lmc +Description: Limilngan +Added: 2009-07-29 +%% +Type: language +Subtag: lmd +Description: Lumun +Added: 2009-07-29 +%% +Type: language +Subtag: lme +Description: Pévé +Added: 2009-07-29 +%% +Type: language +Subtag: lmf +Description: South Lembata +Added: 2009-07-29 +%% +Type: language +Subtag: lmg +Description: Lamogai +Added: 2009-07-29 +%% +Type: language +Subtag: lmh +Description: Lambichhong +Added: 2009-07-29 +%% +Type: language +Subtag: lmi +Description: Lombi +Added: 2009-07-29 +%% +Type: language +Subtag: lmj +Description: West Lembata +Added: 2009-07-29 +%% +Type: language +Subtag: lmk +Description: Lamkang +Added: 2009-07-29 +%% +Type: language +Subtag: lml +Description: Hano +Added: 2009-07-29 +%% +Type: language +Subtag: lmm +Description: Lamam +Added: 2009-07-29 +%% +Type: language +Subtag: lmn +Description: Lambadi +Added: 2009-07-29 +%% +Type: language +Subtag: lmo +Description: Lombard +Added: 2009-07-29 +%% +Type: language +Subtag: lmp +Description: Limbum +Added: 2009-07-29 +%% +Type: language +Subtag: lmq +Description: Lamatuka +Added: 2009-07-29 +%% +Type: language +Subtag: lmr +Description: Lamalera +Added: 2009-07-29 +%% +Type: language +Subtag: lmu +Description: Lamenu +Added: 2009-07-29 +%% +Type: language +Subtag: lmv +Description: Lomaiviti +Added: 2009-07-29 +%% +Type: language +Subtag: lmw +Description: Lake Miwok +Added: 2009-07-29 +%% +Type: language +Subtag: lmx +Description: Laimbue +Added: 2009-07-29 +%% +Type: language +Subtag: lmy +Description: Lamboya +Added: 2009-07-29 +%% +Type: language +Subtag: lmz +Description: Lumbee +Added: 2009-07-29 +%% +Type: language +Subtag: lna +Description: Langbashe +Added: 2009-07-29 +%% +Type: language +Subtag: lnb +Description: Mbalanhu +Added: 2009-07-29 +%% +Type: language +Subtag: lnd +Description: Lundayeh +Description: Lun Bawang +Added: 2009-07-29 +%% +Type: language +Subtag: lng +Description: Langobardic +Added: 2009-07-29 +%% +Type: language +Subtag: lnh +Description: Lanoh +Added: 2009-07-29 +%% +Type: language +Subtag: lni +Description: Daantanai' +Added: 2009-07-29 +%% +Type: language +Subtag: lnj +Description: Leningitij +Added: 2009-07-29 +%% +Type: language +Subtag: lnl +Description: South Central Banda +Added: 2009-07-29 +%% +Type: language +Subtag: lnm +Description: Langam +Added: 2009-07-29 +%% +Type: language +Subtag: lnn +Description: Lorediakarkar +Added: 2009-07-29 +%% +Type: language +Subtag: lno +Description: Lango (Sudan) +Added: 2009-07-29 +%% +Type: language +Subtag: lns +Description: Lamnso' +Added: 2009-07-29 +%% +Type: language +Subtag: lnu +Description: Longuda +Added: 2009-07-29 +%% +Type: language +Subtag: lnz +Description: Lonzo +Added: 2009-07-29 +%% +Type: language +Subtag: loa +Description: Loloda +Added: 2009-07-29 +%% +Type: language +Subtag: lob +Description: Lobi +Added: 2009-07-29 +%% +Type: language +Subtag: loc +Description: Inonhan +Added: 2009-07-29 +%% +Type: language +Subtag: loe +Description: Saluan +Added: 2009-07-29 +%% +Type: language +Subtag: lof +Description: Logol +Added: 2009-07-29 +%% +Type: language +Subtag: log +Description: Logo +Added: 2009-07-29 +%% +Type: language +Subtag: loh +Description: Narim +Added: 2009-07-29 +%% +Type: language +Subtag: loi +Description: Loma (Côte d'Ivoire) +Added: 2009-07-29 +%% +Type: language +Subtag: loj +Description: Lou +Added: 2009-07-29 +%% +Type: language +Subtag: lok +Description: Loko +Added: 2009-07-29 +%% +Type: language +Subtag: lol +Description: Mongo +Added: 2005-10-16 +%% +Type: language +Subtag: lom +Description: Loma (Liberia) +Added: 2009-07-29 +%% +Type: language +Subtag: lon +Description: Malawi Lomwe +Added: 2009-07-29 +%% +Type: language +Subtag: loo +Description: Lombo +Added: 2009-07-29 +%% +Type: language +Subtag: lop +Description: Lopa +Added: 2009-07-29 +%% +Type: language +Subtag: loq +Description: Lobala +Added: 2009-07-29 +%% +Type: language +Subtag: lor +Description: Téén +Added: 2009-07-29 +%% +Type: language +Subtag: los +Description: Loniu +Added: 2009-07-29 +%% +Type: language +Subtag: lot +Description: Otuho +Added: 2009-07-29 +%% +Type: language +Subtag: lou +Description: Louisiana Creole French +Added: 2009-07-29 +%% +Type: language +Subtag: lov +Description: Lopi +Added: 2009-07-29 +%% +Type: language +Subtag: low +Description: Tampias Lobu +Added: 2009-07-29 +%% +Type: language +Subtag: lox +Description: Loun +Added: 2009-07-29 +%% +Type: language +Subtag: loy +Description: Loke +Added: 2009-07-29 +%% +Type: language +Subtag: loz +Description: Lozi +Added: 2005-10-16 +%% +Type: language +Subtag: lpa +Description: Lelepa +Added: 2009-07-29 +%% +Type: language +Subtag: lpe +Description: Lepki +Added: 2009-07-29 +%% +Type: language +Subtag: lpn +Description: Long Phuri Naga +Added: 2009-07-29 +%% +Type: language +Subtag: lpo +Description: Lipo +Added: 2009-07-29 +%% +Type: language +Subtag: lpx +Description: Lopit +Added: 2009-07-29 +%% +Type: language +Subtag: lra +Description: Rara Bakati' +Added: 2009-07-29 +%% +Type: language +Subtag: lrc +Description: Northern Luri +Added: 2009-07-29 +%% +Type: language +Subtag: lre +Description: Laurentian +Added: 2009-07-29 +%% +Type: language +Subtag: lrg +Description: Laragia +Added: 2009-07-29 +%% +Type: language +Subtag: lri +Description: Marachi +Description: Olumarachi +Added: 2009-07-29 +Macrolanguage: luy +%% +Type: language +Subtag: lrk +Description: Loarki +Added: 2009-07-29 +%% +Type: language +Subtag: lrl +Description: Lari +Added: 2009-07-29 +%% +Type: language +Subtag: lrm +Description: Marama +Description: Olumarama +Added: 2009-07-29 +Macrolanguage: luy +%% +Type: language +Subtag: lrn +Description: Lorang +Added: 2009-07-29 +%% +Type: language +Subtag: lro +Description: Laro +Added: 2009-07-29 +%% +Type: language +Subtag: lrr +Description: Southern Yamphu +Added: 2009-07-29 +%% +Type: language +Subtag: lrt +Description: Larantuka Malay +Added: 2009-07-29 +%% +Type: language +Subtag: lrv +Description: Larevat +Added: 2009-07-29 +%% +Type: language +Subtag: lrz +Description: Lemerig +Added: 2009-07-29 +%% +Type: language +Subtag: lsa +Description: Lasgerdi +Added: 2009-07-29 +%% +Type: language +Subtag: lsd +Description: Lishana Deni +Added: 2009-07-29 +%% +Type: language +Subtag: lse +Description: Lusengo +Added: 2009-07-29 +%% +Type: language +Subtag: lsg +Description: Lyons Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: lsh +Description: Lish +Added: 2009-07-29 +%% +Type: language +Subtag: lsi +Description: Lashi +Added: 2009-07-29 +%% +Type: language +Subtag: lsl +Description: Latvian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: lsm +Description: Saamia +Description: Olusamia +Added: 2009-07-29 +Macrolanguage: luy +%% +Type: language +Subtag: lso +Description: Laos Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: lsp +Description: Panamanian Sign Language +Description: Lengua de Señas Panameñas +Added: 2009-07-29 +%% +Type: language +Subtag: lsr +Description: Aruop +Added: 2009-07-29 +%% +Type: language +Subtag: lss +Description: Lasi +Added: 2009-07-29 +%% +Type: language +Subtag: lst +Description: Trinidad and Tobago Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: lsy +Description: Mauritian Sign Language +Added: 2010-03-11 +%% +Type: language +Subtag: ltc +Description: Late Middle Chinese +Added: 2009-07-29 +%% +Type: language +Subtag: ltg +Description: Latgalian +Added: 2010-03-11 +Macrolanguage: lv +%% +Type: language +Subtag: lti +Description: Leti (Indonesia) +Added: 2009-07-29 +%% +Type: language +Subtag: ltn +Description: Latundê +Added: 2009-07-29 +%% +Type: language +Subtag: lto +Description: Tsotso +Description: Olutsotso +Added: 2009-07-29 +Macrolanguage: luy +%% +Type: language +Subtag: lts +Description: Tachoni +Description: Lutachoni +Added: 2009-07-29 +Macrolanguage: luy +%% +Type: language +Subtag: ltu +Description: Latu +Added: 2009-07-29 +%% +Type: language +Subtag: lua +Description: Luba-Lulua +Added: 2005-10-16 +%% +Type: language +Subtag: luc +Description: Aringa +Added: 2009-07-29 +%% +Type: language +Subtag: lud +Description: Ludian +Added: 2009-07-29 +%% +Type: language +Subtag: lue +Description: Luvale +Added: 2009-07-29 +%% +Type: language +Subtag: luf +Description: Laua +Added: 2009-07-29 +%% +Type: language +Subtag: lui +Description: Luiseno +Added: 2005-10-16 +%% +Type: language +Subtag: luj +Description: Luna +Added: 2009-07-29 +%% +Type: language +Subtag: luk +Description: Lunanakha +Added: 2009-07-29 +%% +Type: language +Subtag: lul +Description: Olu'bo +Added: 2009-07-29 +%% +Type: language +Subtag: lum +Description: Luimbi +Added: 2009-07-29 +%% +Type: language +Subtag: lun +Description: Lunda +Added: 2005-10-16 +%% +Type: language +Subtag: luo +Description: Luo (Kenya and Tanzania) +Description: Dholuo +Added: 2005-10-16 +%% +Type: language +Subtag: lup +Description: Lumbu +Added: 2009-07-29 +%% +Type: language +Subtag: luq +Description: Lucumi +Added: 2009-07-29 +%% +Type: language +Subtag: lur +Description: Laura +Added: 2009-07-29 +%% +Type: language +Subtag: lus +Description: Lushai +Added: 2005-10-16 +%% +Type: language +Subtag: lut +Description: Lushootseed +Added: 2009-07-29 +%% +Type: language +Subtag: luu +Description: Lumba-Yakkha +Added: 2009-07-29 +%% +Type: language +Subtag: luv +Description: Luwati +Added: 2009-07-29 +%% +Type: language +Subtag: luw +Description: Luo (Cameroon) +Added: 2009-07-29 +%% +Type: language +Subtag: luy +Description: Luyia +Description: Oluluyia +Added: 2009-07-29 +Scope: macrolanguage +%% +Type: language +Subtag: luz +Description: Southern Luri +Added: 2009-07-29 +%% +Type: language +Subtag: lva +Description: Maku'a +Added: 2009-07-29 +%% +Type: language +Subtag: lvk +Description: Lavukaleve +Added: 2009-07-29 +%% +Type: language +Subtag: lvs +Description: Standard Latvian +Added: 2010-03-11 +Macrolanguage: lv +%% +Type: language +Subtag: lvu +Description: Levuka +Added: 2009-07-29 +%% +Type: language +Subtag: lwa +Description: Lwalu +Added: 2009-07-29 +%% +Type: language +Subtag: lwe +Description: Lewo Eleng +Added: 2009-07-29 +%% +Type: language +Subtag: lwg +Description: Wanga +Description: Oluwanga +Added: 2009-07-29 +Macrolanguage: luy +%% +Type: language +Subtag: lwh +Description: White Lachi +Added: 2009-07-29 +%% +Type: language +Subtag: lwl +Description: Eastern Lawa +Added: 2009-07-29 +%% +Type: language +Subtag: lwm +Description: Laomian +Added: 2009-07-29 +%% +Type: language +Subtag: lwo +Description: Luwo +Added: 2009-07-29 +%% +Type: language +Subtag: lwt +Description: Lewotobi +Added: 2009-07-29 +%% +Type: language +Subtag: lww +Description: Lewo +Added: 2009-07-29 +%% +Type: language +Subtag: lya +Description: Layakha +Added: 2009-07-29 +%% +Type: language +Subtag: lyg +Description: Lyngngam +Added: 2009-07-29 +%% +Type: language +Subtag: lyn +Description: Luyana +Added: 2009-07-29 +%% +Type: language +Subtag: lzh +Description: Literary Chinese +Added: 2009-07-29 +Macrolanguage: zh +%% +Type: language +Subtag: lzl +Description: Litzlitz +Added: 2009-07-29 +%% +Type: language +Subtag: lzn +Description: Leinong Naga +Added: 2009-07-29 +%% +Type: language +Subtag: lzz +Description: Laz +Added: 2009-07-29 +%% +Type: language +Subtag: maa +Description: San Jerónimo Tecóatl Mazatec +Added: 2009-07-29 +%% +Type: language +Subtag: mab +Description: Yutanduchi Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: mad +Description: Madurese +Added: 2005-10-16 +%% +Type: language +Subtag: mae +Description: Bo-Rukul +Added: 2009-07-29 +%% +Type: language +Subtag: maf +Description: Mafa +Added: 2009-07-29 +%% +Type: language +Subtag: mag +Description: Magahi +Added: 2005-10-16 +%% +Type: language +Subtag: mai +Description: Maithili +Added: 2005-10-16 +Suppress-Script: Deva +%% +Type: language +Subtag: maj +Description: Jalapa De Díaz Mazatec +Added: 2009-07-29 +%% +Type: language +Subtag: mak +Description: Makasar +Added: 2005-10-16 +%% +Type: language +Subtag: mam +Description: Mam +Added: 2009-07-29 +%% +Type: language +Subtag: man +Description: Mandingo +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: map +Description: Austronesian languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: maq +Description: Chiquihuitlán Mazatec +Added: 2009-07-29 +%% +Type: language +Subtag: mas +Description: Masai +Added: 2005-10-16 +%% +Type: language +Subtag: mat +Description: San Francisco Matlatzinca +Added: 2009-07-29 +%% +Type: language +Subtag: mau +Description: Huautla Mazatec +Added: 2009-07-29 +%% +Type: language +Subtag: mav +Description: Sateré-Mawé +Added: 2009-07-29 +%% +Type: language +Subtag: maw +Description: Mampruli +Added: 2009-07-29 +%% +Type: language +Subtag: max +Description: North Moluccan Malay +Added: 2009-07-29 +Macrolanguage: ms +%% +Type: language +Subtag: maz +Description: Central Mazahua +Added: 2009-07-29 +%% +Type: language +Subtag: mba +Description: Higaonon +Added: 2009-07-29 +%% +Type: language +Subtag: mbb +Description: Western Bukidnon Manobo +Added: 2009-07-29 +%% +Type: language +Subtag: mbc +Description: Macushi +Added: 2009-07-29 +%% +Type: language +Subtag: mbd +Description: Dibabawon Manobo +Added: 2009-07-29 +%% +Type: language +Subtag: mbe +Description: Molale +Added: 2009-07-29 +%% +Type: language +Subtag: mbf +Description: Baba Malay +Added: 2009-07-29 +%% +Type: language +Subtag: mbh +Description: Mangseng +Added: 2009-07-29 +%% +Type: language +Subtag: mbi +Description: Ilianen Manobo +Added: 2009-07-29 +%% +Type: language +Subtag: mbj +Description: Nadëb +Added: 2009-07-29 +%% +Type: language +Subtag: mbk +Description: Malol +Added: 2009-07-29 +%% +Type: language +Subtag: mbl +Description: Maxakalí +Added: 2009-07-29 +%% +Type: language +Subtag: mbm +Description: Ombamba +Added: 2009-07-29 +%% +Type: language +Subtag: mbn +Description: Macaguán +Added: 2009-07-29 +%% +Type: language +Subtag: mbo +Description: Mbo (Cameroon) +Added: 2009-07-29 +%% +Type: language +Subtag: mbp +Description: Malayo +Added: 2009-07-29 +%% +Type: language +Subtag: mbq +Description: Maisin +Added: 2009-07-29 +%% +Type: language +Subtag: mbr +Description: Nukak Makú +Added: 2009-07-29 +%% +Type: language +Subtag: mbs +Description: Sarangani Manobo +Added: 2009-07-29 +%% +Type: language +Subtag: mbt +Description: Matigsalug Manobo +Added: 2009-07-29 +%% +Type: language +Subtag: mbu +Description: Mbula-Bwazza +Added: 2009-07-29 +%% +Type: language +Subtag: mbv +Description: Mbulungish +Added: 2009-07-29 +%% +Type: language +Subtag: mbw +Description: Maring +Added: 2009-07-29 +%% +Type: language +Subtag: mbx +Description: Mari (East Sepik Province) +Added: 2009-07-29 +%% +Type: language +Subtag: mby +Description: Memoni +Added: 2009-07-29 +%% +Type: language +Subtag: mbz +Description: Amoltepec Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: mca +Description: Maca +Added: 2009-07-29 +%% +Type: language +Subtag: mcb +Description: Machiguenga +Added: 2009-07-29 +%% +Type: language +Subtag: mcc +Description: Bitur +Added: 2009-07-29 +%% +Type: language +Subtag: mcd +Description: Sharanahua +Added: 2009-07-29 +%% +Type: language +Subtag: mce +Description: Itundujia Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: mcf +Description: Matsés +Added: 2009-07-29 +%% +Type: language +Subtag: mcg +Description: Mapoyo +Added: 2009-07-29 +%% +Type: language +Subtag: mch +Description: Maquiritari +Added: 2009-07-29 +%% +Type: language +Subtag: mci +Description: Mese +Added: 2009-07-29 +%% +Type: language +Subtag: mcj +Description: Mvanip +Added: 2009-07-29 +%% +Type: language +Subtag: mck +Description: Mbunda +Added: 2009-07-29 +%% +Type: language +Subtag: mcl +Description: Macaguaje +Added: 2009-07-29 +%% +Type: language +Subtag: mcm +Description: Malaccan Creole Portuguese +Added: 2009-07-29 +%% +Type: language +Subtag: mcn +Description: Masana +Added: 2009-07-29 +%% +Type: language +Subtag: mco +Description: Coatlán Mixe +Added: 2009-07-29 +%% +Type: language +Subtag: mcp +Description: Makaa +Added: 2009-07-29 +%% +Type: language +Subtag: mcq +Description: Ese +Added: 2009-07-29 +%% +Type: language +Subtag: mcr +Description: Menya +Added: 2009-07-29 +%% +Type: language +Subtag: mcs +Description: Mambai +Added: 2009-07-29 +%% +Type: language +Subtag: mct +Description: Mengisa +Added: 2009-07-29 +%% +Type: language +Subtag: mcu +Description: Cameroon Mambila +Added: 2009-07-29 +%% +Type: language +Subtag: mcv +Description: Minanibai +Added: 2009-07-29 +%% +Type: language +Subtag: mcw +Description: Mawa (Chad) +Added: 2009-07-29 +%% +Type: language +Subtag: mcx +Description: Mpiemo +Added: 2009-07-29 +%% +Type: language +Subtag: mcy +Description: South Watut +Added: 2009-07-29 +%% +Type: language +Subtag: mcz +Description: Mawan +Added: 2009-07-29 +%% +Type: language +Subtag: mda +Description: Mada (Nigeria) +Added: 2009-07-29 +%% +Type: language +Subtag: mdb +Description: Morigi +Added: 2009-07-29 +%% +Type: language +Subtag: mdc +Description: Male (Papua New Guinea) +Added: 2009-07-29 +%% +Type: language +Subtag: mdd +Description: Mbum +Added: 2009-07-29 +%% +Type: language +Subtag: mde +Description: Maba (Chad) +Added: 2009-07-29 +%% +Type: language +Subtag: mdf +Description: Moksha +Added: 2005-10-16 +%% +Type: language +Subtag: mdg +Description: Massalat +Added: 2009-07-29 +%% +Type: language +Subtag: mdh +Description: Maguindanaon +Added: 2009-07-29 +%% +Type: language +Subtag: mdi +Description: Mamvu +Added: 2009-07-29 +%% +Type: language +Subtag: mdj +Description: Mangbetu +Added: 2009-07-29 +%% +Type: language +Subtag: mdk +Description: Mangbutu +Added: 2009-07-29 +%% +Type: language +Subtag: mdl +Description: Maltese Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: mdm +Description: Mayogo +Added: 2009-07-29 +%% +Type: language +Subtag: mdn +Description: Mbati +Added: 2009-07-29 +%% +Type: language +Subtag: mdp +Description: Mbala +Added: 2009-07-29 +%% +Type: language +Subtag: mdq +Description: Mbole +Added: 2009-07-29 +%% +Type: language +Subtag: mdr +Description: Mandar +Added: 2005-10-16 +%% +Type: language +Subtag: mds +Description: Maria (Papua New Guinea) +Added: 2009-07-29 +%% +Type: language +Subtag: mdt +Description: Mbere +Added: 2009-07-29 +%% +Type: language +Subtag: mdu +Description: Mboko +Added: 2009-07-29 +%% +Type: language +Subtag: mdv +Description: Santa Lucía Monteverde Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: mdw +Description: Mbosi +Added: 2009-07-29 +%% +Type: language +Subtag: mdx +Description: Dizin +Added: 2009-07-29 +%% +Type: language +Subtag: mdy +Description: Male (Ethiopia) +Added: 2009-07-29 +%% +Type: language +Subtag: mdz +Description: Suruí Do Pará +Added: 2009-07-29 +%% +Type: language +Subtag: mea +Description: Menka +Added: 2009-07-29 +%% +Type: language +Subtag: meb +Description: Ikobi +Added: 2009-07-29 +%% +Type: language +Subtag: mec +Description: Mara +Added: 2009-07-29 +%% +Type: language +Subtag: med +Description: Melpa +Added: 2009-07-29 +%% +Type: language +Subtag: mee +Description: Mengen +Added: 2009-07-29 +%% +Type: language +Subtag: mef +Description: Megam +Added: 2009-07-29 +%% +Type: language +Subtag: meg +Description: Mea +Added: 2009-07-29 +%% +Type: language +Subtag: meh +Description: Southwestern Tlaxiaco Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: mei +Description: Midob +Added: 2009-07-29 +%% +Type: language +Subtag: mej +Description: Meyah +Added: 2009-07-29 +%% +Type: language +Subtag: mek +Description: Mekeo +Added: 2009-07-29 +%% +Type: language +Subtag: mel +Description: Central Melanau +Added: 2009-07-29 +%% +Type: language +Subtag: mem +Description: Mangala +Added: 2009-07-29 +%% +Type: language +Subtag: men +Description: Mende (Sierra Leone) +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: meo +Description: Kedah Malay +Added: 2009-07-29 +Macrolanguage: ms +%% +Type: language +Subtag: mep +Description: Miriwung +Added: 2009-07-29 +%% +Type: language +Subtag: meq +Description: Merey +Added: 2009-07-29 +%% +Type: language +Subtag: mer +Description: Meru +Added: 2009-07-29 +%% +Type: language +Subtag: mes +Description: Masmaje +Added: 2009-07-29 +%% +Type: language +Subtag: met +Description: Mato +Added: 2009-07-29 +%% +Type: language +Subtag: meu +Description: Motu +Added: 2009-07-29 +%% +Type: language +Subtag: mev +Description: Mann +Added: 2009-07-29 +%% +Type: language +Subtag: mew +Description: Maaka +Added: 2009-07-29 +%% +Type: language +Subtag: mey +Description: Hassaniyya +Added: 2009-07-29 +%% +Type: language +Subtag: mez +Description: Menominee +Added: 2009-07-29 +%% +Type: language +Subtag: mfa +Description: Pattani Malay +Added: 2009-07-29 +Macrolanguage: ms +%% +Type: language +Subtag: mfb +Description: Bangka +Added: 2009-07-29 +Macrolanguage: ms +%% +Type: language +Subtag: mfc +Description: Mba +Added: 2009-07-29 +%% +Type: language +Subtag: mfd +Description: Mendankwe-Nkwen +Added: 2009-07-29 +%% +Type: language +Subtag: mfe +Description: Morisyen +Added: 2009-07-29 +%% +Type: language +Subtag: mff +Description: Naki +Added: 2009-07-29 +%% +Type: language +Subtag: mfg +Description: Mixifore +Added: 2009-07-29 +%% +Type: language +Subtag: mfh +Description: Matal +Added: 2009-07-29 +%% +Type: language +Subtag: mfi +Description: Wandala +Added: 2009-07-29 +%% +Type: language +Subtag: mfj +Description: Mefele +Added: 2009-07-29 +%% +Type: language +Subtag: mfk +Description: North Mofu +Added: 2009-07-29 +%% +Type: language +Subtag: mfl +Description: Putai +Added: 2009-07-29 +%% +Type: language +Subtag: mfm +Description: Marghi South +Added: 2009-07-29 +%% +Type: language +Subtag: mfn +Description: Cross River Mbembe +Added: 2009-07-29 +%% +Type: language +Subtag: mfo +Description: Mbe +Added: 2009-07-29 +%% +Type: language +Subtag: mfp +Description: Makassar Malay +Added: 2009-07-29 +%% +Type: language +Subtag: mfq +Description: Moba +Added: 2009-07-29 +%% +Type: language +Subtag: mfr +Description: Marithiel +Added: 2009-07-29 +%% +Type: language +Subtag: mfs +Description: Mexican Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: mft +Description: Mokerang +Added: 2009-07-29 +%% +Type: language +Subtag: mfu +Description: Mbwela +Added: 2009-07-29 +%% +Type: language +Subtag: mfv +Description: Mandjak +Added: 2009-07-29 +%% +Type: language +Subtag: mfw +Description: Mulaha +Added: 2009-07-29 +%% +Type: language +Subtag: mfx +Description: Melo +Added: 2009-07-29 +%% +Type: language +Subtag: mfy +Description: Mayo +Added: 2009-07-29 +%% +Type: language +Subtag: mfz +Description: Mabaan +Added: 2009-07-29 +%% +Type: language +Subtag: mga +Description: Middle Irish (900-1200) +Added: 2005-10-16 +%% +Type: language +Subtag: mgb +Description: Mararit +Added: 2009-07-29 +%% +Type: language +Subtag: mgc +Description: Morokodo +Added: 2009-07-29 +%% +Type: language +Subtag: mgd +Description: Moru +Added: 2009-07-29 +%% +Type: language +Subtag: mge +Description: Mango +Added: 2009-07-29 +%% +Type: language +Subtag: mgf +Description: Maklew +Added: 2009-07-29 +%% +Type: language +Subtag: mgg +Description: Mpumpong +Added: 2009-07-29 +%% +Type: language +Subtag: mgh +Description: Makhuwa-Meetto +Added: 2009-07-29 +%% +Type: language +Subtag: mgi +Description: Lijili +Added: 2009-07-29 +%% +Type: language +Subtag: mgj +Description: Abureni +Added: 2009-07-29 +%% +Type: language +Subtag: mgk +Description: Mawes +Added: 2009-07-29 +%% +Type: language +Subtag: mgl +Description: Maleu-Kilenge +Added: 2009-07-29 +%% +Type: language +Subtag: mgm +Description: Mambae +Added: 2009-07-29 +%% +Type: language +Subtag: mgn +Description: Mbangi +Added: 2009-07-29 +%% +Type: language +Subtag: mgo +Description: Meta' +Added: 2009-07-29 +%% +Type: language +Subtag: mgp +Description: Eastern Magar +Added: 2009-07-29 +%% +Type: language +Subtag: mgq +Description: Malila +Added: 2009-07-29 +%% +Type: language +Subtag: mgr +Description: Mambwe-Lungu +Added: 2009-07-29 +%% +Type: language +Subtag: mgs +Description: Manda (Tanzania) +Added: 2009-07-29 +%% +Type: language +Subtag: mgt +Description: Mongol +Added: 2009-07-29 +%% +Type: language +Subtag: mgu +Description: Mailu +Added: 2009-07-29 +%% +Type: language +Subtag: mgv +Description: Matengo +Added: 2009-07-29 +%% +Type: language +Subtag: mgw +Description: Matumbi +Added: 2009-07-29 +%% +Type: language +Subtag: mgx +Description: Omati +Added: 2009-07-29 +Deprecated: 2012-08-12 +Comments: see jbk, jmw +%% +Type: language +Subtag: mgy +Description: Mbunga +Added: 2009-07-29 +%% +Type: language +Subtag: mgz +Description: Mbugwe +Added: 2009-07-29 +%% +Type: language +Subtag: mha +Description: Manda (India) +Added: 2009-07-29 +%% +Type: language +Subtag: mhb +Description: Mahongwe +Added: 2009-07-29 +%% +Type: language +Subtag: mhc +Description: Mocho +Added: 2009-07-29 +%% +Type: language +Subtag: mhd +Description: Mbugu +Added: 2009-07-29 +%% +Type: language +Subtag: mhe +Description: Besisi +Description: Mah Meri +Added: 2009-07-29 +%% +Type: language +Subtag: mhf +Description: Mamaa +Added: 2009-07-29 +%% +Type: language +Subtag: mhg +Description: Margu +Added: 2009-07-29 +%% +Type: language +Subtag: mhh +Description: Maskoy Pidgin +Added: 2009-07-29 +%% +Type: language +Subtag: mhi +Description: Ma'di +Added: 2009-07-29 +%% +Type: language +Subtag: mhj +Description: Mogholi +Added: 2009-07-29 +%% +Type: language +Subtag: mhk +Description: Mungaka +Added: 2009-07-29 +%% +Type: language +Subtag: mhl +Description: Mauwake +Added: 2009-07-29 +%% +Type: language +Subtag: mhm +Description: Makhuwa-Moniga +Added: 2009-07-29 +%% +Type: language +Subtag: mhn +Description: Mócheno +Added: 2009-07-29 +%% +Type: language +Subtag: mho +Description: Mashi (Zambia) +Added: 2009-07-29 +%% +Type: language +Subtag: mhp +Description: Balinese Malay +Added: 2009-07-29 +%% +Type: language +Subtag: mhq +Description: Mandan +Added: 2009-07-29 +%% +Type: language +Subtag: mhr +Description: Eastern Mari +Added: 2009-07-29 +Macrolanguage: chm +%% +Type: language +Subtag: mhs +Description: Buru (Indonesia) +Added: 2009-07-29 +%% +Type: language +Subtag: mht +Description: Mandahuaca +Added: 2009-07-29 +%% +Type: language +Subtag: mhu +Description: Digaro-Mishmi +Description: Darang Deng +Added: 2009-07-29 +%% +Type: language +Subtag: mhw +Description: Mbukushu +Added: 2009-07-29 +%% +Type: language +Subtag: mhx +Description: Maru +Description: Lhaovo +Added: 2009-07-29 +%% +Type: language +Subtag: mhy +Description: Ma'anyan +Added: 2009-07-29 +%% +Type: language +Subtag: mhz +Description: Mor (Mor Islands) +Added: 2009-07-29 +%% +Type: language +Subtag: mia +Description: Miami +Added: 2009-07-29 +%% +Type: language +Subtag: mib +Description: Atatláhuca Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: mic +Description: Mi'kmaq +Description: Micmac +Added: 2005-10-16 +%% +Type: language +Subtag: mid +Description: Mandaic +Added: 2009-07-29 +%% +Type: language +Subtag: mie +Description: Ocotepec Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: mif +Description: Mofu-Gudur +Added: 2009-07-29 +%% +Type: language +Subtag: mig +Description: San Miguel El Grande Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: mih +Description: Chayuco Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: mii +Description: Chigmecatitlán Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: mij +Description: Abar +Added: 2009-07-29 +%% +Type: language +Subtag: mik +Description: Mikasuki +Added: 2009-07-29 +%% +Type: language +Subtag: mil +Description: Peñoles Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: mim +Description: Alacatlatzala Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: min +Description: Minangkabau +Added: 2005-10-16 +Macrolanguage: ms +%% +Type: language +Subtag: mio +Description: Pinotepa Nacional Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: mip +Description: Apasco-Apoala Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: miq +Description: Mískito +Added: 2009-07-29 +%% +Type: language +Subtag: mir +Description: Isthmus Mixe +Added: 2009-07-29 +%% +Type: language +Subtag: mis +Description: Uncoded languages +Added: 2005-10-16 +Scope: special +%% +Type: language +Subtag: mit +Description: Southern Puebla Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: miu +Description: Cacaloxtepec Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: miw +Description: Akoye +Added: 2009-07-29 +%% +Type: language +Subtag: mix +Description: Mixtepec Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: miy +Description: Ayutla Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: miz +Description: Coatzospan Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: mja +Description: Mahei +Added: 2009-07-29 +Deprecated: 2011-08-16 +%% +Type: language +Subtag: mjc +Description: San Juan Colorado Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: mjd +Description: Northwest Maidu +Added: 2009-07-29 +%% +Type: language +Subtag: mje +Description: Muskum +Added: 2009-07-29 +%% +Type: language +Subtag: mjg +Description: Tu +Added: 2009-07-29 +%% +Type: language +Subtag: mjh +Description: Mwera (Nyasa) +Added: 2009-07-29 +%% +Type: language +Subtag: mji +Description: Kim Mun +Added: 2009-07-29 +%% +Type: language +Subtag: mjj +Description: Mawak +Added: 2009-07-29 +%% +Type: language +Subtag: mjk +Description: Matukar +Added: 2009-07-29 +%% +Type: language +Subtag: mjl +Description: Mandeali +Added: 2009-07-29 +%% +Type: language +Subtag: mjm +Description: Medebur +Added: 2009-07-29 +%% +Type: language +Subtag: mjn +Description: Ma (Papua New Guinea) +Added: 2009-07-29 +%% +Type: language +Subtag: mjo +Description: Malankuravan +Added: 2009-07-29 +%% +Type: language +Subtag: mjp +Description: Malapandaram +Added: 2009-07-29 +%% +Type: language +Subtag: mjq +Description: Malaryan +Added: 2009-07-29 +%% +Type: language +Subtag: mjr +Description: Malavedan +Added: 2009-07-29 +%% +Type: language +Subtag: mjs +Description: Miship +Added: 2009-07-29 +%% +Type: language +Subtag: mjt +Description: Sauria Paharia +Added: 2009-07-29 +%% +Type: language +Subtag: mju +Description: Manna-Dora +Added: 2009-07-29 +%% +Type: language +Subtag: mjv +Description: Mannan +Added: 2009-07-29 +%% +Type: language +Subtag: mjw +Description: Karbi +Added: 2009-07-29 +%% +Type: language +Subtag: mjx +Description: Mahali +Added: 2009-07-29 +%% +Type: language +Subtag: mjy +Description: Mahican +Added: 2009-07-29 +%% +Type: language +Subtag: mjz +Description: Majhi +Added: 2009-07-29 +%% +Type: language +Subtag: mka +Description: Mbre +Added: 2009-07-29 +%% +Type: language +Subtag: mkb +Description: Mal Paharia +Added: 2009-07-29 +%% +Type: language +Subtag: mkc +Description: Siliput +Added: 2009-07-29 +%% +Type: language +Subtag: mke +Description: Mawchi +Added: 2009-07-29 +%% +Type: language +Subtag: mkf +Description: Miya +Added: 2009-07-29 +%% +Type: language +Subtag: mkg +Description: Mak (China) +Added: 2009-07-29 +%% +Type: language +Subtag: mkh +Description: Mon-Khmer languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: mki +Description: Dhatki +Added: 2009-07-29 +%% +Type: language +Subtag: mkj +Description: Mokilese +Added: 2009-07-29 +%% +Type: language +Subtag: mkk +Description: Byep +Added: 2009-07-29 +%% +Type: language +Subtag: mkl +Description: Mokole +Added: 2009-07-29 +%% +Type: language +Subtag: mkm +Description: Moklen +Added: 2009-07-29 +%% +Type: language +Subtag: mkn +Description: Kupang Malay +Added: 2009-07-29 +%% +Type: language +Subtag: mko +Description: Mingang Doso +Added: 2009-07-29 +%% +Type: language +Subtag: mkp +Description: Moikodi +Added: 2009-07-29 +%% +Type: language +Subtag: mkq +Description: Bay Miwok +Added: 2009-07-29 +%% +Type: language +Subtag: mkr +Description: Malas +Added: 2009-07-29 +%% +Type: language +Subtag: mks +Description: Silacayoapan Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: mkt +Description: Vamale +Added: 2009-07-29 +%% +Type: language +Subtag: mku +Description: Konyanka Maninka +Added: 2009-07-29 +Macrolanguage: man +%% +Type: language +Subtag: mkv +Description: Mafea +Added: 2009-07-29 +%% +Type: language +Subtag: mkw +Description: Kituba (Congo) +Added: 2009-07-29 +%% +Type: language +Subtag: mkx +Description: Kinamiging Manobo +Added: 2009-07-29 +%% +Type: language +Subtag: mky +Description: East Makian +Added: 2009-07-29 +%% +Type: language +Subtag: mkz +Description: Makasae +Added: 2009-07-29 +%% +Type: language +Subtag: mla +Description: Malo +Added: 2009-07-29 +%% +Type: language +Subtag: mlb +Description: Mbule +Added: 2009-07-29 +%% +Type: language +Subtag: mlc +Description: Cao Lan +Added: 2009-07-29 +%% +Type: language +Subtag: mld +Description: Malakhel +Added: 2009-07-29 +%% +Type: language +Subtag: mle +Description: Manambu +Added: 2009-07-29 +%% +Type: language +Subtag: mlf +Description: Mal +Added: 2009-07-29 +%% +Type: language +Subtag: mlh +Description: Mape +Added: 2009-07-29 +%% +Type: language +Subtag: mli +Description: Malimpung +Added: 2009-07-29 +%% +Type: language +Subtag: mlj +Description: Miltu +Added: 2009-07-29 +%% +Type: language +Subtag: mlk +Description: Ilwana +Description: Kiwilwana +Added: 2009-07-29 +%% +Type: language +Subtag: mll +Description: Malua Bay +Added: 2009-07-29 +%% +Type: language +Subtag: mlm +Description: Mulam +Added: 2009-07-29 +%% +Type: language +Subtag: mln +Description: Malango +Added: 2009-07-29 +%% +Type: language +Subtag: mlo +Description: Mlomp +Added: 2009-07-29 +%% +Type: language +Subtag: mlp +Description: Bargam +Added: 2009-07-29 +%% +Type: language +Subtag: mlq +Description: Western Maninkakan +Added: 2009-07-29 +Macrolanguage: man +%% +Type: language +Subtag: mlr +Description: Vame +Added: 2009-07-29 +%% +Type: language +Subtag: mls +Description: Masalit +Added: 2009-07-29 +%% +Type: language +Subtag: mlu +Description: To'abaita +Added: 2009-07-29 +%% +Type: language +Subtag: mlv +Description: Motlav +Description: Mwotlap +Added: 2009-07-29 +%% +Type: language +Subtag: mlw +Description: Moloko +Added: 2009-07-29 +%% +Type: language +Subtag: mlx +Description: Malfaxal +Description: Naha'ai +Added: 2009-07-29 +%% +Type: language +Subtag: mlz +Description: Malaynon +Added: 2009-07-29 +%% +Type: language +Subtag: mma +Description: Mama +Added: 2009-07-29 +%% +Type: language +Subtag: mmb +Description: Momina +Added: 2009-07-29 +%% +Type: language +Subtag: mmc +Description: Michoacán Mazahua +Added: 2009-07-29 +%% +Type: language +Subtag: mmd +Description: Maonan +Added: 2009-07-29 +%% +Type: language +Subtag: mme +Description: Mae +Added: 2009-07-29 +%% +Type: language +Subtag: mmf +Description: Mundat +Added: 2009-07-29 +%% +Type: language +Subtag: mmg +Description: North Ambrym +Added: 2009-07-29 +%% +Type: language +Subtag: mmh +Description: Mehináku +Added: 2009-07-29 +%% +Type: language +Subtag: mmi +Description: Musar +Added: 2009-07-29 +%% +Type: language +Subtag: mmj +Description: Majhwar +Added: 2009-07-29 +%% +Type: language +Subtag: mmk +Description: Mukha-Dora +Added: 2009-07-29 +%% +Type: language +Subtag: mml +Description: Man Met +Added: 2009-07-29 +%% +Type: language +Subtag: mmm +Description: Maii +Added: 2009-07-29 +%% +Type: language +Subtag: mmn +Description: Mamanwa +Added: 2009-07-29 +%% +Type: language +Subtag: mmo +Description: Mangga Buang +Added: 2009-07-29 +%% +Type: language +Subtag: mmp +Description: Siawi +Added: 2009-07-29 +%% +Type: language +Subtag: mmq +Description: Musak +Added: 2009-07-29 +%% +Type: language +Subtag: mmr +Description: Western Xiangxi Miao +Added: 2009-07-29 +Macrolanguage: hmn +%% +Type: language +Subtag: mmt +Description: Malalamai +Added: 2009-07-29 +%% +Type: language +Subtag: mmu +Description: Mmaala +Added: 2009-07-29 +%% +Type: language +Subtag: mmv +Description: Miriti +Added: 2009-07-29 +%% +Type: language +Subtag: mmw +Description: Emae +Added: 2009-07-29 +%% +Type: language +Subtag: mmx +Description: Madak +Added: 2009-07-29 +%% +Type: language +Subtag: mmy +Description: Migaama +Added: 2009-07-29 +%% +Type: language +Subtag: mmz +Description: Mabaale +Added: 2009-07-29 +%% +Type: language +Subtag: mna +Description: Mbula +Added: 2009-07-29 +%% +Type: language +Subtag: mnb +Description: Muna +Added: 2009-07-29 +%% +Type: language +Subtag: mnc +Description: Manchu +Added: 2005-10-16 +%% +Type: language +Subtag: mnd +Description: Mondé +Added: 2009-07-29 +%% +Type: language +Subtag: mne +Description: Naba +Added: 2009-07-29 +%% +Type: language +Subtag: mnf +Description: Mundani +Added: 2009-07-29 +%% +Type: language +Subtag: mng +Description: Eastern Mnong +Added: 2009-07-29 +%% +Type: language +Subtag: mnh +Description: Mono (Democratic Republic of Congo) +Added: 2009-07-29 +%% +Type: language +Subtag: mni +Description: Manipuri +Added: 2005-10-16 +%% +Type: language +Subtag: mnj +Description: Munji +Added: 2009-07-29 +%% +Type: language +Subtag: mnk +Description: Mandinka +Added: 2009-07-29 +Macrolanguage: man +%% +Type: language +Subtag: mnl +Description: Tiale +Added: 2009-07-29 +%% +Type: language +Subtag: mnm +Description: Mapena +Added: 2009-07-29 +%% +Type: language +Subtag: mnn +Description: Southern Mnong +Added: 2009-07-29 +%% +Type: language +Subtag: mno +Description: Manobo languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: mnp +Description: Min Bei Chinese +Added: 2009-07-29 +Macrolanguage: zh +%% +Type: language +Subtag: mnq +Description: Minriq +Added: 2009-07-29 +%% +Type: language +Subtag: mnr +Description: Mono (USA) +Added: 2009-07-29 +%% +Type: language +Subtag: mns +Description: Mansi +Added: 2009-07-29 +%% +Type: language +Subtag: mnt +Description: Maykulan +Added: 2009-07-29 +%% +Type: language +Subtag: mnu +Description: Mer +Added: 2009-07-29 +%% +Type: language +Subtag: mnv +Description: Rennell-Bellona +Added: 2009-07-29 +%% +Type: language +Subtag: mnw +Description: Mon +Added: 2009-07-29 +%% +Type: language +Subtag: mnx +Description: Manikion +Added: 2009-07-29 +%% +Type: language +Subtag: mny +Description: Manyawa +Added: 2009-07-29 +%% +Type: language +Subtag: mnz +Description: Moni +Added: 2009-07-29 +%% +Type: language +Subtag: moa +Description: Mwan +Added: 2009-07-29 +%% +Type: language +Subtag: moc +Description: Mocoví +Added: 2009-07-29 +%% +Type: language +Subtag: mod +Description: Mobilian +Added: 2009-07-29 +%% +Type: language +Subtag: moe +Description: Montagnais +Added: 2009-07-29 +%% +Type: language +Subtag: mof +Description: Mohegan-Montauk-Narragansett +Added: 2009-07-29 +Deprecated: 2010-03-11 +Comments: see xnt, xpq +%% +Type: language +Subtag: mog +Description: Mongondow +Added: 2009-07-29 +%% +Type: language +Subtag: moh +Description: Mohawk +Added: 2005-10-16 +%% +Type: language +Subtag: moi +Description: Mboi +Added: 2009-07-29 +%% +Type: language +Subtag: moj +Description: Monzombo +Added: 2009-07-29 +%% +Type: language +Subtag: mok +Description: Morori +Added: 2009-07-29 +%% +Type: language +Subtag: mom +Description: Mangue +Added: 2009-07-29 +%% +Type: language +Subtag: moo +Description: Monom +Added: 2009-07-29 +%% +Type: language +Subtag: mop +Description: Mopán Maya +Added: 2009-07-29 +%% +Type: language +Subtag: moq +Description: Mor (Bomberai Peninsula) +Added: 2009-07-29 +%% +Type: language +Subtag: mor +Description: Moro +Added: 2009-07-29 +%% +Type: language +Subtag: mos +Description: Mossi +Added: 2005-10-16 +%% +Type: language +Subtag: mot +Description: Barí +Added: 2009-07-29 +%% +Type: language +Subtag: mou +Description: Mogum +Added: 2009-07-29 +%% +Type: language +Subtag: mov +Description: Mohave +Added: 2009-07-29 +%% +Type: language +Subtag: mow +Description: Moi (Congo) +Added: 2009-07-29 +%% +Type: language +Subtag: mox +Description: Molima +Added: 2009-07-29 +%% +Type: language +Subtag: moy +Description: Shekkacho +Added: 2009-07-29 +%% +Type: language +Subtag: moz +Description: Mukulu +Description: Gergiko +Added: 2009-07-29 +%% +Type: language +Subtag: mpa +Description: Mpoto +Added: 2009-07-29 +%% +Type: language +Subtag: mpb +Description: Mullukmulluk +Added: 2009-07-29 +%% +Type: language +Subtag: mpc +Description: Mangarayi +Added: 2009-07-29 +%% +Type: language +Subtag: mpd +Description: Machinere +Added: 2009-07-29 +%% +Type: language +Subtag: mpe +Description: Majang +Added: 2009-07-29 +%% +Type: language +Subtag: mpg +Description: Marba +Added: 2009-07-29 +%% +Type: language +Subtag: mph +Description: Maung +Added: 2009-07-29 +%% +Type: language +Subtag: mpi +Description: Mpade +Added: 2009-07-29 +%% +Type: language +Subtag: mpj +Description: Martu Wangka +Added: 2009-07-29 +%% +Type: language +Subtag: mpk +Description: Mbara (Chad) +Added: 2009-07-29 +%% +Type: language +Subtag: mpl +Description: Middle Watut +Added: 2009-07-29 +%% +Type: language +Subtag: mpm +Description: Yosondúa Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: mpn +Description: Mindiri +Added: 2009-07-29 +%% +Type: language +Subtag: mpo +Description: Miu +Added: 2009-07-29 +%% +Type: language +Subtag: mpp +Description: Migabac +Added: 2009-07-29 +%% +Type: language +Subtag: mpq +Description: Matís +Added: 2009-07-29 +%% +Type: language +Subtag: mpr +Description: Vangunu +Added: 2009-07-29 +%% +Type: language +Subtag: mps +Description: Dadibi +Added: 2009-07-29 +%% +Type: language +Subtag: mpt +Description: Mian +Added: 2009-07-29 +%% +Type: language +Subtag: mpu +Description: Makuráp +Added: 2009-07-29 +%% +Type: language +Subtag: mpv +Description: Mungkip +Added: 2009-07-29 +%% +Type: language +Subtag: mpw +Description: Mapidian +Added: 2009-07-29 +%% +Type: language +Subtag: mpx +Description: Misima-Panaeati +Added: 2009-07-29 +%% +Type: language +Subtag: mpy +Description: Mapia +Added: 2009-07-29 +%% +Type: language +Subtag: mpz +Description: Mpi +Added: 2009-07-29 +%% +Type: language +Subtag: mqa +Description: Maba (Indonesia) +Added: 2009-07-29 +%% +Type: language +Subtag: mqb +Description: Mbuko +Added: 2009-07-29 +%% +Type: language +Subtag: mqc +Description: Mangole +Added: 2009-07-29 +%% +Type: language +Subtag: mqe +Description: Matepi +Added: 2009-07-29 +%% +Type: language +Subtag: mqf +Description: Momuna +Added: 2009-07-29 +%% +Type: language +Subtag: mqg +Description: Kota Bangun Kutai Malay +Added: 2009-07-29 +Macrolanguage: ms +%% +Type: language +Subtag: mqh +Description: Tlazoyaltepec Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: mqi +Description: Mariri +Added: 2009-07-29 +%% +Type: language +Subtag: mqj +Description: Mamasa +Added: 2009-07-29 +%% +Type: language +Subtag: mqk +Description: Rajah Kabunsuwan Manobo +Added: 2009-07-29 +%% +Type: language +Subtag: mql +Description: Mbelime +Added: 2009-07-29 +%% +Type: language +Subtag: mqm +Description: South Marquesan +Added: 2009-07-29 +%% +Type: language +Subtag: mqn +Description: Moronene +Added: 2009-07-29 +%% +Type: language +Subtag: mqo +Description: Modole +Added: 2009-07-29 +%% +Type: language +Subtag: mqp +Description: Manipa +Added: 2009-07-29 +%% +Type: language +Subtag: mqq +Description: Minokok +Added: 2009-07-29 +%% +Type: language +Subtag: mqr +Description: Mander +Added: 2009-07-29 +%% +Type: language +Subtag: mqs +Description: West Makian +Added: 2009-07-29 +%% +Type: language +Subtag: mqt +Description: Mok +Added: 2009-07-29 +%% +Type: language +Subtag: mqu +Description: Mandari +Added: 2009-07-29 +%% +Type: language +Subtag: mqv +Description: Mosimo +Added: 2009-07-29 +%% +Type: language +Subtag: mqw +Description: Murupi +Added: 2009-07-29 +%% +Type: language +Subtag: mqx +Description: Mamuju +Added: 2009-07-29 +%% +Type: language +Subtag: mqy +Description: Manggarai +Added: 2009-07-29 +%% +Type: language +Subtag: mqz +Description: Pano +Added: 2009-07-29 +%% +Type: language +Subtag: mra +Description: Mlabri +Added: 2009-07-29 +%% +Type: language +Subtag: mrb +Description: Marino +Added: 2009-07-29 +%% +Type: language +Subtag: mrc +Description: Maricopa +Added: 2009-07-29 +%% +Type: language +Subtag: mrd +Description: Western Magar +Added: 2009-07-29 +%% +Type: language +Subtag: mre +Description: Martha's Vineyard Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: mrf +Description: Elseng +Added: 2009-07-29 +%% +Type: language +Subtag: mrg +Description: Mising +Added: 2009-07-29 +%% +Type: language +Subtag: mrh +Description: Mara Chin +Added: 2009-07-29 +%% +Type: language +Subtag: mrj +Description: Western Mari +Added: 2009-07-29 +Macrolanguage: chm +%% +Type: language +Subtag: mrk +Description: Hmwaveke +Added: 2009-07-29 +%% +Type: language +Subtag: mrl +Description: Mortlockese +Added: 2009-07-29 +%% +Type: language +Subtag: mrm +Description: Merlav +Description: Mwerlap +Added: 2009-07-29 +%% +Type: language +Subtag: mrn +Description: Cheke Holo +Added: 2009-07-29 +%% +Type: language +Subtag: mro +Description: Mru +Added: 2009-07-29 +%% +Type: language +Subtag: mrp +Description: Morouas +Added: 2009-07-29 +%% +Type: language +Subtag: mrq +Description: North Marquesan +Added: 2009-07-29 +%% +Type: language +Subtag: mrr +Description: Maria (India) +Added: 2009-07-29 +%% +Type: language +Subtag: mrs +Description: Maragus +Added: 2009-07-29 +%% +Type: language +Subtag: mrt +Description: Marghi Central +Added: 2009-07-29 +%% +Type: language +Subtag: mru +Description: Mono (Cameroon) +Added: 2009-07-29 +%% +Type: language +Subtag: mrv +Description: Mangareva +Added: 2009-07-29 +%% +Type: language +Subtag: mrw +Description: Maranao +Added: 2009-07-29 +%% +Type: language +Subtag: mrx +Description: Maremgi +Description: Dineor +Added: 2009-07-29 +%% +Type: language +Subtag: mry +Description: Mandaya +Added: 2009-07-29 +%% +Type: language +Subtag: mrz +Description: Marind +Added: 2009-07-29 +%% +Type: language +Subtag: msb +Description: Masbatenyo +Added: 2009-07-29 +%% +Type: language +Subtag: msc +Description: Sankaran Maninka +Added: 2009-07-29 +Macrolanguage: man +%% +Type: language +Subtag: msd +Description: Yucatec Maya Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: mse +Description: Musey +Added: 2009-07-29 +%% +Type: language +Subtag: msf +Description: Mekwei +Added: 2009-07-29 +%% +Type: language +Subtag: msg +Description: Moraid +Added: 2009-07-29 +%% +Type: language +Subtag: msh +Description: Masikoro Malagasy +Added: 2009-07-29 +Macrolanguage: mg +%% +Type: language +Subtag: msi +Description: Sabah Malay +Added: 2009-07-29 +Macrolanguage: ms +%% +Type: language +Subtag: msj +Description: Ma (Democratic Republic of Congo) +Added: 2009-07-29 +%% +Type: language +Subtag: msk +Description: Mansaka +Added: 2009-07-29 +%% +Type: language +Subtag: msl +Description: Molof +Description: Poule +Added: 2009-07-29 +%% +Type: language +Subtag: msm +Description: Agusan Manobo +Added: 2009-07-29 +%% +Type: language +Subtag: msn +Description: Vurës +Added: 2009-07-29 +%% +Type: language +Subtag: mso +Description: Mombum +Added: 2009-07-29 +%% +Type: language +Subtag: msp +Description: Maritsauá +Added: 2009-07-29 +%% +Type: language +Subtag: msq +Description: Caac +Added: 2009-07-29 +%% +Type: language +Subtag: msr +Description: Mongolian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: mss +Description: West Masela +Added: 2009-07-29 +%% +Type: language +Subtag: mst +Description: Cataelano Mandaya +Added: 2009-07-29 +Deprecated: 2010-03-11 +Preferred-Value: mry +%% +Type: language +Subtag: msu +Description: Musom +Added: 2009-07-29 +%% +Type: language +Subtag: msv +Description: Maslam +Added: 2009-07-29 +%% +Type: language +Subtag: msw +Description: Mansoanka +Added: 2009-07-29 +%% +Type: language +Subtag: msx +Description: Moresada +Added: 2009-07-29 +%% +Type: language +Subtag: msy +Description: Aruamu +Added: 2009-07-29 +%% +Type: language +Subtag: msz +Description: Momare +Added: 2009-07-29 +%% +Type: language +Subtag: mta +Description: Cotabato Manobo +Added: 2009-07-29 +%% +Type: language +Subtag: mtb +Description: Anyin Morofo +Added: 2009-07-29 +%% +Type: language +Subtag: mtc +Description: Munit +Added: 2009-07-29 +%% +Type: language +Subtag: mtd +Description: Mualang +Added: 2009-07-29 +%% +Type: language +Subtag: mte +Description: Mono (Solomon Islands) +Added: 2009-07-29 +%% +Type: language +Subtag: mtf +Description: Murik (Papua New Guinea) +Added: 2009-07-29 +%% +Type: language +Subtag: mtg +Description: Una +Added: 2009-07-29 +%% +Type: language +Subtag: mth +Description: Munggui +Added: 2009-07-29 +%% +Type: language +Subtag: mti +Description: Maiwa (Papua New Guinea) +Added: 2009-07-29 +%% +Type: language +Subtag: mtj +Description: Moskona +Added: 2009-07-29 +%% +Type: language +Subtag: mtk +Description: Mbe' +Added: 2009-07-29 +%% +Type: language +Subtag: mtl +Description: Montol +Added: 2009-07-29 +%% +Type: language +Subtag: mtm +Description: Mator +Added: 2009-07-29 +%% +Type: language +Subtag: mtn +Description: Matagalpa +Added: 2009-07-29 +%% +Type: language +Subtag: mto +Description: Totontepec Mixe +Added: 2009-07-29 +%% +Type: language +Subtag: mtp +Description: Wichí Lhamtés Nocten +Added: 2009-07-29 +%% +Type: language +Subtag: mtq +Description: Muong +Added: 2009-07-29 +%% +Type: language +Subtag: mtr +Description: Mewari +Added: 2009-07-29 +Macrolanguage: mwr +%% +Type: language +Subtag: mts +Description: Yora +Added: 2009-07-29 +%% +Type: language +Subtag: mtt +Description: Mota +Added: 2009-07-29 +%% +Type: language +Subtag: mtu +Description: Tututepec Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: mtv +Description: Asaro'o +Added: 2009-07-29 +%% +Type: language +Subtag: mtw +Description: Southern Binukidnon +Added: 2009-07-29 +%% +Type: language +Subtag: mtx +Description: Tidaá Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: mty +Description: Nabi +Added: 2009-07-29 +%% +Type: language +Subtag: mua +Description: Mundang +Added: 2009-07-29 +%% +Type: language +Subtag: mub +Description: Mubi +Added: 2009-07-29 +%% +Type: language +Subtag: muc +Description: Mbu' +Added: 2009-07-29 +%% +Type: language +Subtag: mud +Description: Mednyj Aleut +Added: 2009-07-29 +%% +Type: language +Subtag: mue +Description: Media Lengua +Added: 2009-07-29 +%% +Type: language +Subtag: mug +Description: Musgu +Added: 2009-07-29 +%% +Type: language +Subtag: muh +Description: Mündü +Added: 2009-07-29 +%% +Type: language +Subtag: mui +Description: Musi +Added: 2009-07-29 +Macrolanguage: ms +%% +Type: language +Subtag: muj +Description: Mabire +Added: 2009-07-29 +%% +Type: language +Subtag: muk +Description: Mugom +Added: 2009-07-29 +%% +Type: language +Subtag: mul +Description: Multiple languages +Added: 2005-10-16 +Scope: special +%% +Type: language +Subtag: mum +Description: Maiwala +Added: 2009-07-29 +%% +Type: language +Subtag: mun +Description: Munda languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: muo +Description: Nyong +Added: 2009-07-29 +%% +Type: language +Subtag: mup +Description: Malvi +Added: 2009-07-29 +Macrolanguage: raj +%% +Type: language +Subtag: muq +Description: Eastern Xiangxi Miao +Added: 2009-07-29 +Macrolanguage: hmn +%% +Type: language +Subtag: mur +Description: Murle +Added: 2009-07-29 +%% +Type: language +Subtag: mus +Description: Creek +Added: 2005-10-16 +%% +Type: language +Subtag: mut +Description: Western Muria +Added: 2009-07-29 +%% +Type: language +Subtag: muu +Description: Yaaku +Added: 2009-07-29 +%% +Type: language +Subtag: muv +Description: Muthuvan +Added: 2009-07-29 +%% +Type: language +Subtag: mux +Description: Bo-Ung +Added: 2009-07-29 +%% +Type: language +Subtag: muy +Description: Muyang +Added: 2009-07-29 +%% +Type: language +Subtag: muz +Description: Mursi +Added: 2009-07-29 +%% +Type: language +Subtag: mva +Description: Manam +Added: 2009-07-29 +%% +Type: language +Subtag: mvb +Description: Mattole +Added: 2009-07-29 +%% +Type: language +Subtag: mvd +Description: Mamboru +Added: 2009-07-29 +%% +Type: language +Subtag: mve +Description: Marwari (Pakistan) +Added: 2009-07-29 +Macrolanguage: mwr +%% +Type: language +Subtag: mvf +Description: Peripheral Mongolian +Added: 2009-07-29 +Macrolanguage: mn +%% +Type: language +Subtag: mvg +Description: Yucuañe Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: mvh +Description: Mulgi +Added: 2009-07-29 +%% +Type: language +Subtag: mvi +Description: Miyako +Added: 2009-07-29 +%% +Type: language +Subtag: mvk +Description: Mekmek +Added: 2009-07-29 +%% +Type: language +Subtag: mvl +Description: Mbara (Australia) +Added: 2009-07-29 +%% +Type: language +Subtag: mvm +Description: Muya +Added: 2009-07-29 +%% +Type: language +Subtag: mvn +Description: Minaveha +Added: 2009-07-29 +%% +Type: language +Subtag: mvo +Description: Marovo +Added: 2009-07-29 +%% +Type: language +Subtag: mvp +Description: Duri +Added: 2009-07-29 +%% +Type: language +Subtag: mvq +Description: Moere +Added: 2009-07-29 +%% +Type: language +Subtag: mvr +Description: Marau +Added: 2009-07-29 +%% +Type: language +Subtag: mvs +Description: Massep +Added: 2009-07-29 +%% +Type: language +Subtag: mvt +Description: Mpotovoro +Added: 2009-07-29 +%% +Type: language +Subtag: mvu +Description: Marfa +Added: 2009-07-29 +%% +Type: language +Subtag: mvv +Description: Tagal Murut +Added: 2009-07-29 +%% +Type: language +Subtag: mvw +Description: Machinga +Added: 2009-07-29 +%% +Type: language +Subtag: mvx +Description: Meoswar +Added: 2009-07-29 +%% +Type: language +Subtag: mvy +Description: Indus Kohistani +Added: 2009-07-29 +%% +Type: language +Subtag: mvz +Description: Mesqan +Added: 2009-07-29 +%% +Type: language +Subtag: mwa +Description: Mwatebu +Added: 2009-07-29 +%% +Type: language +Subtag: mwb +Description: Juwal +Added: 2009-07-29 +%% +Type: language +Subtag: mwc +Description: Are +Added: 2009-07-29 +%% +Type: language +Subtag: mwd +Description: Mudbura +Added: 2009-07-29 +%% +Type: language +Subtag: mwe +Description: Mwera (Chimwera) +Added: 2009-07-29 +%% +Type: language +Subtag: mwf +Description: Murrinh-Patha +Added: 2009-07-29 +%% +Type: language +Subtag: mwg +Description: Aiklep +Added: 2009-07-29 +%% +Type: language +Subtag: mwh +Description: Mouk-Aria +Added: 2009-07-29 +%% +Type: language +Subtag: mwi +Description: Labo +Description: Ninde +Added: 2009-07-29 +%% +Type: language +Subtag: mwj +Description: Maligo +Added: 2009-07-29 +%% +Type: language +Subtag: mwk +Description: Kita Maninkakan +Added: 2009-07-29 +Macrolanguage: man +%% +Type: language +Subtag: mwl +Description: Mirandese +Added: 2005-10-16 +%% +Type: language +Subtag: mwm +Description: Sar +Added: 2009-07-29 +%% +Type: language +Subtag: mwn +Description: Nyamwanga +Added: 2009-07-29 +%% +Type: language +Subtag: mwo +Description: Central Maewo +Added: 2009-07-29 +%% +Type: language +Subtag: mwp +Description: Kala Lagaw Ya +Added: 2009-07-29 +%% +Type: language +Subtag: mwq +Description: Mün Chin +Added: 2009-07-29 +%% +Type: language +Subtag: mwr +Description: Marwari +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: mws +Description: Mwimbi-Muthambi +Added: 2009-07-29 +%% +Type: language +Subtag: mwt +Description: Moken +Added: 2009-07-29 +%% +Type: language +Subtag: mwu +Description: Mittu +Added: 2009-07-29 +%% +Type: language +Subtag: mwv +Description: Mentawai +Added: 2009-07-29 +%% +Type: language +Subtag: mww +Description: Hmong Daw +Added: 2009-07-29 +Macrolanguage: hmn +%% +Type: language +Subtag: mwx +Description: Mediak +Added: 2009-07-29 +%% +Type: language +Subtag: mwy +Description: Mosiro +Added: 2009-07-29 +%% +Type: language +Subtag: mwz +Description: Moingi +Added: 2009-07-29 +%% +Type: language +Subtag: mxa +Description: Northwest Oaxaca Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: mxb +Description: Tezoatlán Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: mxc +Description: Manyika +Added: 2009-07-29 +%% +Type: language +Subtag: mxd +Description: Modang +Added: 2009-07-29 +%% +Type: language +Subtag: mxe +Description: Mele-Fila +Added: 2009-07-29 +%% +Type: language +Subtag: mxf +Description: Malgbe +Added: 2009-07-29 +%% +Type: language +Subtag: mxg +Description: Mbangala +Added: 2009-07-29 +%% +Type: language +Subtag: mxh +Description: Mvuba +Added: 2009-07-29 +%% +Type: language +Subtag: mxi +Description: Mozarabic +Added: 2009-07-29 +%% +Type: language +Subtag: mxj +Description: Miju-Mishmi +Description: Geman Deng +Added: 2009-07-29 +%% +Type: language +Subtag: mxk +Description: Monumbo +Added: 2009-07-29 +%% +Type: language +Subtag: mxl +Description: Maxi Gbe +Added: 2009-07-29 +%% +Type: language +Subtag: mxm +Description: Meramera +Added: 2009-07-29 +%% +Type: language +Subtag: mxn +Description: Moi (Indonesia) +Added: 2009-07-29 +%% +Type: language +Subtag: mxo +Description: Mbowe +Added: 2009-07-29 +%% +Type: language +Subtag: mxp +Description: Tlahuitoltepec Mixe +Added: 2009-07-29 +%% +Type: language +Subtag: mxq +Description: Juquila Mixe +Added: 2009-07-29 +%% +Type: language +Subtag: mxr +Description: Murik (Malaysia) +Added: 2009-07-29 +%% +Type: language +Subtag: mxs +Description: Huitepec Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: mxt +Description: Jamiltepec Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: mxu +Description: Mada (Cameroon) +Added: 2009-07-29 +%% +Type: language +Subtag: mxv +Description: Metlatónoc Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: mxw +Description: Namo +Added: 2009-07-29 +%% +Type: language +Subtag: mxx +Description: Mahou +Description: Mawukakan +Added: 2009-07-29 +%% +Type: language +Subtag: mxy +Description: Southeastern Nochixtlán Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: mxz +Description: Central Masela +Added: 2009-07-29 +%% +Type: language +Subtag: myb +Description: Mbay +Added: 2009-07-29 +%% +Type: language +Subtag: myc +Description: Mayeka +Added: 2009-07-29 +%% +Type: language +Subtag: myd +Description: Maramba +Added: 2009-07-29 +%% +Type: language +Subtag: mye +Description: Myene +Added: 2009-07-29 +%% +Type: language +Subtag: myf +Description: Bambassi +Added: 2009-07-29 +%% +Type: language +Subtag: myg +Description: Manta +Added: 2009-07-29 +%% +Type: language +Subtag: myh +Description: Makah +Added: 2009-07-29 +%% +Type: language +Subtag: myi +Description: Mina (India) +Added: 2009-07-29 +%% +Type: language +Subtag: myj +Description: Mangayat +Added: 2009-07-29 +%% +Type: language +Subtag: myk +Description: Mamara Senoufo +Added: 2009-07-29 +%% +Type: language +Subtag: myl +Description: Moma +Added: 2009-07-29 +%% +Type: language +Subtag: mym +Description: Me'en +Added: 2009-07-29 +%% +Type: language +Subtag: myn +Description: Mayan languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: myo +Description: Anfillo +Added: 2009-07-29 +%% +Type: language +Subtag: myp +Description: Pirahã +Added: 2009-07-29 +%% +Type: language +Subtag: myq +Description: Forest Maninka +Added: 2009-07-29 +Macrolanguage: man +%% +Type: language +Subtag: myr +Description: Muniche +Added: 2009-07-29 +%% +Type: language +Subtag: mys +Description: Mesmes +Added: 2009-07-29 +%% +Type: language +Subtag: myt +Description: Sangab Mandaya +Added: 2009-07-29 +Deprecated: 2010-03-11 +Preferred-Value: mry +%% +Type: language +Subtag: myu +Description: Mundurukú +Added: 2009-07-29 +%% +Type: language +Subtag: myv +Description: Erzya +Added: 2005-10-16 +%% +Type: language +Subtag: myw +Description: Muyuw +Added: 2009-07-29 +%% +Type: language +Subtag: myx +Description: Masaaba +Added: 2009-07-29 +%% +Type: language +Subtag: myy +Description: Macuna +Added: 2009-07-29 +%% +Type: language +Subtag: myz +Description: Classical Mandaic +Added: 2009-07-29 +%% +Type: language +Subtag: mza +Description: Santa María Zacatepec Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: mzb +Description: Tumzabt +Added: 2009-07-29 +%% +Type: language +Subtag: mzc +Description: Madagascar Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: mzd +Description: Malimba +Added: 2009-07-29 +%% +Type: language +Subtag: mze +Description: Morawa +Added: 2009-07-29 +%% +Type: language +Subtag: mzg +Description: Monastic Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: mzh +Description: Wichí Lhamtés Güisnay +Added: 2009-07-29 +%% +Type: language +Subtag: mzi +Description: Ixcatlán Mazatec +Added: 2009-07-29 +%% +Type: language +Subtag: mzj +Description: Manya +Added: 2009-07-29 +%% +Type: language +Subtag: mzk +Description: Nigeria Mambila +Added: 2009-07-29 +%% +Type: language +Subtag: mzl +Description: Mazatlán Mixe +Added: 2009-07-29 +%% +Type: language +Subtag: mzm +Description: Mumuye +Added: 2009-07-29 +%% +Type: language +Subtag: mzn +Description: Mazanderani +Added: 2009-07-29 +%% +Type: language +Subtag: mzo +Description: Matipuhy +Added: 2009-07-29 +%% +Type: language +Subtag: mzp +Description: Movima +Added: 2009-07-29 +%% +Type: language +Subtag: mzq +Description: Mori Atas +Added: 2009-07-29 +%% +Type: language +Subtag: mzr +Description: Marúbo +Added: 2009-07-29 +%% +Type: language +Subtag: mzs +Description: Macanese +Added: 2009-07-29 +%% +Type: language +Subtag: mzt +Description: Mintil +Added: 2009-07-29 +%% +Type: language +Subtag: mzu +Description: Inapang +Added: 2009-07-29 +%% +Type: language +Subtag: mzv +Description: Manza +Added: 2009-07-29 +%% +Type: language +Subtag: mzw +Description: Deg +Added: 2009-07-29 +%% +Type: language +Subtag: mzx +Description: Mawayana +Added: 2009-07-29 +%% +Type: language +Subtag: mzy +Description: Mozambican Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: mzz +Description: Maiadomu +Added: 2009-07-29 +%% +Type: language +Subtag: naa +Description: Namla +Added: 2009-07-29 +%% +Type: language +Subtag: nab +Description: Southern Nambikuára +Added: 2009-07-29 +%% +Type: language +Subtag: nac +Description: Narak +Added: 2009-07-29 +%% +Type: language +Subtag: nad +Description: Nijadali +Added: 2009-07-29 +%% +Type: language +Subtag: nae +Description: Naka'ela +Added: 2009-07-29 +%% +Type: language +Subtag: naf +Description: Nabak +Added: 2009-07-29 +%% +Type: language +Subtag: nag +Description: Naga Pidgin +Added: 2009-07-29 +%% +Type: language +Subtag: nah +Description: Nahuatl languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: nai +Description: North American Indian languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: naj +Description: Nalu +Added: 2009-07-29 +%% +Type: language +Subtag: nak +Description: Nakanai +Added: 2009-07-29 +%% +Type: language +Subtag: nal +Description: Nalik +Added: 2009-07-29 +%% +Type: language +Subtag: nam +Description: Ngan'gityemerri +Added: 2009-07-29 +%% +Type: language +Subtag: nan +Description: Min Nan Chinese +Added: 2009-07-29 +Macrolanguage: zh +%% +Type: language +Subtag: nao +Description: Naaba +Added: 2009-07-29 +%% +Type: language +Subtag: nap +Description: Neapolitan +Added: 2005-10-16 +%% +Type: language +Subtag: naq +Description: Nama (Namibia) +Added: 2009-07-29 +%% +Type: language +Subtag: nar +Description: Iguta +Added: 2009-07-29 +%% +Type: language +Subtag: nas +Description: Naasioi +Added: 2009-07-29 +%% +Type: language +Subtag: nat +Description: Hungworo +Added: 2009-07-29 +%% +Type: language +Subtag: naw +Description: Nawuri +Added: 2009-07-29 +%% +Type: language +Subtag: nax +Description: Nakwi +Added: 2009-07-29 +%% +Type: language +Subtag: nay +Description: Narrinyeri +Added: 2009-07-29 +%% +Type: language +Subtag: naz +Description: Coatepec Nahuatl +Added: 2009-07-29 +%% +Type: language +Subtag: nba +Description: Nyemba +Added: 2009-07-29 +%% +Type: language +Subtag: nbb +Description: Ndoe +Added: 2009-07-29 +%% +Type: language +Subtag: nbc +Description: Chang Naga +Added: 2009-07-29 +%% +Type: language +Subtag: nbd +Description: Ngbinda +Added: 2009-07-29 +%% +Type: language +Subtag: nbe +Description: Konyak Naga +Added: 2009-07-29 +%% +Type: language +Subtag: nbf +Description: Naxi +Added: 2009-07-29 +Deprecated: 2011-08-16 +Comments: see nru, nxq +%% +Type: language +Subtag: nbg +Description: Nagarchal +Added: 2009-07-29 +%% +Type: language +Subtag: nbh +Description: Ngamo +Added: 2009-07-29 +%% +Type: language +Subtag: nbi +Description: Mao Naga +Added: 2009-07-29 +%% +Type: language +Subtag: nbj +Description: Ngarinman +Added: 2009-07-29 +%% +Type: language +Subtag: nbk +Description: Nake +Added: 2009-07-29 +%% +Type: language +Subtag: nbm +Description: Ngbaka Ma'bo +Added: 2009-07-29 +%% +Type: language +Subtag: nbn +Description: Kuri +Added: 2009-07-29 +%% +Type: language +Subtag: nbo +Description: Nkukoli +Added: 2009-07-29 +%% +Type: language +Subtag: nbp +Description: Nnam +Added: 2009-07-29 +%% +Type: language +Subtag: nbq +Description: Nggem +Added: 2009-07-29 +%% +Type: language +Subtag: nbr +Description: Numana-Nunku-Gbantu-Numbu +Added: 2009-07-29 +%% +Type: language +Subtag: nbs +Description: Namibian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: nbt +Description: Na +Added: 2009-07-29 +%% +Type: language +Subtag: nbu +Description: Rongmei Naga +Added: 2009-07-29 +%% +Type: language +Subtag: nbv +Description: Ngamambo +Added: 2009-07-29 +%% +Type: language +Subtag: nbw +Description: Southern Ngbandi +Added: 2009-07-29 +%% +Type: language +Subtag: nbx +Description: Ngura +Added: 2009-07-29 +%% +Type: language +Subtag: nby +Description: Ningera +Added: 2009-07-29 +%% +Type: language +Subtag: nca +Description: Iyo +Added: 2009-07-29 +%% +Type: language +Subtag: ncb +Description: Central Nicobarese +Added: 2009-07-29 +%% +Type: language +Subtag: ncc +Description: Ponam +Added: 2009-07-29 +%% +Type: language +Subtag: ncd +Description: Nachering +Added: 2009-07-29 +%% +Type: language +Subtag: nce +Description: Yale +Added: 2009-07-29 +%% +Type: language +Subtag: ncf +Description: Notsi +Added: 2009-07-29 +%% +Type: language +Subtag: ncg +Description: Nisga'a +Added: 2009-07-29 +%% +Type: language +Subtag: nch +Description: Central Huasteca Nahuatl +Added: 2009-07-29 +%% +Type: language +Subtag: nci +Description: Classical Nahuatl +Added: 2009-07-29 +%% +Type: language +Subtag: ncj +Description: Northern Puebla Nahuatl +Added: 2009-07-29 +%% +Type: language +Subtag: nck +Description: Nakara +Added: 2009-07-29 +%% +Type: language +Subtag: ncl +Description: Michoacán Nahuatl +Added: 2009-07-29 +%% +Type: language +Subtag: ncm +Description: Nambo +Added: 2009-07-29 +%% +Type: language +Subtag: ncn +Description: Nauna +Added: 2009-07-29 +%% +Type: language +Subtag: nco +Description: Sibe +Added: 2009-07-29 +%% +Type: language +Subtag: ncp +Description: Ndaktup +Added: 2009-07-29 +%% +Type: language +Subtag: ncr +Description: Ncane +Added: 2009-07-29 +%% +Type: language +Subtag: ncs +Description: Nicaraguan Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: nct +Description: Chothe Naga +Added: 2009-07-29 +%% +Type: language +Subtag: ncu +Description: Chumburung +Added: 2009-07-29 +%% +Type: language +Subtag: ncx +Description: Central Puebla Nahuatl +Added: 2009-07-29 +%% +Type: language +Subtag: ncz +Description: Natchez +Added: 2009-07-29 +%% +Type: language +Subtag: nda +Description: Ndasa +Added: 2009-07-29 +%% +Type: language +Subtag: ndb +Description: Kenswei Nsei +Added: 2009-07-29 +%% +Type: language +Subtag: ndc +Description: Ndau +Added: 2009-07-29 +%% +Type: language +Subtag: ndd +Description: Nde-Nsele-Nta +Added: 2009-07-29 +%% +Type: language +Subtag: ndf +Description: Nadruvian +Added: 2009-07-29 +%% +Type: language +Subtag: ndg +Description: Ndengereko +Added: 2009-07-29 +%% +Type: language +Subtag: ndh +Description: Ndali +Added: 2009-07-29 +%% +Type: language +Subtag: ndi +Description: Samba Leko +Added: 2009-07-29 +%% +Type: language +Subtag: ndj +Description: Ndamba +Added: 2009-07-29 +%% +Type: language +Subtag: ndk +Description: Ndaka +Added: 2009-07-29 +%% +Type: language +Subtag: ndl +Description: Ndolo +Added: 2009-07-29 +%% +Type: language +Subtag: ndm +Description: Ndam +Added: 2009-07-29 +%% +Type: language +Subtag: ndn +Description: Ngundi +Added: 2009-07-29 +%% +Type: language +Subtag: ndp +Description: Ndo +Added: 2009-07-29 +%% +Type: language +Subtag: ndq +Description: Ndombe +Added: 2009-07-29 +%% +Type: language +Subtag: ndr +Description: Ndoola +Added: 2009-07-29 +%% +Type: language +Subtag: nds +Description: Low German +Description: Low Saxon +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: ndt +Description: Ndunga +Added: 2009-07-29 +%% +Type: language +Subtag: ndu +Description: Dugun +Added: 2009-07-29 +%% +Type: language +Subtag: ndv +Description: Ndut +Added: 2009-07-29 +%% +Type: language +Subtag: ndw +Description: Ndobo +Added: 2009-07-29 +%% +Type: language +Subtag: ndx +Description: Nduga +Added: 2009-07-29 +%% +Type: language +Subtag: ndy +Description: Lutos +Added: 2009-07-29 +%% +Type: language +Subtag: ndz +Description: Ndogo +Added: 2009-07-29 +%% +Type: language +Subtag: nea +Description: Eastern Ngad'a +Added: 2009-07-29 +%% +Type: language +Subtag: neb +Description: Toura (Côte d'Ivoire) +Added: 2009-07-29 +%% +Type: language +Subtag: nec +Description: Nedebang +Added: 2009-07-29 +%% +Type: language +Subtag: ned +Description: Nde-Gbite +Added: 2009-07-29 +%% +Type: language +Subtag: nee +Description: Nêlêmwa-Nixumwak +Added: 2009-07-29 +%% +Type: language +Subtag: nef +Description: Nefamese +Added: 2009-07-29 +%% +Type: language +Subtag: neg +Description: Negidal +Added: 2009-07-29 +%% +Type: language +Subtag: neh +Description: Nyenkha +Added: 2009-07-29 +%% +Type: language +Subtag: nei +Description: Neo-Hittite +Added: 2009-07-29 +%% +Type: language +Subtag: nej +Description: Neko +Added: 2009-07-29 +%% +Type: language +Subtag: nek +Description: Neku +Added: 2009-07-29 +%% +Type: language +Subtag: nem +Description: Nemi +Added: 2009-07-29 +%% +Type: language +Subtag: nen +Description: Nengone +Added: 2009-07-29 +%% +Type: language +Subtag: neo +Description: Ná-Meo +Added: 2009-07-29 +%% +Type: language +Subtag: neq +Description: North Central Mixe +Added: 2009-07-29 +%% +Type: language +Subtag: ner +Description: Yahadian +Added: 2009-07-29 +%% +Type: language +Subtag: nes +Description: Bhoti Kinnauri +Added: 2009-07-29 +%% +Type: language +Subtag: net +Description: Nete +Added: 2009-07-29 +%% +Type: language +Subtag: neu +Description: Neo +Added: 2012-08-12 +%% +Type: language +Subtag: nev +Description: Nyaheun +Added: 2009-07-29 +%% +Type: language +Subtag: new +Description: Newari +Description: Nepal Bhasa +Added: 2005-10-16 +%% +Type: language +Subtag: nex +Description: Neme +Added: 2009-07-29 +%% +Type: language +Subtag: ney +Description: Neyo +Added: 2009-07-29 +%% +Type: language +Subtag: nez +Description: Nez Perce +Added: 2009-07-29 +%% +Type: language +Subtag: nfa +Description: Dhao +Added: 2009-07-29 +%% +Type: language +Subtag: nfd +Description: Ahwai +Added: 2009-07-29 +%% +Type: language +Subtag: nfl +Description: Ayiwo +Description: Äiwoo +Added: 2009-07-29 +%% +Type: language +Subtag: nfr +Description: Nafaanra +Added: 2009-07-29 +%% +Type: language +Subtag: nfu +Description: Mfumte +Added: 2009-07-29 +%% +Type: language +Subtag: nga +Description: Ngbaka +Added: 2009-07-29 +%% +Type: language +Subtag: ngb +Description: Northern Ngbandi +Added: 2009-07-29 +%% +Type: language +Subtag: ngc +Description: Ngombe (Democratic Republic of Congo) +Added: 2009-07-29 +%% +Type: language +Subtag: ngd +Description: Ngando (Central African Republic) +Added: 2009-07-29 +%% +Type: language +Subtag: nge +Description: Ngemba +Added: 2009-07-29 +%% +Type: language +Subtag: ngf +Description: Trans-New Guinea languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: ngg +Description: Ngbaka Manza +Added: 2009-07-29 +%% +Type: language +Subtag: ngh +Description: N/u +Added: 2009-07-29 +%% +Type: language +Subtag: ngi +Description: Ngizim +Added: 2009-07-29 +%% +Type: language +Subtag: ngj +Description: Ngie +Added: 2009-07-29 +%% +Type: language +Subtag: ngk +Description: Ngalkbun +Added: 2009-07-29 +%% +Type: language +Subtag: ngl +Description: Lomwe +Added: 2009-07-29 +%% +Type: language +Subtag: ngm +Description: Ngatik Men's Creole +Added: 2009-07-29 +%% +Type: language +Subtag: ngn +Description: Ngwo +Added: 2009-07-29 +%% +Type: language +Subtag: ngo +Description: Ngoni +Added: 2009-07-29 +%% +Type: language +Subtag: ngp +Description: Ngulu +Added: 2009-07-29 +%% +Type: language +Subtag: ngq +Description: Ngurimi +Description: Ngoreme +Added: 2009-07-29 +%% +Type: language +Subtag: ngr +Description: Engdewu +Added: 2009-07-29 +%% +Type: language +Subtag: ngs +Description: Gvoko +Added: 2009-07-29 +%% +Type: language +Subtag: ngt +Description: Ngeq +Added: 2009-07-29 +%% +Type: language +Subtag: ngu +Description: Guerrero Nahuatl +Added: 2009-07-29 +%% +Type: language +Subtag: ngv +Description: Nagumi +Added: 2009-07-29 +%% +Type: language +Subtag: ngw +Description: Ngwaba +Added: 2009-07-29 +%% +Type: language +Subtag: ngx +Description: Nggwahyi +Added: 2009-07-29 +%% +Type: language +Subtag: ngy +Description: Tibea +Added: 2009-07-29 +%% +Type: language +Subtag: ngz +Description: Ngungwel +Added: 2009-07-29 +%% +Type: language +Subtag: nha +Description: Nhanda +Added: 2009-07-29 +%% +Type: language +Subtag: nhb +Description: Beng +Added: 2009-07-29 +%% +Type: language +Subtag: nhc +Description: Tabasco Nahuatl +Added: 2009-07-29 +%% +Type: language +Subtag: nhd +Description: Chiripá +Description: Ava Guaraní +Added: 2009-07-29 +Macrolanguage: gn +%% +Type: language +Subtag: nhe +Description: Eastern Huasteca Nahuatl +Added: 2009-07-29 +%% +Type: language +Subtag: nhf +Description: Nhuwala +Added: 2009-07-29 +%% +Type: language +Subtag: nhg +Description: Tetelcingo Nahuatl +Added: 2009-07-29 +%% +Type: language +Subtag: nhh +Description: Nahari +Added: 2009-07-29 +%% +Type: language +Subtag: nhi +Description: Zacatlán-Ahuacatlán-Tepetzintla Nahuatl +Added: 2009-07-29 +%% +Type: language +Subtag: nhk +Description: Isthmus-Cosoleacaque Nahuatl +Added: 2009-07-29 +%% +Type: language +Subtag: nhm +Description: Morelos Nahuatl +Added: 2009-07-29 +%% +Type: language +Subtag: nhn +Description: Central Nahuatl +Added: 2009-07-29 +%% +Type: language +Subtag: nho +Description: Takuu +Added: 2009-07-29 +%% +Type: language +Subtag: nhp +Description: Isthmus-Pajapan Nahuatl +Added: 2009-07-29 +%% +Type: language +Subtag: nhq +Description: Huaxcaleca Nahuatl +Added: 2009-07-29 +%% +Type: language +Subtag: nhr +Description: Naro +Added: 2009-07-29 +%% +Type: language +Subtag: nht +Description: Ometepec Nahuatl +Added: 2009-07-29 +%% +Type: language +Subtag: nhu +Description: Noone +Added: 2009-07-29 +%% +Type: language +Subtag: nhv +Description: Temascaltepec Nahuatl +Added: 2009-07-29 +%% +Type: language +Subtag: nhw +Description: Western Huasteca Nahuatl +Added: 2009-07-29 +%% +Type: language +Subtag: nhx +Description: Isthmus-Mecayapan Nahuatl +Added: 2009-07-29 +%% +Type: language +Subtag: nhy +Description: Northern Oaxaca Nahuatl +Added: 2009-07-29 +%% +Type: language +Subtag: nhz +Description: Santa María La Alta Nahuatl +Added: 2009-07-29 +%% +Type: language +Subtag: nia +Description: Nias +Added: 2005-10-16 +%% +Type: language +Subtag: nib +Description: Nakame +Added: 2009-07-29 +%% +Type: language +Subtag: nic +Description: Niger-Kordofanian languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: nid +Description: Ngandi +Added: 2009-07-29 +%% +Type: language +Subtag: nie +Description: Niellim +Added: 2009-07-29 +%% +Type: language +Subtag: nif +Description: Nek +Added: 2009-07-29 +%% +Type: language +Subtag: nig +Description: Ngalakan +Added: 2009-07-29 +%% +Type: language +Subtag: nih +Description: Nyiha (Tanzania) +Added: 2009-07-29 +%% +Type: language +Subtag: nii +Description: Nii +Added: 2009-07-29 +%% +Type: language +Subtag: nij +Description: Ngaju +Added: 2009-07-29 +%% +Type: language +Subtag: nik +Description: Southern Nicobarese +Added: 2009-07-29 +%% +Type: language +Subtag: nil +Description: Nila +Added: 2009-07-29 +%% +Type: language +Subtag: nim +Description: Nilamba +Added: 2009-07-29 +%% +Type: language +Subtag: nin +Description: Ninzo +Added: 2009-07-29 +%% +Type: language +Subtag: nio +Description: Nganasan +Added: 2009-07-29 +%% +Type: language +Subtag: niq +Description: Nandi +Added: 2009-07-29 +Macrolanguage: kln +%% +Type: language +Subtag: nir +Description: Nimboran +Added: 2009-07-29 +%% +Type: language +Subtag: nis +Description: Nimi +Added: 2009-07-29 +%% +Type: language +Subtag: nit +Description: Southeastern Kolami +Added: 2009-07-29 +%% +Type: language +Subtag: niu +Description: Niuean +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: niv +Description: Gilyak +Added: 2009-07-29 +%% +Type: language +Subtag: niw +Description: Nimo +Added: 2009-07-29 +%% +Type: language +Subtag: nix +Description: Hema +Added: 2009-07-29 +%% +Type: language +Subtag: niy +Description: Ngiti +Added: 2009-07-29 +%% +Type: language +Subtag: niz +Description: Ningil +Added: 2009-07-29 +%% +Type: language +Subtag: nja +Description: Nzanyi +Added: 2009-07-29 +%% +Type: language +Subtag: njb +Description: Nocte Naga +Added: 2009-07-29 +%% +Type: language +Subtag: njd +Description: Ndonde Hamba +Added: 2009-07-29 +%% +Type: language +Subtag: njh +Description: Lotha Naga +Added: 2009-07-29 +%% +Type: language +Subtag: nji +Description: Gudanji +Added: 2009-07-29 +%% +Type: language +Subtag: njj +Description: Njen +Added: 2009-07-29 +%% +Type: language +Subtag: njl +Description: Njalgulgule +Added: 2009-07-29 +%% +Type: language +Subtag: njm +Description: Angami Naga +Added: 2009-07-29 +%% +Type: language +Subtag: njn +Description: Liangmai Naga +Added: 2009-07-29 +%% +Type: language +Subtag: njo +Description: Ao Naga +Added: 2009-07-29 +%% +Type: language +Subtag: njr +Description: Njerep +Added: 2009-07-29 +%% +Type: language +Subtag: njs +Description: Nisa +Added: 2009-07-29 +%% +Type: language +Subtag: njt +Description: Ndyuka-Trio Pidgin +Added: 2009-07-29 +%% +Type: language +Subtag: nju +Description: Ngadjunmaya +Added: 2009-07-29 +%% +Type: language +Subtag: njx +Description: Kunyi +Added: 2009-07-29 +%% +Type: language +Subtag: njy +Description: Njyem +Added: 2009-07-29 +%% +Type: language +Subtag: njz +Description: Nyishi +Added: 2012-08-12 +%% +Type: language +Subtag: nka +Description: Nkoya +Added: 2009-07-29 +%% +Type: language +Subtag: nkb +Description: Khoibu Naga +Added: 2009-07-29 +%% +Type: language +Subtag: nkc +Description: Nkongho +Added: 2009-07-29 +%% +Type: language +Subtag: nkd +Description: Koireng +Added: 2009-07-29 +%% +Type: language +Subtag: nke +Description: Duke +Added: 2009-07-29 +%% +Type: language +Subtag: nkf +Description: Inpui Naga +Added: 2009-07-29 +%% +Type: language +Subtag: nkg +Description: Nekgini +Added: 2009-07-29 +%% +Type: language +Subtag: nkh +Description: Khezha Naga +Added: 2009-07-29 +%% +Type: language +Subtag: nki +Description: Thangal Naga +Added: 2009-07-29 +%% +Type: language +Subtag: nkj +Description: Nakai +Added: 2009-07-29 +%% +Type: language +Subtag: nkk +Description: Nokuku +Added: 2009-07-29 +%% +Type: language +Subtag: nkm +Description: Namat +Added: 2009-07-29 +%% +Type: language +Subtag: nkn +Description: Nkangala +Added: 2009-07-29 +%% +Type: language +Subtag: nko +Description: Nkonya +Added: 2009-07-29 +%% +Type: language +Subtag: nkp +Description: Niuatoputapu +Added: 2009-07-29 +%% +Type: language +Subtag: nkq +Description: Nkami +Added: 2010-04-16 +%% +Type: language +Subtag: nkr +Description: Nukuoro +Added: 2009-07-29 +%% +Type: language +Subtag: nks +Description: North Asmat +Added: 2009-07-29 +%% +Type: language +Subtag: nkt +Description: Nyika (Tanzania) +Added: 2009-07-29 +%% +Type: language +Subtag: nku +Description: Bouna Kulango +Added: 2009-07-29 +%% +Type: language +Subtag: nkv +Description: Nyika (Malawi and Zambia) +Added: 2009-07-29 +%% +Type: language +Subtag: nkw +Description: Nkutu +Added: 2009-07-29 +%% +Type: language +Subtag: nkx +Description: Nkoroo +Added: 2009-07-29 +%% +Type: language +Subtag: nkz +Description: Nkari +Added: 2009-07-29 +%% +Type: language +Subtag: nla +Description: Ngombale +Added: 2009-07-29 +%% +Type: language +Subtag: nlc +Description: Nalca +Added: 2009-07-29 +%% +Type: language +Subtag: nle +Description: East Nyala +Added: 2009-07-29 +Macrolanguage: luy +%% +Type: language +Subtag: nlg +Description: Gela +Added: 2009-07-29 +%% +Type: language +Subtag: nli +Description: Grangali +Added: 2009-07-29 +%% +Type: language +Subtag: nlj +Description: Nyali +Added: 2009-07-29 +%% +Type: language +Subtag: nlk +Description: Ninia Yali +Added: 2009-07-29 +%% +Type: language +Subtag: nll +Description: Nihali +Added: 2009-07-29 +%% +Type: language +Subtag: nln +Description: Durango Nahuatl +Added: 2009-07-29 +Deprecated: 2012-08-12 +Comments: see azd, azn +%% +Type: language +Subtag: nlo +Description: Ngul +Added: 2009-07-29 +%% +Type: language +Subtag: nlr +Description: Ngarla +Added: 2009-07-29 +%% +Type: language +Subtag: nlu +Description: Nchumbulu +Added: 2009-07-29 +%% +Type: language +Subtag: nlv +Description: Orizaba Nahuatl +Added: 2009-07-29 +%% +Type: language +Subtag: nlx +Description: Nahali +Added: 2009-07-29 +%% +Type: language +Subtag: nly +Description: Nyamal +Added: 2009-07-29 +%% +Type: language +Subtag: nlz +Description: Nalögo +Added: 2009-07-29 +%% +Type: language +Subtag: nma +Description: Maram Naga +Added: 2009-07-29 +%% +Type: language +Subtag: nmb +Description: Big Nambas +Description: V'ënen Taut +Added: 2009-07-29 +%% +Type: language +Subtag: nmc +Description: Ngam +Added: 2009-07-29 +%% +Type: language +Subtag: nmd +Description: Ndumu +Added: 2009-07-29 +%% +Type: language +Subtag: nme +Description: Mzieme Naga +Added: 2009-07-29 +%% +Type: language +Subtag: nmf +Description: Tangkhul Naga (India) +Added: 2009-07-29 +Comments: see ntx +%% +Type: language +Subtag: nmg +Description: Kwasio +Added: 2009-07-29 +%% +Type: language +Subtag: nmh +Description: Monsang Naga +Added: 2009-07-29 +%% +Type: language +Subtag: nmi +Description: Nyam +Added: 2009-07-29 +%% +Type: language +Subtag: nmj +Description: Ngombe (Central African Republic) +Added: 2009-07-29 +%% +Type: language +Subtag: nmk +Description: Namakura +Added: 2009-07-29 +%% +Type: language +Subtag: nml +Description: Ndemli +Added: 2009-07-29 +%% +Type: language +Subtag: nmm +Description: Manangba +Added: 2009-07-29 +%% +Type: language +Subtag: nmn +Description: !Xóõ +Added: 2009-07-29 +%% +Type: language +Subtag: nmo +Description: Moyon Naga +Added: 2009-07-29 +%% +Type: language +Subtag: nmp +Description: Nimanbur +Added: 2009-07-29 +%% +Type: language +Subtag: nmq +Description: Nambya +Added: 2009-07-29 +%% +Type: language +Subtag: nmr +Description: Nimbari +Added: 2009-07-29 +%% +Type: language +Subtag: nms +Description: Letemboi +Added: 2009-07-29 +%% +Type: language +Subtag: nmt +Description: Namonuito +Added: 2009-07-29 +%% +Type: language +Subtag: nmu +Description: Northeast Maidu +Added: 2009-07-29 +%% +Type: language +Subtag: nmv +Description: Ngamini +Added: 2009-07-29 +%% +Type: language +Subtag: nmw +Description: Nimoa +Added: 2009-07-29 +%% +Type: language +Subtag: nmx +Description: Nama (Papua New Guinea) +Added: 2009-07-29 +%% +Type: language +Subtag: nmy +Description: Namuyi +Added: 2009-07-29 +%% +Type: language +Subtag: nmz +Description: Nawdm +Added: 2009-07-29 +%% +Type: language +Subtag: nna +Description: Nyangumarta +Added: 2009-07-29 +%% +Type: language +Subtag: nnb +Description: Nande +Added: 2009-07-29 +%% +Type: language +Subtag: nnc +Description: Nancere +Added: 2009-07-29 +%% +Type: language +Subtag: nnd +Description: West Ambae +Added: 2009-07-29 +%% +Type: language +Subtag: nne +Description: Ngandyera +Added: 2009-07-29 +%% +Type: language +Subtag: nnf +Description: Ngaing +Added: 2009-07-29 +%% +Type: language +Subtag: nng +Description: Maring Naga +Added: 2009-07-29 +%% +Type: language +Subtag: nnh +Description: Ngiemboon +Added: 2009-07-29 +%% +Type: language +Subtag: nni +Description: North Nuaulu +Added: 2009-07-29 +%% +Type: language +Subtag: nnj +Description: Nyangatom +Added: 2009-07-29 +%% +Type: language +Subtag: nnk +Description: Nankina +Added: 2009-07-29 +%% +Type: language +Subtag: nnl +Description: Northern Rengma Naga +Added: 2009-07-29 +%% +Type: language +Subtag: nnm +Description: Namia +Added: 2009-07-29 +%% +Type: language +Subtag: nnn +Description: Ngete +Added: 2009-07-29 +%% +Type: language +Subtag: nnp +Description: Wancho Naga +Added: 2009-07-29 +%% +Type: language +Subtag: nnq +Description: Ngindo +Added: 2009-07-29 +%% +Type: language +Subtag: nnr +Description: Narungga +Added: 2009-07-29 +%% +Type: language +Subtag: nns +Description: Ningye +Added: 2009-07-29 +%% +Type: language +Subtag: nnt +Description: Nanticoke +Added: 2009-07-29 +%% +Type: language +Subtag: nnu +Description: Dwang +Added: 2009-07-29 +%% +Type: language +Subtag: nnv +Description: Nugunu (Australia) +Added: 2009-07-29 +%% +Type: language +Subtag: nnw +Description: Southern Nuni +Added: 2009-07-29 +%% +Type: language +Subtag: nnx +Description: Ngong +Added: 2009-07-29 +%% +Type: language +Subtag: nny +Description: Nyangga +Added: 2009-07-29 +%% +Type: language +Subtag: nnz +Description: Nda'nda' +Added: 2009-07-29 +%% +Type: language +Subtag: noa +Description: Woun Meu +Added: 2009-07-29 +%% +Type: language +Subtag: noc +Description: Nuk +Added: 2009-07-29 +%% +Type: language +Subtag: nod +Description: Northern Thai +Added: 2009-07-29 +%% +Type: language +Subtag: noe +Description: Nimadi +Added: 2009-07-29 +%% +Type: language +Subtag: nof +Description: Nomane +Added: 2009-07-29 +%% +Type: language +Subtag: nog +Description: Nogai +Added: 2005-10-16 +%% +Type: language +Subtag: noh +Description: Nomu +Added: 2009-07-29 +%% +Type: language +Subtag: noi +Description: Noiri +Added: 2009-07-29 +%% +Type: language +Subtag: noj +Description: Nonuya +Added: 2010-03-11 +%% +Type: language +Subtag: nok +Description: Nooksack +Added: 2009-07-29 +%% +Type: language +Subtag: nom +Description: Nocamán +Added: 2009-07-29 +%% +Type: language +Subtag: non +Description: Old Norse +Added: 2005-10-16 +%% +Type: language +Subtag: noo +Description: Nootka +Added: 2009-07-29 +Deprecated: 2011-08-16 +Comments: see dtd, nuk +%% +Type: language +Subtag: nop +Description: Numanggang +Added: 2009-07-29 +%% +Type: language +Subtag: noq +Description: Ngongo +Added: 2009-07-29 +%% +Type: language +Subtag: nos +Description: Eastern Nisu +Added: 2009-07-29 +%% +Type: language +Subtag: not +Description: Nomatsiguenga +Added: 2009-07-29 +%% +Type: language +Subtag: nou +Description: Ewage-Notu +Added: 2009-07-29 +%% +Type: language +Subtag: nov +Description: Novial +Added: 2009-07-29 +%% +Type: language +Subtag: now +Description: Nyambo +Added: 2009-07-29 +%% +Type: language +Subtag: noy +Description: Noy +Added: 2009-07-29 +%% +Type: language +Subtag: noz +Description: Nayi +Added: 2009-07-29 +%% +Type: language +Subtag: npa +Description: Nar Phu +Added: 2009-07-29 +%% +Type: language +Subtag: npb +Description: Nupbikha +Added: 2009-07-29 +%% +Type: language +Subtag: npg +Description: Ponyo-Gongwang Naga +Added: 2012-08-12 +%% +Type: language +Subtag: nph +Description: Phom Naga +Added: 2009-07-29 +%% +Type: language +Subtag: npi +Description: Nepali (individual language) +Added: 2012-08-12 +Macrolanguage: ne +%% +Type: language +Subtag: npl +Description: Southeastern Puebla Nahuatl +Added: 2009-07-29 +%% +Type: language +Subtag: npn +Description: Mondropolon +Added: 2009-07-29 +%% +Type: language +Subtag: npo +Description: Pochuri Naga +Added: 2009-07-29 +%% +Type: language +Subtag: nps +Description: Nipsan +Added: 2009-07-29 +%% +Type: language +Subtag: npu +Description: Puimei Naga +Added: 2009-07-29 +%% +Type: language +Subtag: npy +Description: Napu +Added: 2009-07-29 +%% +Type: language +Subtag: nqg +Description: Southern Nago +Added: 2009-07-29 +%% +Type: language +Subtag: nqk +Description: Kura Ede Nago +Added: 2009-07-29 +%% +Type: language +Subtag: nqm +Description: Ndom +Added: 2009-07-29 +%% +Type: language +Subtag: nqn +Description: Nen +Added: 2009-07-29 +%% +Type: language +Subtag: nqo +Description: N'Ko +Description: N’Ko +Added: 2006-06-05 +Suppress-Script: Nkoo +%% +Type: language +Subtag: nqy +Description: Akyaung Ari Naga +Added: 2012-08-12 +%% +Type: language +Subtag: nra +Description: Ngom +Added: 2009-07-29 +%% +Type: language +Subtag: nrb +Description: Nara +Added: 2009-07-29 +%% +Type: language +Subtag: nrc +Description: Noric +Added: 2009-07-29 +%% +Type: language +Subtag: nre +Description: Southern Rengma Naga +Added: 2009-07-29 +%% +Type: language +Subtag: nrg +Description: Narango +Added: 2009-07-29 +%% +Type: language +Subtag: nri +Description: Chokri Naga +Added: 2009-07-29 +%% +Type: language +Subtag: nrl +Description: Ngarluma +Added: 2009-07-29 +%% +Type: language +Subtag: nrm +Description: Narom +Added: 2009-07-29 +%% +Type: language +Subtag: nrn +Description: Norn +Added: 2009-07-29 +%% +Type: language +Subtag: nrp +Description: North Picene +Added: 2009-07-29 +%% +Type: language +Subtag: nrr +Description: Norra +Added: 2009-07-29 +%% +Type: language +Subtag: nrt +Description: Northern Kalapuya +Added: 2009-07-29 +%% +Type: language +Subtag: nru +Description: Narua +Added: 2011-08-16 +%% +Type: language +Subtag: nrx +Description: Ngurmbur +Added: 2009-07-29 +%% +Type: language +Subtag: nrz +Description: Lala +Added: 2009-07-29 +%% +Type: language +Subtag: nsa +Description: Sangtam Naga +Added: 2009-07-29 +%% +Type: language +Subtag: nsc +Description: Nshi +Added: 2009-07-29 +%% +Type: language +Subtag: nsd +Description: Southern Nisu +Added: 2009-07-29 +%% +Type: language +Subtag: nse +Description: Nsenga +Added: 2009-07-29 +%% +Type: language +Subtag: nsf +Description: Northwestern Nisu +Added: 2012-08-12 +%% +Type: language +Subtag: nsg +Description: Ngasa +Added: 2009-07-29 +%% +Type: language +Subtag: nsh +Description: Ngoshie +Added: 2009-07-29 +%% +Type: language +Subtag: nsi +Description: Nigerian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: nsk +Description: Naskapi +Added: 2009-07-29 +%% +Type: language +Subtag: nsl +Description: Norwegian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: nsm +Description: Sumi Naga +Added: 2009-07-29 +%% +Type: language +Subtag: nsn +Description: Nehan +Added: 2009-07-29 +%% +Type: language +Subtag: nso +Description: Pedi +Description: Northern Sotho +Description: Sepedi +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: nsp +Description: Nepalese Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: nsq +Description: Northern Sierra Miwok +Added: 2009-07-29 +%% +Type: language +Subtag: nsr +Description: Maritime Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: nss +Description: Nali +Added: 2009-07-29 +%% +Type: language +Subtag: nst +Description: Tase Naga +Added: 2009-07-29 +%% +Type: language +Subtag: nsu +Description: Sierra Negra Nahuatl +Added: 2009-07-29 +%% +Type: language +Subtag: nsv +Description: Southwestern Nisu +Added: 2009-07-29 +%% +Type: language +Subtag: nsw +Description: Navut +Added: 2009-07-29 +%% +Type: language +Subtag: nsx +Description: Nsongo +Added: 2009-07-29 +%% +Type: language +Subtag: nsy +Description: Nasal +Added: 2009-07-29 +%% +Type: language +Subtag: nsz +Description: Nisenan +Added: 2009-07-29 +%% +Type: language +Subtag: nte +Description: Nathembo +Added: 2009-07-29 +%% +Type: language +Subtag: nti +Description: Natioro +Added: 2009-07-29 +%% +Type: language +Subtag: ntj +Description: Ngaanyatjarra +Added: 2009-07-29 +%% +Type: language +Subtag: ntk +Description: Ikoma-Nata-Isenye +Added: 2009-07-29 +%% +Type: language +Subtag: ntm +Description: Nateni +Added: 2009-07-29 +%% +Type: language +Subtag: nto +Description: Ntomba +Added: 2009-07-29 +%% +Type: language +Subtag: ntp +Description: Northern Tepehuan +Added: 2009-07-29 +%% +Type: language +Subtag: ntr +Description: Delo +Added: 2009-07-29 +%% +Type: language +Subtag: nts +Description: Natagaimas +Added: 2009-07-29 +%% +Type: language +Subtag: ntu +Description: Natügu +Added: 2009-07-29 +%% +Type: language +Subtag: ntw +Description: Nottoway +Added: 2009-07-29 +%% +Type: language +Subtag: ntx +Description: Tangkhul Naga (Myanmar) +Added: 2012-08-12 +Comments: see nmf +%% +Type: language +Subtag: nty +Description: Mantsi +Added: 2009-07-29 +%% +Type: language +Subtag: ntz +Description: Natanzi +Added: 2009-07-29 +%% +Type: language +Subtag: nua +Description: Yuaga +Added: 2009-07-29 +%% +Type: language +Subtag: nub +Description: Nubian languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: nuc +Description: Nukuini +Added: 2009-07-29 +%% +Type: language +Subtag: nud +Description: Ngala +Added: 2009-07-29 +%% +Type: language +Subtag: nue +Description: Ngundu +Added: 2009-07-29 +%% +Type: language +Subtag: nuf +Description: Nusu +Added: 2009-07-29 +%% +Type: language +Subtag: nug +Description: Nungali +Added: 2009-07-29 +%% +Type: language +Subtag: nuh +Description: Ndunda +Added: 2009-07-29 +%% +Type: language +Subtag: nui +Description: Ngumbi +Added: 2009-07-29 +%% +Type: language +Subtag: nuj +Description: Nyole +Added: 2009-07-29 +%% +Type: language +Subtag: nuk +Description: Nuu-chah-nulth +Description: Nuuchahnulth +Added: 2011-08-16 +%% +Type: language +Subtag: nul +Description: Nusa Laut +Added: 2009-07-29 +%% +Type: language +Subtag: num +Description: Niuafo'ou +Added: 2009-07-29 +%% +Type: language +Subtag: nun +Description: Anong +Added: 2009-07-29 +%% +Type: language +Subtag: nuo +Description: Nguôn +Added: 2009-07-29 +%% +Type: language +Subtag: nup +Description: Nupe-Nupe-Tako +Added: 2009-07-29 +%% +Type: language +Subtag: nuq +Description: Nukumanu +Added: 2009-07-29 +%% +Type: language +Subtag: nur +Description: Nukuria +Added: 2009-07-29 +%% +Type: language +Subtag: nus +Description: Nuer +Added: 2009-07-29 +%% +Type: language +Subtag: nut +Description: Nung (Viet Nam) +Added: 2009-07-29 +%% +Type: language +Subtag: nuu +Description: Ngbundu +Added: 2009-07-29 +%% +Type: language +Subtag: nuv +Description: Northern Nuni +Added: 2009-07-29 +%% +Type: language +Subtag: nuw +Description: Nguluwan +Added: 2009-07-29 +%% +Type: language +Subtag: nux +Description: Mehek +Added: 2009-07-29 +%% +Type: language +Subtag: nuy +Description: Nunggubuyu +Added: 2009-07-29 +%% +Type: language +Subtag: nuz +Description: Tlamacazapa Nahuatl +Added: 2009-07-29 +%% +Type: language +Subtag: nvh +Description: Nasarian +Added: 2009-07-29 +%% +Type: language +Subtag: nvm +Description: Namiae +Added: 2009-07-29 +%% +Type: language +Subtag: nvo +Description: Nyokon +Added: 2012-08-12 +%% +Type: language +Subtag: nwa +Description: Nawathinehena +Added: 2009-07-29 +%% +Type: language +Subtag: nwb +Description: Nyabwa +Added: 2009-07-29 +%% +Type: language +Subtag: nwc +Description: Classical Newari +Description: Classical Nepal Bhasa +Description: Old Newari +Added: 2005-10-16 +%% +Type: language +Subtag: nwe +Description: Ngwe +Added: 2009-07-29 +%% +Type: language +Subtag: nwg +Description: Ngayawung +Added: 2012-08-12 +%% +Type: language +Subtag: nwi +Description: Southwest Tanna +Added: 2009-07-29 +%% +Type: language +Subtag: nwm +Description: Nyamusa-Molo +Added: 2009-07-29 +%% +Type: language +Subtag: nwo +Description: Nauo +Added: 2012-08-12 +%% +Type: language +Subtag: nwr +Description: Nawaru +Added: 2009-07-29 +%% +Type: language +Subtag: nwx +Description: Middle Newar +Added: 2009-07-29 +%% +Type: language +Subtag: nwy +Description: Nottoway-Meherrin +Added: 2009-07-29 +%% +Type: language +Subtag: nxa +Description: Nauete +Added: 2009-07-29 +%% +Type: language +Subtag: nxd +Description: Ngando (Democratic Republic of Congo) +Added: 2009-07-29 +%% +Type: language +Subtag: nxe +Description: Nage +Added: 2009-07-29 +%% +Type: language +Subtag: nxg +Description: Ngad'a +Added: 2009-07-29 +%% +Type: language +Subtag: nxi +Description: Nindi +Added: 2009-07-29 +%% +Type: language +Subtag: nxk +Description: Koki Naga +Added: 2012-08-12 +%% +Type: language +Subtag: nxl +Description: South Nuaulu +Added: 2009-07-29 +%% +Type: language +Subtag: nxm +Description: Numidian +Added: 2009-07-29 +%% +Type: language +Subtag: nxn +Description: Ngawun +Added: 2009-07-29 +%% +Type: language +Subtag: nxq +Description: Naxi +Added: 2011-08-16 +%% +Type: language +Subtag: nxr +Description: Ninggerum +Added: 2009-07-29 +%% +Type: language +Subtag: nxu +Description: Narau +Added: 2009-07-29 +%% +Type: language +Subtag: nxx +Description: Nafri +Added: 2009-07-29 +%% +Type: language +Subtag: nyb +Description: Nyangbo +Added: 2009-07-29 +%% +Type: language +Subtag: nyc +Description: Nyanga-li +Added: 2009-07-29 +%% +Type: language +Subtag: nyd +Description: Nyore +Description: Olunyole +Added: 2009-07-29 +Macrolanguage: luy +%% +Type: language +Subtag: nye +Description: Nyengo +Added: 2009-07-29 +%% +Type: language +Subtag: nyf +Description: Giryama +Description: Kigiryama +Added: 2009-07-29 +%% +Type: language +Subtag: nyg +Description: Nyindu +Added: 2009-07-29 +%% +Type: language +Subtag: nyh +Description: Nyigina +Added: 2009-07-29 +%% +Type: language +Subtag: nyi +Description: Ama (Sudan) +Added: 2009-07-29 +%% +Type: language +Subtag: nyj +Description: Nyanga +Added: 2009-07-29 +%% +Type: language +Subtag: nyk +Description: Nyaneka +Added: 2009-07-29 +%% +Type: language +Subtag: nyl +Description: Nyeu +Added: 2009-07-29 +%% +Type: language +Subtag: nym +Description: Nyamwezi +Added: 2005-10-16 +%% +Type: language +Subtag: nyn +Description: Nyankole +Added: 2005-10-16 +%% +Type: language +Subtag: nyo +Description: Nyoro +Added: 2005-10-16 +%% +Type: language +Subtag: nyp +Description: Nyang'i +Added: 2009-07-29 +%% +Type: language +Subtag: nyq +Description: Nayini +Added: 2009-07-29 +%% +Type: language +Subtag: nyr +Description: Nyiha (Malawi) +Added: 2009-07-29 +%% +Type: language +Subtag: nys +Description: Nyunga +Added: 2009-07-29 +%% +Type: language +Subtag: nyt +Description: Nyawaygi +Added: 2009-07-29 +%% +Type: language +Subtag: nyu +Description: Nyungwe +Added: 2009-07-29 +%% +Type: language +Subtag: nyv +Description: Nyulnyul +Added: 2009-07-29 +%% +Type: language +Subtag: nyw +Description: Nyaw +Added: 2009-07-29 +%% +Type: language +Subtag: nyx +Description: Nganyaywana +Added: 2009-07-29 +%% +Type: language +Subtag: nyy +Description: Nyakyusa-Ngonde +Added: 2009-07-29 +%% +Type: language +Subtag: nza +Description: Tigon Mbembe +Added: 2009-07-29 +%% +Type: language +Subtag: nzb +Description: Njebi +Added: 2009-07-29 +%% +Type: language +Subtag: nzi +Description: Nzima +Added: 2005-10-16 +%% +Type: language +Subtag: nzk +Description: Nzakara +Added: 2009-07-29 +%% +Type: language +Subtag: nzm +Description: Zeme Naga +Added: 2009-07-29 +%% +Type: language +Subtag: nzs +Description: New Zealand Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: nzu +Description: Teke-Nzikou +Added: 2009-07-29 +%% +Type: language +Subtag: nzy +Description: Nzakambay +Added: 2009-07-29 +%% +Type: language +Subtag: nzz +Description: Nanga Dama Dogon +Added: 2010-03-11 +%% +Type: language +Subtag: oaa +Description: Orok +Added: 2009-07-29 +%% +Type: language +Subtag: oac +Description: Oroch +Added: 2009-07-29 +%% +Type: language +Subtag: oar +Description: Old Aramaic (up to 700 BCE) +Description: Ancient Aramaic (up to 700 BCE) +Added: 2009-07-29 +%% +Type: language +Subtag: oav +Description: Old Avar +Added: 2009-07-29 +%% +Type: language +Subtag: obi +Description: Obispeño +Added: 2009-07-29 +%% +Type: language +Subtag: obk +Description: Southern Bontok +Added: 2010-03-11 +Macrolanguage: bnc +%% +Type: language +Subtag: obl +Description: Oblo +Added: 2009-07-29 +%% +Type: language +Subtag: obm +Description: Moabite +Added: 2009-07-29 +%% +Type: language +Subtag: obo +Description: Obo Manobo +Added: 2009-07-29 +%% +Type: language +Subtag: obr +Description: Old Burmese +Added: 2009-07-29 +%% +Type: language +Subtag: obt +Description: Old Breton +Added: 2009-07-29 +%% +Type: language +Subtag: obu +Description: Obulom +Added: 2009-07-29 +%% +Type: language +Subtag: oca +Description: Ocaina +Added: 2009-07-29 +%% +Type: language +Subtag: och +Description: Old Chinese +Added: 2009-07-29 +%% +Type: language +Subtag: oco +Description: Old Cornish +Added: 2009-07-29 +%% +Type: language +Subtag: ocu +Description: Atzingo Matlatzinca +Added: 2009-07-29 +%% +Type: language +Subtag: oda +Description: Odut +Added: 2009-07-29 +%% +Type: language +Subtag: odk +Description: Od +Added: 2009-07-29 +%% +Type: language +Subtag: odt +Description: Old Dutch +Added: 2009-07-29 +%% +Type: language +Subtag: odu +Description: Odual +Added: 2009-07-29 +%% +Type: language +Subtag: ofo +Description: Ofo +Added: 2009-07-29 +%% +Type: language +Subtag: ofs +Description: Old Frisian +Added: 2009-07-29 +%% +Type: language +Subtag: ofu +Description: Efutop +Added: 2009-07-29 +%% +Type: language +Subtag: ogb +Description: Ogbia +Added: 2009-07-29 +%% +Type: language +Subtag: ogc +Description: Ogbah +Added: 2009-07-29 +%% +Type: language +Subtag: oge +Description: Old Georgian +Added: 2009-07-29 +%% +Type: language +Subtag: ogg +Description: Ogbogolo +Added: 2009-07-29 +%% +Type: language +Subtag: ogo +Description: Khana +Added: 2009-07-29 +%% +Type: language +Subtag: ogu +Description: Ogbronuagum +Added: 2009-07-29 +%% +Type: language +Subtag: oht +Description: Old Hittite +Added: 2009-07-29 +%% +Type: language +Subtag: ohu +Description: Old Hungarian +Added: 2009-07-29 +%% +Type: language +Subtag: oia +Description: Oirata +Added: 2009-07-29 +%% +Type: language +Subtag: oin +Description: Inebu One +Added: 2009-07-29 +%% +Type: language +Subtag: ojb +Description: Northwestern Ojibwa +Added: 2009-07-29 +Macrolanguage: oj +%% +Type: language +Subtag: ojc +Description: Central Ojibwa +Added: 2009-07-29 +Macrolanguage: oj +%% +Type: language +Subtag: ojg +Description: Eastern Ojibwa +Added: 2009-07-29 +Macrolanguage: oj +%% +Type: language +Subtag: ojp +Description: Old Japanese +Added: 2009-07-29 +%% +Type: language +Subtag: ojs +Description: Severn Ojibwa +Added: 2009-07-29 +Macrolanguage: oj +%% +Type: language +Subtag: ojv +Description: Ontong Java +Added: 2009-07-29 +%% +Type: language +Subtag: ojw +Description: Western Ojibwa +Added: 2009-07-29 +Macrolanguage: oj +%% +Type: language +Subtag: oka +Description: Okanagan +Added: 2009-07-29 +%% +Type: language +Subtag: okb +Description: Okobo +Added: 2009-07-29 +%% +Type: language +Subtag: okd +Description: Okodia +Added: 2009-07-29 +%% +Type: language +Subtag: oke +Description: Okpe (Southwestern Edo) +Added: 2009-07-29 +%% +Type: language +Subtag: okg +Description: Koko Babangk +Added: 2012-08-12 +%% +Type: language +Subtag: okh +Description: Koresh-e Rostam +Added: 2009-07-29 +%% +Type: language +Subtag: oki +Description: Okiek +Added: 2009-07-29 +Macrolanguage: kln +%% +Type: language +Subtag: okj +Description: Oko-Juwoi +Added: 2009-07-29 +%% +Type: language +Subtag: okk +Description: Kwamtim One +Added: 2009-07-29 +%% +Type: language +Subtag: okl +Description: Old Kentish Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: okm +Description: Middle Korean (10th-16th cent.) +Added: 2009-07-29 +%% +Type: language +Subtag: okn +Description: Oki-No-Erabu +Added: 2009-07-29 +%% +Type: language +Subtag: oko +Description: Old Korean (3rd-9th cent.) +Added: 2009-07-29 +%% +Type: language +Subtag: okr +Description: Kirike +Added: 2009-07-29 +%% +Type: language +Subtag: oks +Description: Oko-Eni-Osayen +Added: 2009-07-29 +%% +Type: language +Subtag: oku +Description: Oku +Added: 2009-07-29 +%% +Type: language +Subtag: okv +Description: Orokaiva +Added: 2009-07-29 +%% +Type: language +Subtag: okx +Description: Okpe (Northwestern Edo) +Added: 2009-07-29 +%% +Type: language +Subtag: ola +Description: Walungge +Added: 2009-07-29 +%% +Type: language +Subtag: old +Description: Mochi +Added: 2009-07-29 +%% +Type: language +Subtag: ole +Description: Olekha +Added: 2009-07-29 +%% +Type: language +Subtag: olm +Description: Oloma +Added: 2009-07-29 +%% +Type: language +Subtag: olo +Description: Livvi +Added: 2009-07-29 +%% +Type: language +Subtag: olr +Description: Olrat +Added: 2009-07-29 +%% +Type: language +Subtag: oma +Description: Omaha-Ponca +Added: 2009-07-29 +%% +Type: language +Subtag: omb +Description: East Ambae +Added: 2009-07-29 +%% +Type: language +Subtag: omc +Description: Mochica +Added: 2009-07-29 +%% +Type: language +Subtag: ome +Description: Omejes +Added: 2009-07-29 +%% +Type: language +Subtag: omg +Description: Omagua +Added: 2009-07-29 +%% +Type: language +Subtag: omi +Description: Omi +Added: 2009-07-29 +%% +Type: language +Subtag: omk +Description: Omok +Added: 2009-07-29 +%% +Type: language +Subtag: oml +Description: Ombo +Added: 2009-07-29 +%% +Type: language +Subtag: omn +Description: Minoan +Added: 2009-07-29 +%% +Type: language +Subtag: omo +Description: Utarmbung +Added: 2009-07-29 +%% +Type: language +Subtag: omp +Description: Old Manipuri +Added: 2009-07-29 +%% +Type: language +Subtag: omq +Description: Oto-Manguean languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: omr +Description: Old Marathi +Added: 2009-07-29 +%% +Type: language +Subtag: omt +Description: Omotik +Added: 2009-07-29 +%% +Type: language +Subtag: omu +Description: Omurano +Added: 2009-07-29 +%% +Type: language +Subtag: omv +Description: Omotic languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: omw +Description: South Tairora +Added: 2009-07-29 +%% +Type: language +Subtag: omx +Description: Old Mon +Added: 2009-07-29 +%% +Type: language +Subtag: ona +Description: Ona +Added: 2009-07-29 +%% +Type: language +Subtag: onb +Description: Lingao +Added: 2009-07-29 +%% +Type: language +Subtag: one +Description: Oneida +Added: 2009-07-29 +%% +Type: language +Subtag: ong +Description: Olo +Added: 2009-07-29 +%% +Type: language +Subtag: oni +Description: Onin +Added: 2009-07-29 +%% +Type: language +Subtag: onj +Description: Onjob +Added: 2009-07-29 +%% +Type: language +Subtag: onk +Description: Kabore One +Added: 2009-07-29 +%% +Type: language +Subtag: onn +Description: Onobasulu +Added: 2009-07-29 +%% +Type: language +Subtag: ono +Description: Onondaga +Added: 2009-07-29 +%% +Type: language +Subtag: onp +Description: Sartang +Added: 2009-07-29 +%% +Type: language +Subtag: onr +Description: Northern One +Added: 2009-07-29 +%% +Type: language +Subtag: ons +Description: Ono +Added: 2009-07-29 +%% +Type: language +Subtag: ont +Description: Ontenu +Added: 2009-07-29 +%% +Type: language +Subtag: onu +Description: Unua +Added: 2009-07-29 +%% +Type: language +Subtag: onw +Description: Old Nubian +Added: 2009-07-29 +%% +Type: language +Subtag: onx +Description: Onin Based Pidgin +Added: 2009-07-29 +%% +Type: language +Subtag: ood +Description: Tohono O'odham +Added: 2009-07-29 +%% +Type: language +Subtag: oog +Description: Ong +Added: 2009-07-29 +%% +Type: language +Subtag: oon +Description: Önge +Added: 2009-07-29 +%% +Type: language +Subtag: oor +Description: Oorlams +Added: 2009-07-29 +%% +Type: language +Subtag: oos +Description: Old Ossetic +Added: 2009-07-29 +%% +Type: language +Subtag: opa +Description: Okpamheri +Added: 2009-07-29 +%% +Type: language +Subtag: opk +Description: Kopkaka +Added: 2009-07-29 +%% +Type: language +Subtag: opm +Description: Oksapmin +Added: 2009-07-29 +%% +Type: language +Subtag: opo +Description: Opao +Added: 2009-07-29 +%% +Type: language +Subtag: opt +Description: Opata +Added: 2009-07-29 +%% +Type: language +Subtag: opy +Description: Ofayé +Added: 2009-07-29 +%% +Type: language +Subtag: ora +Description: Oroha +Added: 2009-07-29 +%% +Type: language +Subtag: orc +Description: Orma +Added: 2009-07-29 +Macrolanguage: om +%% +Type: language +Subtag: ore +Description: Orejón +Added: 2009-07-29 +%% +Type: language +Subtag: org +Description: Oring +Added: 2009-07-29 +%% +Type: language +Subtag: orh +Description: Oroqen +Added: 2009-07-29 +%% +Type: language +Subtag: orn +Description: Orang Kanaq +Added: 2009-07-29 +Macrolanguage: ms +%% +Type: language +Subtag: oro +Description: Orokolo +Added: 2009-07-29 +%% +Type: language +Subtag: orr +Description: Oruma +Added: 2009-07-29 +%% +Type: language +Subtag: ors +Description: Orang Seletar +Added: 2009-07-29 +Macrolanguage: ms +%% +Type: language +Subtag: ort +Description: Adivasi Oriya +Added: 2009-07-29 +%% +Type: language +Subtag: oru +Description: Ormuri +Added: 2009-07-29 +%% +Type: language +Subtag: orv +Description: Old Russian +Added: 2009-07-29 +%% +Type: language +Subtag: orw +Description: Oro Win +Added: 2009-07-29 +%% +Type: language +Subtag: orx +Description: Oro +Added: 2009-07-29 +%% +Type: language +Subtag: ory +Description: Oriya (individual language) +Added: 2012-08-12 +Macrolanguage: or +%% +Type: language +Subtag: orz +Description: Ormu +Added: 2009-07-29 +%% +Type: language +Subtag: osa +Description: Osage +Added: 2005-10-16 +%% +Type: language +Subtag: osc +Description: Oscan +Added: 2009-07-29 +%% +Type: language +Subtag: osi +Description: Osing +Added: 2009-07-29 +%% +Type: language +Subtag: oso +Description: Ososo +Added: 2009-07-29 +%% +Type: language +Subtag: osp +Description: Old Spanish +Added: 2009-07-29 +%% +Type: language +Subtag: ost +Description: Osatu +Added: 2009-07-29 +%% +Type: language +Subtag: osu +Description: Southern One +Added: 2009-07-29 +%% +Type: language +Subtag: osx +Description: Old Saxon +Added: 2009-07-29 +%% +Type: language +Subtag: ota +Description: Ottoman Turkish (1500-1928) +Added: 2005-10-16 +%% +Type: language +Subtag: otb +Description: Old Tibetan +Added: 2009-07-29 +%% +Type: language +Subtag: otd +Description: Ot Danum +Added: 2009-07-29 +%% +Type: language +Subtag: ote +Description: Mezquital Otomi +Added: 2009-07-29 +%% +Type: language +Subtag: oti +Description: Oti +Added: 2009-07-29 +%% +Type: language +Subtag: otk +Description: Old Turkish +Added: 2009-07-29 +%% +Type: language +Subtag: otl +Description: Tilapa Otomi +Added: 2009-07-29 +%% +Type: language +Subtag: otm +Description: Eastern Highland Otomi +Added: 2009-07-29 +%% +Type: language +Subtag: otn +Description: Tenango Otomi +Added: 2009-07-29 +%% +Type: language +Subtag: oto +Description: Otomian languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: otq +Description: Querétaro Otomi +Added: 2009-07-29 +%% +Type: language +Subtag: otr +Description: Otoro +Added: 2009-07-29 +%% +Type: language +Subtag: ots +Description: Estado de México Otomi +Added: 2009-07-29 +%% +Type: language +Subtag: ott +Description: Temoaya Otomi +Added: 2009-07-29 +%% +Type: language +Subtag: otu +Description: Otuke +Added: 2009-07-29 +%% +Type: language +Subtag: otw +Description: Ottawa +Added: 2009-07-29 +Macrolanguage: oj +%% +Type: language +Subtag: otx +Description: Texcatepec Otomi +Added: 2009-07-29 +%% +Type: language +Subtag: oty +Description: Old Tamil +Added: 2009-07-29 +%% +Type: language +Subtag: otz +Description: Ixtenco Otomi +Added: 2009-07-29 +%% +Type: language +Subtag: oua +Description: Tagargrent +Added: 2009-07-29 +%% +Type: language +Subtag: oub +Description: Glio-Oubi +Added: 2009-07-29 +%% +Type: language +Subtag: oue +Description: Oune +Added: 2009-07-29 +%% +Type: language +Subtag: oui +Description: Old Uighur +Added: 2009-07-29 +%% +Type: language +Subtag: oum +Description: Ouma +Added: 2009-07-29 +%% +Type: language +Subtag: oun +Description: !O!ung +Added: 2009-07-29 +%% +Type: language +Subtag: owi +Description: Owiniga +Added: 2009-07-29 +%% +Type: language +Subtag: owl +Description: Old Welsh +Added: 2009-07-29 +%% +Type: language +Subtag: oyb +Description: Oy +Added: 2009-07-29 +%% +Type: language +Subtag: oyd +Description: Oyda +Added: 2009-07-29 +%% +Type: language +Subtag: oym +Description: Wayampi +Added: 2009-07-29 +%% +Type: language +Subtag: oyy +Description: Oya'oya +Added: 2009-07-29 +%% +Type: language +Subtag: ozm +Description: Koonzime +Added: 2009-07-29 +%% +Type: language +Subtag: paa +Description: Papuan languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: pab +Description: Parecís +Added: 2009-07-29 +%% +Type: language +Subtag: pac +Description: Pacoh +Added: 2009-07-29 +%% +Type: language +Subtag: pad +Description: Paumarí +Added: 2009-07-29 +%% +Type: language +Subtag: pae +Description: Pagibete +Added: 2009-07-29 +%% +Type: language +Subtag: paf +Description: Paranawát +Added: 2009-07-29 +%% +Type: language +Subtag: pag +Description: Pangasinan +Added: 2005-10-16 +%% +Type: language +Subtag: pah +Description: Tenharim +Added: 2009-07-29 +%% +Type: language +Subtag: pai +Description: Pe +Added: 2009-07-29 +%% +Type: language +Subtag: pak +Description: Parakanã +Added: 2009-07-29 +%% +Type: language +Subtag: pal +Description: Pahlavi +Added: 2005-10-16 +%% +Type: language +Subtag: pam +Description: Pampanga +Description: Kapampangan +Added: 2005-10-16 +%% +Type: language +Subtag: pao +Description: Northern Paiute +Added: 2009-07-29 +%% +Type: language +Subtag: pap +Description: Papiamento +Added: 2005-10-16 +%% +Type: language +Subtag: paq +Description: Parya +Added: 2009-07-29 +%% +Type: language +Subtag: par +Description: Panamint +Description: Timbisha +Added: 2009-07-29 +%% +Type: language +Subtag: pas +Description: Papasena +Added: 2009-07-29 +%% +Type: language +Subtag: pat +Description: Papitalai +Added: 2009-07-29 +%% +Type: language +Subtag: pau +Description: Palauan +Added: 2005-10-16 +%% +Type: language +Subtag: pav +Description: Pakaásnovos +Added: 2009-07-29 +%% +Type: language +Subtag: paw +Description: Pawnee +Added: 2009-07-29 +%% +Type: language +Subtag: pax +Description: Pankararé +Added: 2009-07-29 +%% +Type: language +Subtag: pay +Description: Pech +Added: 2009-07-29 +%% +Type: language +Subtag: paz +Description: Pankararú +Added: 2009-07-29 +%% +Type: language +Subtag: pbb +Description: Páez +Added: 2009-07-29 +%% +Type: language +Subtag: pbc +Description: Patamona +Added: 2009-07-29 +%% +Type: language +Subtag: pbe +Description: Mezontla Popoloca +Added: 2009-07-29 +%% +Type: language +Subtag: pbf +Description: Coyotepec Popoloca +Added: 2009-07-29 +%% +Type: language +Subtag: pbg +Description: Paraujano +Added: 2009-07-29 +%% +Type: language +Subtag: pbh +Description: E'ñapa Woromaipu +Added: 2009-07-29 +%% +Type: language +Subtag: pbi +Description: Parkwa +Added: 2009-07-29 +%% +Type: language +Subtag: pbl +Description: Mak (Nigeria) +Added: 2009-07-29 +%% +Type: language +Subtag: pbn +Description: Kpasam +Added: 2009-07-29 +%% +Type: language +Subtag: pbo +Description: Papel +Added: 2009-07-29 +%% +Type: language +Subtag: pbp +Description: Badyara +Added: 2009-07-29 +%% +Type: language +Subtag: pbr +Description: Pangwa +Added: 2009-07-29 +%% +Type: language +Subtag: pbs +Description: Central Pame +Added: 2009-07-29 +%% +Type: language +Subtag: pbt +Description: Southern Pashto +Added: 2009-07-29 +Macrolanguage: ps +%% +Type: language +Subtag: pbu +Description: Northern Pashto +Added: 2009-07-29 +Macrolanguage: ps +%% +Type: language +Subtag: pbv +Description: Pnar +Added: 2009-07-29 +%% +Type: language +Subtag: pby +Description: Pyu +Added: 2009-07-29 +%% +Type: language +Subtag: pbz +Description: Palu +Added: 2009-07-29 +Deprecated: 2012-08-12 +%% +Type: language +Subtag: pca +Description: Santa Inés Ahuatempan Popoloca +Added: 2009-07-29 +%% +Type: language +Subtag: pcb +Description: Pear +Added: 2009-07-29 +%% +Type: language +Subtag: pcc +Description: Bouyei +Added: 2009-07-29 +%% +Type: language +Subtag: pcd +Description: Picard +Added: 2009-07-29 +%% +Type: language +Subtag: pce +Description: Ruching Palaung +Added: 2009-07-29 +%% +Type: language +Subtag: pcf +Description: Paliyan +Added: 2009-07-29 +%% +Type: language +Subtag: pcg +Description: Paniya +Added: 2009-07-29 +%% +Type: language +Subtag: pch +Description: Pardhan +Added: 2009-07-29 +%% +Type: language +Subtag: pci +Description: Duruwa +Added: 2009-07-29 +%% +Type: language +Subtag: pcj +Description: Parenga +Added: 2009-07-29 +%% +Type: language +Subtag: pck +Description: Paite Chin +Added: 2009-07-29 +%% +Type: language +Subtag: pcl +Description: Pardhi +Added: 2009-07-29 +%% +Type: language +Subtag: pcm +Description: Nigerian Pidgin +Added: 2009-07-29 +%% +Type: language +Subtag: pcn +Description: Piti +Added: 2009-07-29 +%% +Type: language +Subtag: pcp +Description: Pacahuara +Added: 2009-07-29 +%% +Type: language +Subtag: pcr +Description: Panang +Added: 2009-07-29 +%% +Type: language +Subtag: pcw +Description: Pyapun +Added: 2009-07-29 +%% +Type: language +Subtag: pda +Description: Anam +Added: 2009-07-29 +%% +Type: language +Subtag: pdc +Description: Pennsylvania German +Added: 2009-07-29 +%% +Type: language +Subtag: pdi +Description: Pa Di +Added: 2009-07-29 +%% +Type: language +Subtag: pdn +Description: Podena +Description: Fedan +Added: 2009-07-29 +%% +Type: language +Subtag: pdo +Description: Padoe +Added: 2009-07-29 +%% +Type: language +Subtag: pdt +Description: Plautdietsch +Added: 2009-07-29 +%% +Type: language +Subtag: pdu +Description: Kayan +Added: 2009-07-29 +%% +Type: language +Subtag: pea +Description: Peranakan Indonesian +Added: 2009-07-29 +%% +Type: language +Subtag: peb +Description: Eastern Pomo +Added: 2009-07-29 +%% +Type: language +Subtag: ped +Description: Mala (Papua New Guinea) +Added: 2009-07-29 +%% +Type: language +Subtag: pee +Description: Taje +Added: 2009-07-29 +%% +Type: language +Subtag: pef +Description: Northeastern Pomo +Added: 2009-07-29 +%% +Type: language +Subtag: peg +Description: Pengo +Added: 2009-07-29 +%% +Type: language +Subtag: peh +Description: Bonan +Added: 2009-07-29 +%% +Type: language +Subtag: pei +Description: Chichimeca-Jonaz +Added: 2009-07-29 +%% +Type: language +Subtag: pej +Description: Northern Pomo +Added: 2009-07-29 +%% +Type: language +Subtag: pek +Description: Penchal +Added: 2009-07-29 +%% +Type: language +Subtag: pel +Description: Pekal +Added: 2009-07-29 +Macrolanguage: ms +%% +Type: language +Subtag: pem +Description: Phende +Added: 2009-07-29 +%% +Type: language +Subtag: peo +Description: Old Persian (ca. 600-400 B.C.) +Added: 2005-10-16 +%% +Type: language +Subtag: pep +Description: Kunja +Added: 2009-07-29 +%% +Type: language +Subtag: peq +Description: Southern Pomo +Added: 2009-07-29 +%% +Type: language +Subtag: pes +Description: Iranian Persian +Added: 2009-07-29 +Macrolanguage: fa +%% +Type: language +Subtag: pev +Description: Pémono +Added: 2009-07-29 +%% +Type: language +Subtag: pex +Description: Petats +Added: 2009-07-29 +%% +Type: language +Subtag: pey +Description: Petjo +Added: 2009-07-29 +%% +Type: language +Subtag: pez +Description: Eastern Penan +Added: 2009-07-29 +%% +Type: language +Subtag: pfa +Description: Pááfang +Added: 2009-07-29 +%% +Type: language +Subtag: pfe +Description: Peere +Added: 2009-07-29 +%% +Type: language +Subtag: pfl +Description: Pfaelzisch +Added: 2009-07-29 +%% +Type: language +Subtag: pga +Description: Sudanese Creole Arabic +Added: 2009-07-29 +Macrolanguage: ar +%% +Type: language +Subtag: pgg +Description: Pangwali +Added: 2009-07-29 +%% +Type: language +Subtag: pgi +Description: Pagi +Added: 2009-07-29 +%% +Type: language +Subtag: pgk +Description: Rerep +Added: 2009-07-29 +%% +Type: language +Subtag: pgl +Description: Primitive Irish +Added: 2011-08-16 +%% +Type: language +Subtag: pgn +Description: Paelignian +Added: 2009-07-29 +%% +Type: language +Subtag: pgs +Description: Pangseng +Added: 2009-07-29 +%% +Type: language +Subtag: pgu +Description: Pagu +Added: 2009-07-29 +%% +Type: language +Subtag: pgy +Description: Pongyong +Added: 2009-07-29 +Deprecated: 2012-08-12 +%% +Type: language +Subtag: pha +Description: Pa-Hng +Added: 2009-07-29 +%% +Type: language +Subtag: phd +Description: Phudagi +Added: 2009-07-29 +%% +Type: language +Subtag: phg +Description: Phuong +Added: 2009-07-29 +%% +Type: language +Subtag: phh +Description: Phukha +Added: 2009-07-29 +%% +Type: language +Subtag: phi +Description: Philippine languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: phk +Description: Phake +Added: 2009-07-29 +%% +Type: language +Subtag: phl +Description: Phalura +Description: Palula +Added: 2009-07-29 +%% +Type: language +Subtag: phm +Description: Phimbi +Added: 2009-07-29 +%% +Type: language +Subtag: phn +Description: Phoenician +Added: 2005-10-16 +%% +Type: language +Subtag: pho +Description: Phunoi +Added: 2009-07-29 +%% +Type: language +Subtag: phq +Description: Phana' +Added: 2009-07-29 +%% +Type: language +Subtag: phr +Description: Pahari-Potwari +Added: 2009-07-29 +Macrolanguage: lah +%% +Type: language +Subtag: pht +Description: Phu Thai +Added: 2009-07-29 +%% +Type: language +Subtag: phu +Description: Phuan +Added: 2009-07-29 +%% +Type: language +Subtag: phv +Description: Pahlavani +Added: 2009-07-29 +%% +Type: language +Subtag: phw +Description: Phangduwali +Added: 2009-07-29 +%% +Type: language +Subtag: pia +Description: Pima Bajo +Added: 2009-07-29 +%% +Type: language +Subtag: pib +Description: Yine +Added: 2009-07-29 +%% +Type: language +Subtag: pic +Description: Pinji +Added: 2009-07-29 +%% +Type: language +Subtag: pid +Description: Piaroa +Added: 2009-07-29 +%% +Type: language +Subtag: pie +Description: Piro +Added: 2009-07-29 +%% +Type: language +Subtag: pif +Description: Pingelapese +Added: 2009-07-29 +%% +Type: language +Subtag: pig +Description: Pisabo +Added: 2009-07-29 +%% +Type: language +Subtag: pih +Description: Pitcairn-Norfolk +Added: 2009-07-29 +%% +Type: language +Subtag: pii +Description: Pini +Added: 2009-07-29 +%% +Type: language +Subtag: pij +Description: Pijao +Added: 2009-07-29 +%% +Type: language +Subtag: pil +Description: Yom +Added: 2009-07-29 +%% +Type: language +Subtag: pim +Description: Powhatan +Added: 2009-07-29 +%% +Type: language +Subtag: pin +Description: Piame +Added: 2009-07-29 +%% +Type: language +Subtag: pio +Description: Piapoco +Added: 2009-07-29 +%% +Type: language +Subtag: pip +Description: Pero +Added: 2009-07-29 +%% +Type: language +Subtag: pir +Description: Piratapuyo +Added: 2009-07-29 +%% +Type: language +Subtag: pis +Description: Pijin +Added: 2009-07-29 +%% +Type: language +Subtag: pit +Description: Pitta Pitta +Added: 2009-07-29 +%% +Type: language +Subtag: piu +Description: Pintupi-Luritja +Added: 2009-07-29 +%% +Type: language +Subtag: piv +Description: Pileni +Description: Vaeakau-Taumako +Added: 2009-07-29 +%% +Type: language +Subtag: piw +Description: Pimbwe +Added: 2009-07-29 +%% +Type: language +Subtag: pix +Description: Piu +Added: 2009-07-29 +%% +Type: language +Subtag: piy +Description: Piya-Kwonci +Added: 2009-07-29 +%% +Type: language +Subtag: piz +Description: Pije +Added: 2009-07-29 +%% +Type: language +Subtag: pjt +Description: Pitjantjatjara +Added: 2009-07-29 +%% +Type: language +Subtag: pka +Description: Ardhamāgadhī Prākrit +Added: 2009-07-29 +%% +Type: language +Subtag: pkb +Description: Pokomo +Description: Kipfokomo +Added: 2009-07-29 +%% +Type: language +Subtag: pkc +Description: Paekche +Added: 2009-07-29 +%% +Type: language +Subtag: pkg +Description: Pak-Tong +Added: 2009-07-29 +%% +Type: language +Subtag: pkh +Description: Pankhu +Added: 2009-07-29 +%% +Type: language +Subtag: pkn +Description: Pakanha +Added: 2009-07-29 +%% +Type: language +Subtag: pko +Description: Pökoot +Added: 2009-07-29 +Macrolanguage: kln +%% +Type: language +Subtag: pkp +Description: Pukapuka +Added: 2009-07-29 +%% +Type: language +Subtag: pkr +Description: Attapady Kurumba +Added: 2009-07-29 +%% +Type: language +Subtag: pks +Description: Pakistan Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: pkt +Description: Maleng +Added: 2009-07-29 +%% +Type: language +Subtag: pku +Description: Paku +Added: 2009-07-29 +%% +Type: language +Subtag: pla +Description: Miani +Added: 2009-07-29 +%% +Type: language +Subtag: plb +Description: Polonombauk +Added: 2009-07-29 +%% +Type: language +Subtag: plc +Description: Central Palawano +Added: 2009-07-29 +%% +Type: language +Subtag: pld +Description: Polari +Added: 2009-07-29 +%% +Type: language +Subtag: ple +Description: Palu'e +Added: 2009-07-29 +%% +Type: language +Subtag: plf +Description: Central Malayo-Polynesian languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: plg +Description: Pilagá +Added: 2009-07-29 +%% +Type: language +Subtag: plh +Description: Paulohi +Added: 2009-07-29 +%% +Type: language +Subtag: plj +Description: Polci +Added: 2009-07-29 +%% +Type: language +Subtag: plk +Description: Kohistani Shina +Added: 2009-07-29 +%% +Type: language +Subtag: pll +Description: Shwe Palaung +Added: 2009-07-29 +%% +Type: language +Subtag: pln +Description: Palenquero +Added: 2009-07-29 +%% +Type: language +Subtag: plo +Description: Oluta Popoluca +Added: 2009-07-29 +%% +Type: language +Subtag: plp +Description: Palpa +Added: 2009-07-29 +%% +Type: language +Subtag: plq +Description: Palaic +Added: 2009-07-29 +%% +Type: language +Subtag: plr +Description: Palaka Senoufo +Added: 2009-07-29 +%% +Type: language +Subtag: pls +Description: San Marcos Tlalcoyalco Popoloca +Added: 2009-07-29 +%% +Type: language +Subtag: plt +Description: Plateau Malagasy +Added: 2009-07-29 +Macrolanguage: mg +%% +Type: language +Subtag: plu +Description: Palikúr +Added: 2009-07-29 +%% +Type: language +Subtag: plv +Description: Southwest Palawano +Added: 2009-07-29 +%% +Type: language +Subtag: plw +Description: Brooke's Point Palawano +Added: 2009-07-29 +%% +Type: language +Subtag: ply +Description: Bolyu +Added: 2009-07-29 +%% +Type: language +Subtag: plz +Description: Paluan +Added: 2009-07-29 +%% +Type: language +Subtag: pma +Description: Paama +Added: 2009-07-29 +%% +Type: language +Subtag: pmb +Description: Pambia +Added: 2009-07-29 +%% +Type: language +Subtag: pmc +Description: Palumata +Added: 2009-07-29 +%% +Type: language +Subtag: pmd +Description: Pallanganmiddang +Added: 2012-08-12 +%% +Type: language +Subtag: pme +Description: Pwaamei +Added: 2009-07-29 +%% +Type: language +Subtag: pmf +Description: Pamona +Added: 2009-07-29 +%% +Type: language +Subtag: pmh +Description: Māhārāṣṭri Prākrit +Added: 2009-07-29 +%% +Type: language +Subtag: pmi +Description: Northern Pumi +Added: 2009-07-29 +%% +Type: language +Subtag: pmj +Description: Southern Pumi +Added: 2009-07-29 +%% +Type: language +Subtag: pmk +Description: Pamlico +Added: 2009-07-29 +%% +Type: language +Subtag: pml +Description: Lingua Franca +Added: 2009-07-29 +%% +Type: language +Subtag: pmm +Description: Pomo +Added: 2009-07-29 +%% +Type: language +Subtag: pmn +Description: Pam +Added: 2009-07-29 +%% +Type: language +Subtag: pmo +Description: Pom +Added: 2009-07-29 +%% +Type: language +Subtag: pmq +Description: Northern Pame +Added: 2009-07-29 +%% +Type: language +Subtag: pmr +Description: Paynamar +Added: 2009-07-29 +%% +Type: language +Subtag: pms +Description: Piemontese +Added: 2009-07-29 +%% +Type: language +Subtag: pmt +Description: Tuamotuan +Added: 2009-07-29 +%% +Type: language +Subtag: pmu +Description: Mirpur Panjabi +Added: 2009-07-29 +Macrolanguage: lah +%% +Type: language +Subtag: pmw +Description: Plains Miwok +Added: 2009-07-29 +%% +Type: language +Subtag: pmx +Description: Poumei Naga +Added: 2009-07-29 +%% +Type: language +Subtag: pmy +Description: Papuan Malay +Added: 2009-07-29 +%% +Type: language +Subtag: pmz +Description: Southern Pame +Added: 2009-07-29 +%% +Type: language +Subtag: pna +Description: Punan Bah-Biau +Added: 2009-07-29 +%% +Type: language +Subtag: pnb +Description: Western Panjabi +Added: 2009-07-29 +Macrolanguage: lah +%% +Type: language +Subtag: pnc +Description: Pannei +Added: 2009-07-29 +%% +Type: language +Subtag: pne +Description: Western Penan +Added: 2009-07-29 +%% +Type: language +Subtag: png +Description: Pongu +Added: 2009-07-29 +%% +Type: language +Subtag: pnh +Description: Penrhyn +Added: 2009-07-29 +%% +Type: language +Subtag: pni +Description: Aoheng +Added: 2009-07-29 +%% +Type: language +Subtag: pnk +Description: Paunaka +Added: 2012-08-12 +%% +Type: language +Subtag: pnm +Description: Punan Batu 1 +Added: 2009-07-29 +%% +Type: language +Subtag: pnn +Description: Pinai-Hagahai +Added: 2009-07-29 +%% +Type: language +Subtag: pno +Description: Panobo +Added: 2009-07-29 +%% +Type: language +Subtag: pnp +Description: Pancana +Added: 2009-07-29 +%% +Type: language +Subtag: pnq +Description: Pana (Burkina Faso) +Added: 2009-07-29 +%% +Type: language +Subtag: pnr +Description: Panim +Added: 2009-07-29 +%% +Type: language +Subtag: pns +Description: Ponosakan +Added: 2009-07-29 +%% +Type: language +Subtag: pnt +Description: Pontic +Added: 2009-07-29 +%% +Type: language +Subtag: pnu +Description: Jiongnai Bunu +Added: 2009-07-29 +%% +Type: language +Subtag: pnv +Description: Pinigura +Added: 2009-07-29 +%% +Type: language +Subtag: pnw +Description: Panytyima +Added: 2009-07-29 +%% +Type: language +Subtag: pnx +Description: Phong-Kniang +Added: 2009-07-29 +%% +Type: language +Subtag: pny +Description: Pinyin +Added: 2009-07-29 +Comments: a Niger-Congo language spoken in Cameroon; not to be confused + with the Pinyin romanization systems used for Chinese and Tibetan +%% +Type: language +Subtag: pnz +Description: Pana (Central African Republic) +Added: 2009-07-29 +%% +Type: language +Subtag: poc +Description: Poqomam +Added: 2009-07-29 +%% +Type: language +Subtag: pod +Description: Ponares +Added: 2009-07-29 +%% +Type: language +Subtag: poe +Description: San Juan Atzingo Popoloca +Added: 2009-07-29 +%% +Type: language +Subtag: pof +Description: Poke +Added: 2009-07-29 +%% +Type: language +Subtag: pog +Description: Potiguára +Added: 2009-07-29 +%% +Type: language +Subtag: poh +Description: Poqomchi' +Added: 2009-07-29 +%% +Type: language +Subtag: poi +Description: Highland Popoluca +Added: 2009-07-29 +%% +Type: language +Subtag: pok +Description: Pokangá +Added: 2009-07-29 +%% +Type: language +Subtag: pom +Description: Southeastern Pomo +Added: 2009-07-29 +%% +Type: language +Subtag: pon +Description: Pohnpeian +Added: 2005-10-16 +%% +Type: language +Subtag: poo +Description: Central Pomo +Added: 2009-07-29 +%% +Type: language +Subtag: pop +Description: Pwapwa +Added: 2009-07-29 +%% +Type: language +Subtag: poq +Description: Texistepec Popoluca +Added: 2009-07-29 +%% +Type: language +Subtag: pos +Description: Sayula Popoluca +Added: 2009-07-29 +%% +Type: language +Subtag: pot +Description: Potawatomi +Added: 2009-07-29 +%% +Type: language +Subtag: pov +Description: Upper Guinea Crioulo +Added: 2009-07-29 +%% +Type: language +Subtag: pow +Description: San Felipe Otlaltepec Popoloca +Added: 2009-07-29 +%% +Type: language +Subtag: pox +Description: Polabian +Added: 2009-07-29 +%% +Type: language +Subtag: poy +Description: Pogolo +Added: 2009-07-29 +%% +Type: language +Subtag: poz +Description: Malayo-Polynesian languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: ppa +Description: Pao +Added: 2009-07-29 +%% +Type: language +Subtag: ppe +Description: Papi +Added: 2009-07-29 +%% +Type: language +Subtag: ppi +Description: Paipai +Added: 2009-07-29 +%% +Type: language +Subtag: ppk +Description: Uma +Added: 2009-07-29 +%% +Type: language +Subtag: ppl +Description: Pipil +Description: Nicarao +Added: 2009-07-29 +%% +Type: language +Subtag: ppm +Description: Papuma +Added: 2009-07-29 +%% +Type: language +Subtag: ppn +Description: Papapana +Added: 2009-07-29 +%% +Type: language +Subtag: ppo +Description: Folopa +Added: 2009-07-29 +%% +Type: language +Subtag: ppp +Description: Pelende +Added: 2009-07-29 +%% +Type: language +Subtag: ppq +Description: Pei +Added: 2009-07-29 +%% +Type: language +Subtag: ppr +Description: Piru +Added: 2009-07-29 +%% +Type: language +Subtag: pps +Description: San Luís Temalacayuca Popoloca +Added: 2009-07-29 +%% +Type: language +Subtag: ppt +Description: Pare +Added: 2009-07-29 +%% +Type: language +Subtag: ppu +Description: Papora +Added: 2009-07-29 +%% +Type: language +Subtag: pqa +Description: Pa'a +Added: 2009-07-29 +%% +Type: language +Subtag: pqe +Description: Eastern Malayo-Polynesian languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: pqm +Description: Malecite-Passamaquoddy +Added: 2009-07-29 +%% +Type: language +Subtag: pqw +Description: Western Malayo-Polynesian languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: pra +Description: Prakrit languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: prb +Description: Lua' +Added: 2009-07-29 +%% +Type: language +Subtag: prc +Description: Parachi +Added: 2009-07-29 +%% +Type: language +Subtag: prd +Description: Parsi-Dari +Added: 2009-07-29 +%% +Type: language +Subtag: pre +Description: Principense +Added: 2009-07-29 +%% +Type: language +Subtag: prf +Description: Paranan +Added: 2010-03-11 +%% +Type: language +Subtag: prg +Description: Prussian +Added: 2009-07-29 +%% +Type: language +Subtag: prh +Description: Porohanon +Added: 2009-07-29 +%% +Type: language +Subtag: pri +Description: Paicî +Added: 2009-07-29 +%% +Type: language +Subtag: prk +Description: Parauk +Added: 2009-07-29 +%% +Type: language +Subtag: prl +Description: Peruvian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: prm +Description: Kibiri +Added: 2009-07-29 +%% +Type: language +Subtag: prn +Description: Prasuni +Added: 2009-07-29 +%% +Type: language +Subtag: pro +Description: Old Provençal (to 1500) +Description: Old Occitan (to 1500) +Added: 2005-10-16 +%% +Type: language +Subtag: prp +Description: Parsi +Added: 2009-07-29 +%% +Type: language +Subtag: prq +Description: Ashéninka Perené +Added: 2009-07-29 +%% +Type: language +Subtag: prr +Description: Puri +Added: 2009-07-29 +%% +Type: language +Subtag: prs +Description: Dari +Description: Afghan Persian +Added: 2009-07-29 +Macrolanguage: fa +%% +Type: language +Subtag: prt +Description: Phai +Added: 2009-07-29 +%% +Type: language +Subtag: pru +Description: Puragi +Added: 2009-07-29 +%% +Type: language +Subtag: prw +Description: Parawen +Added: 2009-07-29 +%% +Type: language +Subtag: prx +Description: Purik +Added: 2009-07-29 +%% +Type: language +Subtag: pry +Description: Pray 3 +Added: 2009-07-29 +%% +Type: language +Subtag: prz +Description: Providencia Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: psa +Description: Asue Awyu +Added: 2009-07-29 +%% +Type: language +Subtag: psc +Description: Persian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: psd +Description: Plains Indian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: pse +Description: Central Malay +Added: 2009-07-29 +Macrolanguage: ms +%% +Type: language +Subtag: psg +Description: Penang Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: psh +Description: Southwest Pashayi +Added: 2009-07-29 +%% +Type: language +Subtag: psi +Description: Southeast Pashayi +Added: 2009-07-29 +%% +Type: language +Subtag: psl +Description: Puerto Rican Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: psm +Description: Pauserna +Added: 2009-07-29 +%% +Type: language +Subtag: psn +Description: Panasuan +Added: 2009-07-29 +%% +Type: language +Subtag: pso +Description: Polish Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: psp +Description: Philippine Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: psq +Description: Pasi +Added: 2009-07-29 +%% +Type: language +Subtag: psr +Description: Portuguese Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: pss +Description: Kaulong +Added: 2009-07-29 +%% +Type: language +Subtag: pst +Description: Central Pashto +Added: 2009-07-29 +Macrolanguage: ps +%% +Type: language +Subtag: psu +Description: Sauraseni Prākrit +Added: 2009-07-29 +%% +Type: language +Subtag: psw +Description: Port Sandwich +Added: 2009-07-29 +%% +Type: language +Subtag: psy +Description: Piscataway +Added: 2009-07-29 +%% +Type: language +Subtag: pta +Description: Pai Tavytera +Added: 2009-07-29 +%% +Type: language +Subtag: pth +Description: Pataxó Hã-Ha-Hãe +Added: 2009-07-29 +%% +Type: language +Subtag: pti +Description: Pintiini +Added: 2009-07-29 +%% +Type: language +Subtag: ptn +Description: Patani +Added: 2009-07-29 +%% +Type: language +Subtag: pto +Description: Zo'é +Added: 2009-07-29 +%% +Type: language +Subtag: ptp +Description: Patep +Added: 2009-07-29 +%% +Type: language +Subtag: ptr +Description: Piamatsina +Added: 2009-07-29 +%% +Type: language +Subtag: ptt +Description: Enrekang +Added: 2009-07-29 +%% +Type: language +Subtag: ptu +Description: Bambam +Added: 2009-07-29 +%% +Type: language +Subtag: ptv +Description: Port Vato +Added: 2009-07-29 +%% +Type: language +Subtag: ptw +Description: Pentlatch +Added: 2009-07-29 +%% +Type: language +Subtag: pty +Description: Pathiya +Added: 2009-07-29 +%% +Type: language +Subtag: pua +Description: Western Highland Purepecha +Added: 2009-07-29 +%% +Type: language +Subtag: pub +Description: Purum +Added: 2009-07-29 +%% +Type: language +Subtag: puc +Description: Punan Merap +Added: 2009-07-29 +%% +Type: language +Subtag: pud +Description: Punan Aput +Added: 2009-07-29 +%% +Type: language +Subtag: pue +Description: Puelche +Added: 2009-07-29 +%% +Type: language +Subtag: puf +Description: Punan Merah +Added: 2009-07-29 +%% +Type: language +Subtag: pug +Description: Phuie +Added: 2009-07-29 +%% +Type: language +Subtag: pui +Description: Puinave +Added: 2009-07-29 +%% +Type: language +Subtag: puj +Description: Punan Tubu +Added: 2009-07-29 +%% +Type: language +Subtag: puk +Description: Pu Ko +Added: 2009-07-29 +%% +Type: language +Subtag: pum +Description: Puma +Added: 2009-07-29 +%% +Type: language +Subtag: puo +Description: Puoc +Added: 2009-07-29 +%% +Type: language +Subtag: pup +Description: Pulabu +Added: 2009-07-29 +%% +Type: language +Subtag: puq +Description: Puquina +Added: 2009-07-29 +%% +Type: language +Subtag: pur +Description: Puruborá +Added: 2009-07-29 +%% +Type: language +Subtag: put +Description: Putoh +Added: 2009-07-29 +%% +Type: language +Subtag: puu +Description: Punu +Added: 2009-07-29 +%% +Type: language +Subtag: puw +Description: Puluwatese +Added: 2009-07-29 +%% +Type: language +Subtag: pux +Description: Puare +Added: 2009-07-29 +%% +Type: language +Subtag: puy +Description: Purisimeño +Added: 2009-07-29 +%% +Type: language +Subtag: puz +Description: Purum Naga +Added: 2009-07-29 +%% +Type: language +Subtag: pwa +Description: Pawaia +Added: 2009-07-29 +%% +Type: language +Subtag: pwb +Description: Panawa +Added: 2009-07-29 +%% +Type: language +Subtag: pwg +Description: Gapapaiwa +Added: 2009-07-29 +%% +Type: language +Subtag: pwm +Description: Molbog +Added: 2009-07-29 +%% +Type: language +Subtag: pwn +Description: Paiwan +Added: 2009-07-29 +%% +Type: language +Subtag: pwo +Description: Pwo Western Karen +Added: 2009-07-29 +%% +Type: language +Subtag: pwr +Description: Powari +Added: 2009-07-29 +%% +Type: language +Subtag: pww +Description: Pwo Northern Karen +Added: 2009-07-29 +%% +Type: language +Subtag: pxm +Description: Quetzaltepec Mixe +Added: 2009-07-29 +%% +Type: language +Subtag: pye +Description: Pye Krumen +Added: 2009-07-29 +%% +Type: language +Subtag: pym +Description: Fyam +Added: 2009-07-29 +%% +Type: language +Subtag: pyn +Description: Poyanáwa +Added: 2009-07-29 +%% +Type: language +Subtag: pys +Description: Paraguayan Sign Language +Description: Lengua de Señas del Paraguay +Added: 2010-03-11 +%% +Type: language +Subtag: pyu +Description: Puyuma +Added: 2009-07-29 +%% +Type: language +Subtag: pyx +Description: Pyu (Myanmar) +Added: 2009-07-29 +%% +Type: language +Subtag: pyy +Description: Pyen +Added: 2009-07-29 +%% +Type: language +Subtag: pzn +Description: Para Naga +Added: 2009-07-29 +%% +Type: language +Subtag: qaa..qtz +Description: Private use +Added: 2005-10-16 +Scope: private-use +%% +Type: language +Subtag: qua +Description: Quapaw +Added: 2009-07-29 +%% +Type: language +Subtag: qub +Description: Huallaga Huánuco Quechua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: quc +Description: K'iche' +Description: Quiché +Added: 2009-07-29 +%% +Type: language +Subtag: qud +Description: Calderón Highland Quichua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: quf +Description: Lambayeque Quechua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qug +Description: Chimborazo Highland Quichua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: quh +Description: South Bolivian Quechua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qui +Description: Quileute +Added: 2009-07-29 +%% +Type: language +Subtag: quk +Description: Chachapoyas Quechua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qul +Description: North Bolivian Quechua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qum +Description: Sipacapense +Added: 2009-07-29 +%% +Type: language +Subtag: qun +Description: Quinault +Added: 2009-07-29 +%% +Type: language +Subtag: qup +Description: Southern Pastaza Quechua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: quq +Description: Quinqui +Added: 2009-07-29 +%% +Type: language +Subtag: qur +Description: Yanahuanca Pasco Quechua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qus +Description: Santiago del Estero Quichua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: quv +Description: Sacapulteco +Added: 2009-07-29 +%% +Type: language +Subtag: quw +Description: Tena Lowland Quichua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qux +Description: Yauyos Quechua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: quy +Description: Ayacucho Quechua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: quz +Description: Cusco Quechua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qva +Description: Ambo-Pasco Quechua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qvc +Description: Cajamarca Quechua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qve +Description: Eastern Apurímac Quechua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qvh +Description: Huamalíes-Dos de Mayo Huánuco Quechua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qvi +Description: Imbabura Highland Quichua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qvj +Description: Loja Highland Quichua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qvl +Description: Cajatambo North Lima Quechua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qvm +Description: Margos-Yarowilca-Lauricocha Quechua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qvn +Description: North Junín Quechua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qvo +Description: Napo Lowland Quechua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qvp +Description: Pacaraos Quechua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qvs +Description: San Martín Quechua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qvw +Description: Huaylla Wanca Quechua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qvy +Description: Queyu +Added: 2009-07-29 +%% +Type: language +Subtag: qvz +Description: Northern Pastaza Quichua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qwa +Description: Corongo Ancash Quechua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qwc +Description: Classical Quechua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qwe +Description: Quechuan (family) +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: qwh +Description: Huaylas Ancash Quechua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qwm +Description: Kuman (Russia) +Added: 2009-07-29 +%% +Type: language +Subtag: qws +Description: Sihuas Ancash Quechua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qwt +Description: Kwalhioqua-Tlatskanai +Added: 2009-07-29 +%% +Type: language +Subtag: qxa +Description: Chiquián Ancash Quechua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qxc +Description: Chincha Quechua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qxh +Description: Panao Huánuco Quechua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qxl +Description: Salasaca Highland Quichua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qxn +Description: Northern Conchucos Ancash Quechua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qxo +Description: Southern Conchucos Ancash Quechua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qxp +Description: Puno Quechua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qxq +Description: Qashqa'i +Added: 2009-07-29 +%% +Type: language +Subtag: qxr +Description: Cañar Highland Quichua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qxs +Description: Southern Qiang +Added: 2009-07-29 +%% +Type: language +Subtag: qxt +Description: Santa Ana de Tusi Pasco Quechua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qxu +Description: Arequipa-La Unión Quechua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qxw +Description: Jauja Wanca Quechua +Added: 2009-07-29 +Macrolanguage: qu +%% +Type: language +Subtag: qya +Description: Quenya +Added: 2009-07-29 +%% +Type: language +Subtag: qyp +Description: Quiripi +Added: 2009-07-29 +%% +Type: language +Subtag: raa +Description: Dungmali +Added: 2009-07-29 +%% +Type: language +Subtag: rab +Description: Camling +Added: 2009-07-29 +%% +Type: language +Subtag: rac +Description: Rasawa +Added: 2009-07-29 +%% +Type: language +Subtag: rad +Description: Rade +Added: 2009-07-29 +%% +Type: language +Subtag: raf +Description: Western Meohang +Added: 2009-07-29 +%% +Type: language +Subtag: rag +Description: Logooli +Description: Lulogooli +Added: 2009-07-29 +Macrolanguage: luy +%% +Type: language +Subtag: rah +Description: Rabha +Added: 2009-07-29 +%% +Type: language +Subtag: rai +Description: Ramoaaina +Added: 2009-07-29 +%% +Type: language +Subtag: raj +Description: Rajasthani +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: rak +Description: Tulu-Bohuai +Added: 2009-07-29 +%% +Type: language +Subtag: ral +Description: Ralte +Added: 2009-07-29 +%% +Type: language +Subtag: ram +Description: Canela +Added: 2009-07-29 +%% +Type: language +Subtag: ran +Description: Riantana +Added: 2009-07-29 +%% +Type: language +Subtag: rao +Description: Rao +Added: 2009-07-29 +%% +Type: language +Subtag: rap +Description: Rapanui +Added: 2005-10-16 +%% +Type: language +Subtag: raq +Description: Saam +Added: 2009-07-29 +%% +Type: language +Subtag: rar +Description: Rarotongan +Description: Cook Islands Maori +Added: 2005-10-16 +%% +Type: language +Subtag: ras +Description: Tegali +Added: 2009-07-29 +%% +Type: language +Subtag: rat +Description: Razajerdi +Added: 2009-07-29 +%% +Type: language +Subtag: rau +Description: Raute +Added: 2009-07-29 +%% +Type: language +Subtag: rav +Description: Sampang +Added: 2009-07-29 +%% +Type: language +Subtag: raw +Description: Rawang +Added: 2009-07-29 +%% +Type: language +Subtag: rax +Description: Rang +Added: 2009-07-29 +%% +Type: language +Subtag: ray +Description: Rapa +Added: 2009-07-29 +%% +Type: language +Subtag: raz +Description: Rahambuu +Added: 2009-07-29 +%% +Type: language +Subtag: rbb +Description: Rumai Palaung +Added: 2009-07-29 +%% +Type: language +Subtag: rbk +Description: Northern Bontok +Added: 2010-03-11 +Macrolanguage: bnc +%% +Type: language +Subtag: rbl +Description: Miraya Bikol +Added: 2010-03-11 +Macrolanguage: bik +%% +Type: language +Subtag: rbp +Description: Barababaraba +Added: 2012-08-12 +%% +Type: language +Subtag: rcf +Description: Réunion Creole French +Added: 2009-07-29 +%% +Type: language +Subtag: rdb +Description: Rudbari +Added: 2009-07-29 +%% +Type: language +Subtag: rea +Description: Rerau +Added: 2009-07-29 +%% +Type: language +Subtag: reb +Description: Rembong +Added: 2009-07-29 +%% +Type: language +Subtag: ree +Description: Rejang Kayan +Added: 2009-07-29 +%% +Type: language +Subtag: reg +Description: Kara (Tanzania) +Added: 2009-07-29 +%% +Type: language +Subtag: rei +Description: Reli +Added: 2009-07-29 +%% +Type: language +Subtag: rej +Description: Rejang +Added: 2009-07-29 +%% +Type: language +Subtag: rel +Description: Rendille +Added: 2009-07-29 +%% +Type: language +Subtag: rem +Description: Remo +Added: 2009-07-29 +%% +Type: language +Subtag: ren +Description: Rengao +Added: 2009-07-29 +%% +Type: language +Subtag: rer +Description: Rer Bare +Added: 2009-07-29 +%% +Type: language +Subtag: res +Description: Reshe +Added: 2009-07-29 +%% +Type: language +Subtag: ret +Description: Retta +Added: 2009-07-29 +%% +Type: language +Subtag: rey +Description: Reyesano +Added: 2009-07-29 +%% +Type: language +Subtag: rga +Description: Roria +Added: 2009-07-29 +%% +Type: language +Subtag: rge +Description: Romano-Greek +Added: 2009-07-29 +%% +Type: language +Subtag: rgk +Description: Rangkas +Added: 2009-07-29 +%% +Type: language +Subtag: rgn +Description: Romagnol +Added: 2009-07-29 +%% +Type: language +Subtag: rgr +Description: Resígaro +Added: 2009-07-29 +%% +Type: language +Subtag: rgs +Description: Southern Roglai +Added: 2009-07-29 +%% +Type: language +Subtag: rgu +Description: Ringgou +Added: 2009-07-29 +%% +Type: language +Subtag: rhg +Description: Rohingya +Added: 2009-07-29 +%% +Type: language +Subtag: rhp +Description: Yahang +Added: 2009-07-29 +%% +Type: language +Subtag: ria +Description: Riang (India) +Added: 2009-07-29 +%% +Type: language +Subtag: rie +Description: Rien +Added: 2009-07-29 +%% +Type: language +Subtag: rif +Description: Tarifit +Added: 2009-07-29 +%% +Type: language +Subtag: ril +Description: Riang (Myanmar) +Added: 2009-07-29 +%% +Type: language +Subtag: rim +Description: Nyaturu +Added: 2009-07-29 +%% +Type: language +Subtag: rin +Description: Nungu +Added: 2009-07-29 +%% +Type: language +Subtag: rir +Description: Ribun +Added: 2009-07-29 +%% +Type: language +Subtag: rit +Description: Ritarungo +Added: 2009-07-29 +%% +Type: language +Subtag: riu +Description: Riung +Added: 2009-07-29 +%% +Type: language +Subtag: rjg +Description: Rajong +Added: 2009-07-29 +%% +Type: language +Subtag: rji +Description: Raji +Added: 2009-07-29 +%% +Type: language +Subtag: rjs +Description: Rajbanshi +Added: 2009-07-29 +%% +Type: language +Subtag: rka +Description: Kraol +Added: 2009-07-29 +%% +Type: language +Subtag: rkb +Description: Rikbaktsa +Added: 2009-07-29 +%% +Type: language +Subtag: rkh +Description: Rakahanga-Manihiki +Added: 2009-07-29 +%% +Type: language +Subtag: rki +Description: Rakhine +Added: 2009-07-29 +%% +Type: language +Subtag: rkm +Description: Marka +Added: 2009-07-29 +%% +Type: language +Subtag: rkt +Description: Rangpuri +Description: Kamta +Added: 2009-07-29 +%% +Type: language +Subtag: rma +Description: Rama +Added: 2009-07-29 +%% +Type: language +Subtag: rmb +Description: Rembarunga +Added: 2009-07-29 +%% +Type: language +Subtag: rmc +Description: Carpathian Romani +Added: 2009-07-29 +Macrolanguage: rom +%% +Type: language +Subtag: rmd +Description: Traveller Danish +Added: 2009-07-29 +%% +Type: language +Subtag: rme +Description: Angloromani +Added: 2009-07-29 +%% +Type: language +Subtag: rmf +Description: Kalo Finnish Romani +Added: 2009-07-29 +Macrolanguage: rom +%% +Type: language +Subtag: rmg +Description: Traveller Norwegian +Added: 2009-07-29 +%% +Type: language +Subtag: rmh +Description: Murkim +Added: 2009-07-29 +%% +Type: language +Subtag: rmi +Description: Lomavren +Added: 2009-07-29 +%% +Type: language +Subtag: rmk +Description: Romkun +Added: 2009-07-29 +%% +Type: language +Subtag: rml +Description: Baltic Romani +Added: 2009-07-29 +Macrolanguage: rom +%% +Type: language +Subtag: rmm +Description: Roma +Added: 2009-07-29 +%% +Type: language +Subtag: rmn +Description: Balkan Romani +Added: 2009-07-29 +Macrolanguage: rom +%% +Type: language +Subtag: rmo +Description: Sinte Romani +Added: 2009-07-29 +Macrolanguage: rom +%% +Type: language +Subtag: rmp +Description: Rempi +Added: 2009-07-29 +%% +Type: language +Subtag: rmq +Description: Caló +Added: 2010-03-11 +%% +Type: language +Subtag: rmr +Description: Caló +Added: 2009-07-29 +Deprecated: 2010-03-11 +Comments: see emx, rmq +%% +Type: language +Subtag: rms +Description: Romanian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: rmt +Description: Domari +Added: 2009-07-29 +%% +Type: language +Subtag: rmu +Description: Tavringer Romani +Added: 2009-07-29 +%% +Type: language +Subtag: rmv +Description: Romanova +Added: 2009-07-29 +%% +Type: language +Subtag: rmw +Description: Welsh Romani +Added: 2009-07-29 +Macrolanguage: rom +%% +Type: language +Subtag: rmx +Description: Romam +Added: 2009-07-29 +%% +Type: language +Subtag: rmy +Description: Vlax Romani +Added: 2009-07-29 +Macrolanguage: rom +%% +Type: language +Subtag: rmz +Description: Marma +Added: 2009-07-29 +%% +Type: language +Subtag: rna +Description: Runa +Added: 2009-07-29 +%% +Type: language +Subtag: rnd +Description: Ruund +Added: 2009-07-29 +%% +Type: language +Subtag: rng +Description: Ronga +Added: 2009-07-29 +%% +Type: language +Subtag: rnl +Description: Ranglong +Added: 2009-07-29 +%% +Type: language +Subtag: rnn +Description: Roon +Added: 2009-07-29 +%% +Type: language +Subtag: rnp +Description: Rongpo +Added: 2009-07-29 +%% +Type: language +Subtag: rnr +Description: Nari Nari +Added: 2012-08-20 +%% +Type: language +Subtag: rnw +Description: Rungwa +Added: 2009-07-29 +%% +Type: language +Subtag: roa +Description: Romance languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: rob +Description: Tae' +Added: 2009-07-29 +%% +Type: language +Subtag: roc +Description: Cacgia Roglai +Added: 2009-07-29 +%% +Type: language +Subtag: rod +Description: Rogo +Added: 2009-07-29 +%% +Type: language +Subtag: roe +Description: Ronji +Added: 2009-07-29 +%% +Type: language +Subtag: rof +Description: Rombo +Added: 2009-07-29 +%% +Type: language +Subtag: rog +Description: Northern Roglai +Added: 2009-07-29 +%% +Type: language +Subtag: rol +Description: Romblomanon +Added: 2009-07-29 +%% +Type: language +Subtag: rom +Description: Romany +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: roo +Description: Rotokas +Added: 2009-07-29 +%% +Type: language +Subtag: rop +Description: Kriol +Added: 2009-07-29 +%% +Type: language +Subtag: ror +Description: Rongga +Added: 2009-07-29 +%% +Type: language +Subtag: rou +Description: Runga +Added: 2009-07-29 +%% +Type: language +Subtag: row +Description: Dela-Oenale +Added: 2009-07-29 +%% +Type: language +Subtag: rpn +Description: Repanbitip +Added: 2009-07-29 +%% +Type: language +Subtag: rpt +Description: Rapting +Added: 2009-07-29 +%% +Type: language +Subtag: rri +Description: Ririo +Added: 2009-07-29 +%% +Type: language +Subtag: rro +Description: Waima +Added: 2009-07-29 +%% +Type: language +Subtag: rrt +Description: Arritinngithigh +Added: 2012-08-12 +%% +Type: language +Subtag: rsb +Description: Romano-Serbian +Added: 2009-07-29 +%% +Type: language +Subtag: rsi +Description: Rennellese Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: rsl +Description: Russian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: rtc +Description: Rungtu Chin +Added: 2012-08-12 +%% +Type: language +Subtag: rth +Description: Ratahan +Added: 2009-07-29 +%% +Type: language +Subtag: rtm +Description: Rotuman +Added: 2009-07-29 +%% +Type: language +Subtag: rtw +Description: Rathawi +Added: 2009-07-29 +%% +Type: language +Subtag: rub +Description: Gungu +Added: 2009-07-29 +%% +Type: language +Subtag: ruc +Description: Ruuli +Added: 2009-07-29 +%% +Type: language +Subtag: rue +Description: Rusyn +Added: 2009-07-29 +%% +Type: language +Subtag: ruf +Description: Luguru +Added: 2009-07-29 +%% +Type: language +Subtag: rug +Description: Roviana +Added: 2009-07-29 +%% +Type: language +Subtag: ruh +Description: Ruga +Added: 2009-07-29 +%% +Type: language +Subtag: rui +Description: Rufiji +Added: 2009-07-29 +%% +Type: language +Subtag: ruk +Description: Che +Added: 2009-07-29 +%% +Type: language +Subtag: ruo +Description: Istro Romanian +Added: 2009-07-29 +%% +Type: language +Subtag: rup +Description: Macedo-Romanian +Description: Aromanian +Description: Arumanian +Added: 2005-10-16 +%% +Type: language +Subtag: ruq +Description: Megleno Romanian +Added: 2009-07-29 +%% +Type: language +Subtag: rut +Description: Rutul +Added: 2009-07-29 +%% +Type: language +Subtag: ruu +Description: Lanas Lobu +Added: 2009-07-29 +%% +Type: language +Subtag: ruy +Description: Mala (Nigeria) +Added: 2009-07-29 +%% +Type: language +Subtag: ruz +Description: Ruma +Added: 2009-07-29 +%% +Type: language +Subtag: rwa +Description: Rawo +Added: 2009-07-29 +%% +Type: language +Subtag: rwk +Description: Rwa +Added: 2009-07-29 +%% +Type: language +Subtag: rwm +Description: Amba (Uganda) +Added: 2009-07-29 +%% +Type: language +Subtag: rwo +Description: Rawa +Added: 2009-07-29 +%% +Type: language +Subtag: rwr +Description: Marwari (India) +Added: 2009-07-29 +Macrolanguage: mwr +%% +Type: language +Subtag: ryn +Description: Northern Amami-Oshima +Added: 2009-07-29 +%% +Type: language +Subtag: rys +Description: Yaeyama +Added: 2009-07-29 +%% +Type: language +Subtag: ryu +Description: Central Okinawan +Added: 2009-07-29 +%% +Type: language +Subtag: saa +Description: Saba +Added: 2009-07-29 +%% +Type: language +Subtag: sab +Description: Buglere +Added: 2009-07-29 +%% +Type: language +Subtag: sac +Description: Meskwaki +Added: 2009-07-29 +%% +Type: language +Subtag: sad +Description: Sandawe +Added: 2005-10-16 +%% +Type: language +Subtag: sae +Description: Sabanê +Added: 2009-07-29 +%% +Type: language +Subtag: saf +Description: Safaliba +Added: 2009-07-29 +%% +Type: language +Subtag: sah +Description: Yakut +Added: 2005-10-16 +%% +Type: language +Subtag: sai +Description: South American Indian languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: saj +Description: Sahu +Added: 2009-07-29 +%% +Type: language +Subtag: sak +Description: Sake +Added: 2009-07-29 +%% +Type: language +Subtag: sal +Description: Salishan languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: sam +Description: Samaritan Aramaic +Added: 2005-10-16 +%% +Type: language +Subtag: sao +Description: Sause +Added: 2009-07-29 +%% +Type: language +Subtag: sap +Description: Sanapaná +Added: 2009-07-29 +%% +Type: language +Subtag: saq +Description: Samburu +Added: 2009-07-29 +%% +Type: language +Subtag: sar +Description: Saraveca +Added: 2009-07-29 +%% +Type: language +Subtag: sas +Description: Sasak +Added: 2005-10-16 +%% +Type: language +Subtag: sat +Description: Santali +Added: 2005-10-16 +%% +Type: language +Subtag: sau +Description: Saleman +Added: 2009-07-29 +%% +Type: language +Subtag: sav +Description: Saafi-Saafi +Added: 2009-07-29 +%% +Type: language +Subtag: saw +Description: Sawi +Added: 2009-07-29 +%% +Type: language +Subtag: sax +Description: Sa +Added: 2009-07-29 +%% +Type: language +Subtag: say +Description: Saya +Added: 2009-07-29 +%% +Type: language +Subtag: saz +Description: Saurashtra +Added: 2009-07-29 +%% +Type: language +Subtag: sba +Description: Ngambay +Added: 2009-07-29 +%% +Type: language +Subtag: sbb +Description: Simbo +Added: 2009-07-29 +%% +Type: language +Subtag: sbc +Description: Kele (Papua New Guinea) +Added: 2009-07-29 +%% +Type: language +Subtag: sbd +Description: Southern Samo +Added: 2009-07-29 +%% +Type: language +Subtag: sbe +Description: Saliba +Added: 2009-07-29 +%% +Type: language +Subtag: sbf +Description: Shabo +Added: 2009-07-29 +%% +Type: language +Subtag: sbg +Description: Seget +Added: 2009-07-29 +%% +Type: language +Subtag: sbh +Description: Sori-Harengan +Added: 2009-07-29 +%% +Type: language +Subtag: sbi +Description: Seti +Added: 2009-07-29 +%% +Type: language +Subtag: sbj +Description: Surbakhal +Added: 2009-07-29 +%% +Type: language +Subtag: sbk +Description: Safwa +Added: 2009-07-29 +%% +Type: language +Subtag: sbl +Description: Botolan Sambal +Added: 2009-07-29 +%% +Type: language +Subtag: sbm +Description: Sagala +Added: 2009-07-29 +%% +Type: language +Subtag: sbn +Description: Sindhi Bhil +Added: 2009-07-29 +%% +Type: language +Subtag: sbo +Description: Sabüm +Added: 2009-07-29 +%% +Type: language +Subtag: sbp +Description: Sangu (Tanzania) +Added: 2009-07-29 +%% +Type: language +Subtag: sbq +Description: Sileibi +Added: 2009-07-29 +%% +Type: language +Subtag: sbr +Description: Sembakung Murut +Added: 2009-07-29 +%% +Type: language +Subtag: sbs +Description: Subiya +Added: 2009-07-29 +%% +Type: language +Subtag: sbt +Description: Kimki +Added: 2009-07-29 +%% +Type: language +Subtag: sbu +Description: Stod Bhoti +Added: 2009-07-29 +%% +Type: language +Subtag: sbv +Description: Sabine +Added: 2009-07-29 +%% +Type: language +Subtag: sbw +Description: Simba +Added: 2009-07-29 +%% +Type: language +Subtag: sbx +Description: Seberuang +Added: 2009-07-29 +%% +Type: language +Subtag: sby +Description: Soli +Added: 2009-07-29 +%% +Type: language +Subtag: sbz +Description: Sara Kaba +Added: 2009-07-29 +%% +Type: language +Subtag: sca +Description: Sansu +Added: 2009-07-29 +Deprecated: 2012-08-12 +Preferred-Value: hle +%% +Type: language +Subtag: scb +Description: Chut +Added: 2009-07-29 +%% +Type: language +Subtag: sce +Description: Dongxiang +Added: 2009-07-29 +%% +Type: language +Subtag: scf +Description: San Miguel Creole French +Added: 2009-07-29 +%% +Type: language +Subtag: scg +Description: Sanggau +Added: 2009-07-29 +%% +Type: language +Subtag: sch +Description: Sakachep +Added: 2009-07-29 +%% +Type: language +Subtag: sci +Description: Sri Lankan Creole Malay +Added: 2009-07-29 +%% +Type: language +Subtag: sck +Description: Sadri +Added: 2009-07-29 +%% +Type: language +Subtag: scl +Description: Shina +Added: 2009-07-29 +%% +Type: language +Subtag: scn +Description: Sicilian +Added: 2005-10-16 +%% +Type: language +Subtag: sco +Description: Scots +Added: 2005-10-16 +%% +Type: language +Subtag: scp +Description: Helambu Sherpa +Added: 2009-07-29 +%% +Type: language +Subtag: scq +Description: Sa'och +Added: 2009-07-29 +%% +Type: language +Subtag: scs +Description: North Slavey +Added: 2009-07-29 +Macrolanguage: den +%% +Type: language +Subtag: scu +Description: Shumcho +Added: 2009-07-29 +%% +Type: language +Subtag: scv +Description: Sheni +Added: 2009-07-29 +%% +Type: language +Subtag: scw +Description: Sha +Added: 2009-07-29 +%% +Type: language +Subtag: scx +Description: Sicel +Added: 2009-07-29 +%% +Type: language +Subtag: sda +Description: Toraja-Sa'dan +Added: 2009-07-29 +%% +Type: language +Subtag: sdb +Description: Shabak +Added: 2009-07-29 +%% +Type: language +Subtag: sdc +Description: Sassarese Sardinian +Added: 2009-07-29 +Macrolanguage: sc +%% +Type: language +Subtag: sde +Description: Surubu +Added: 2009-07-29 +%% +Type: language +Subtag: sdf +Description: Sarli +Added: 2009-07-29 +%% +Type: language +Subtag: sdg +Description: Savi +Added: 2009-07-29 +%% +Type: language +Subtag: sdh +Description: Southern Kurdish +Added: 2009-07-29 +Macrolanguage: ku +%% +Type: language +Subtag: sdj +Description: Suundi +Added: 2009-07-29 +%% +Type: language +Subtag: sdk +Description: Sos Kundi +Added: 2009-07-29 +%% +Type: language +Subtag: sdl +Description: Saudi Arabian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: sdm +Description: Semandang +Added: 2009-07-29 +%% +Type: language +Subtag: sdn +Description: Gallurese Sardinian +Added: 2009-07-29 +Macrolanguage: sc +%% +Type: language +Subtag: sdo +Description: Bukar-Sadung Bidayuh +Added: 2009-07-29 +%% +Type: language +Subtag: sdp +Description: Sherdukpen +Added: 2009-07-29 +%% +Type: language +Subtag: sdr +Description: Oraon Sadri +Added: 2009-07-29 +%% +Type: language +Subtag: sds +Description: Sened +Added: 2009-07-29 +%% +Type: language +Subtag: sdt +Description: Shuadit +Added: 2009-07-29 +%% +Type: language +Subtag: sdu +Description: Sarudu +Added: 2009-07-29 +%% +Type: language +Subtag: sdv +Description: Eastern Sudanic languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: sdx +Description: Sibu Melanau +Added: 2009-07-29 +%% +Type: language +Subtag: sdz +Description: Sallands +Added: 2009-07-29 +%% +Type: language +Subtag: sea +Description: Semai +Added: 2009-07-29 +%% +Type: language +Subtag: seb +Description: Shempire Senoufo +Added: 2009-07-29 +%% +Type: language +Subtag: sec +Description: Sechelt +Added: 2009-07-29 +%% +Type: language +Subtag: sed +Description: Sedang +Added: 2009-07-29 +%% +Type: language +Subtag: see +Description: Seneca +Added: 2009-07-29 +%% +Type: language +Subtag: sef +Description: Cebaara Senoufo +Added: 2009-07-29 +%% +Type: language +Subtag: seg +Description: Segeju +Added: 2009-07-29 +%% +Type: language +Subtag: seh +Description: Sena +Added: 2009-07-29 +%% +Type: language +Subtag: sei +Description: Seri +Added: 2009-07-29 +%% +Type: language +Subtag: sej +Description: Sene +Added: 2009-07-29 +%% +Type: language +Subtag: sek +Description: Sekani +Added: 2009-07-29 +%% +Type: language +Subtag: sel +Description: Selkup +Added: 2005-10-16 +%% +Type: language +Subtag: sem +Description: Semitic languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: sen +Description: Nanerigé Sénoufo +Added: 2009-07-29 +%% +Type: language +Subtag: seo +Description: Suarmin +Added: 2009-07-29 +%% +Type: language +Subtag: sep +Description: Sìcìté Sénoufo +Added: 2009-07-29 +%% +Type: language +Subtag: seq +Description: Senara Sénoufo +Added: 2009-07-29 +%% +Type: language +Subtag: ser +Description: Serrano +Added: 2009-07-29 +%% +Type: language +Subtag: ses +Description: Koyraboro Senni Songhai +Added: 2009-07-29 +%% +Type: language +Subtag: set +Description: Sentani +Added: 2009-07-29 +%% +Type: language +Subtag: seu +Description: Serui-Laut +Added: 2009-07-29 +%% +Type: language +Subtag: sev +Description: Nyarafolo Senoufo +Added: 2009-07-29 +%% +Type: language +Subtag: sew +Description: Sewa Bay +Added: 2009-07-29 +%% +Type: language +Subtag: sey +Description: Secoya +Added: 2009-07-29 +%% +Type: language +Subtag: sez +Description: Senthang Chin +Added: 2009-07-29 +%% +Type: language +Subtag: sfb +Description: Langue des signes de Belgique Francophone +Description: French Belgian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: sfe +Description: Eastern Subanen +Added: 2012-08-12 +%% +Type: language +Subtag: sfm +Description: Small Flowery Miao +Added: 2009-07-29 +Macrolanguage: hmn +%% +Type: language +Subtag: sfs +Description: South African Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: sfw +Description: Sehwi +Added: 2009-07-29 +%% +Type: language +Subtag: sga +Description: Old Irish (to 900) +Added: 2005-10-16 +%% +Type: language +Subtag: sgb +Description: Mag-antsi Ayta +Added: 2009-07-29 +%% +Type: language +Subtag: sgc +Description: Kipsigis +Added: 2009-07-29 +Macrolanguage: kln +%% +Type: language +Subtag: sgd +Description: Surigaonon +Added: 2010-03-11 +%% +Type: language +Subtag: sge +Description: Segai +Added: 2009-07-29 +%% +Type: language +Subtag: sgg +Description: Swiss-German Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: sgh +Description: Shughni +Added: 2009-07-29 +%% +Type: language +Subtag: sgi +Description: Suga +Added: 2009-07-29 +%% +Type: language +Subtag: sgj +Description: Surgujia +Added: 2012-08-12 +%% +Type: language +Subtag: sgk +Description: Sangkong +Added: 2009-07-29 +%% +Type: language +Subtag: sgl +Description: Sanglechi-Ishkashimi +Added: 2009-07-29 +Deprecated: 2010-03-11 +Comments: see isk, sgy +%% +Type: language +Subtag: sgm +Description: Singa +Added: 2009-07-29 +%% +Type: language +Subtag: sgn +Description: Sign languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: sgo +Description: Songa +Added: 2009-07-29 +%% +Type: language +Subtag: sgp +Description: Singpho +Added: 2009-07-29 +%% +Type: language +Subtag: sgr +Description: Sangisari +Added: 2009-07-29 +%% +Type: language +Subtag: sgs +Description: Samogitian +Added: 2010-07-26 +%% +Type: language +Subtag: sgt +Description: Brokpake +Added: 2009-07-29 +%% +Type: language +Subtag: sgu +Description: Salas +Added: 2009-07-29 +%% +Type: language +Subtag: sgw +Description: Sebat Bet Gurage +Added: 2009-07-29 +%% +Type: language +Subtag: sgx +Description: Sierra Leone Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: sgy +Description: Sanglechi +Added: 2010-03-11 +%% +Type: language +Subtag: sgz +Description: Sursurunga +Added: 2009-07-29 +%% +Type: language +Subtag: sha +Description: Shall-Zwall +Added: 2009-07-29 +%% +Type: language +Subtag: shb +Description: Ninam +Added: 2009-07-29 +%% +Type: language +Subtag: shc +Description: Sonde +Added: 2009-07-29 +%% +Type: language +Subtag: shd +Description: Kundal Shahi +Added: 2010-03-11 +%% +Type: language +Subtag: she +Description: Sheko +Added: 2009-07-29 +%% +Type: language +Subtag: shg +Description: Shua +Added: 2009-07-29 +%% +Type: language +Subtag: shh +Description: Shoshoni +Added: 2009-07-29 +%% +Type: language +Subtag: shi +Description: Tachelhit +Added: 2009-07-29 +%% +Type: language +Subtag: shj +Description: Shatt +Added: 2009-07-29 +%% +Type: language +Subtag: shk +Description: Shilluk +Added: 2009-07-29 +%% +Type: language +Subtag: shl +Description: Shendu +Added: 2009-07-29 +%% +Type: language +Subtag: shm +Description: Shahrudi +Added: 2009-07-29 +%% +Type: language +Subtag: shn +Description: Shan +Added: 2005-10-16 +%% +Type: language +Subtag: sho +Description: Shanga +Added: 2009-07-29 +%% +Type: language +Subtag: shp +Description: Shipibo-Conibo +Added: 2009-07-29 +%% +Type: language +Subtag: shq +Description: Sala +Added: 2009-07-29 +%% +Type: language +Subtag: shr +Description: Shi +Added: 2009-07-29 +%% +Type: language +Subtag: shs +Description: Shuswap +Added: 2009-07-29 +%% +Type: language +Subtag: sht +Description: Shasta +Added: 2009-07-29 +%% +Type: language +Subtag: shu +Description: Chadian Arabic +Added: 2009-07-29 +Macrolanguage: ar +%% +Type: language +Subtag: shv +Description: Shehri +Added: 2009-07-29 +%% +Type: language +Subtag: shw +Description: Shwai +Added: 2009-07-29 +%% +Type: language +Subtag: shx +Description: She +Added: 2009-07-29 +%% +Type: language +Subtag: shy +Description: Tachawit +Added: 2009-07-29 +%% +Type: language +Subtag: shz +Description: Syenara Senoufo +Added: 2009-07-29 +%% +Type: language +Subtag: sia +Description: Akkala Sami +Added: 2009-07-29 +%% +Type: language +Subtag: sib +Description: Sebop +Added: 2009-07-29 +%% +Type: language +Subtag: sid +Description: Sidamo +Added: 2005-10-16 +%% +Type: language +Subtag: sie +Description: Simaa +Added: 2009-07-29 +%% +Type: language +Subtag: sif +Description: Siamou +Added: 2009-07-29 +%% +Type: language +Subtag: sig +Description: Paasaal +Added: 2009-07-29 +%% +Type: language +Subtag: sih +Description: Zire +Added: 2009-07-29 +%% +Type: language +Subtag: sii +Description: Shom Peng +Added: 2009-07-29 +%% +Type: language +Subtag: sij +Description: Numbami +Added: 2009-07-29 +%% +Type: language +Subtag: sik +Description: Sikiana +Added: 2009-07-29 +%% +Type: language +Subtag: sil +Description: Tumulung Sisaala +Added: 2009-07-29 +%% +Type: language +Subtag: sim +Description: Mende (Papua New Guinea) +Added: 2009-07-29 +%% +Type: language +Subtag: sio +Description: Siouan languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: sip +Description: Sikkimese +Added: 2009-07-29 +%% +Type: language +Subtag: siq +Description: Sonia +Added: 2009-07-29 +%% +Type: language +Subtag: sir +Description: Siri +Added: 2009-07-29 +%% +Type: language +Subtag: sis +Description: Siuslaw +Added: 2009-07-29 +%% +Type: language +Subtag: sit +Description: Sino-Tibetan languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: siu +Description: Sinagen +Added: 2009-07-29 +%% +Type: language +Subtag: siv +Description: Sumariup +Added: 2009-07-29 +%% +Type: language +Subtag: siw +Description: Siwai +Added: 2009-07-29 +%% +Type: language +Subtag: six +Description: Sumau +Added: 2009-07-29 +%% +Type: language +Subtag: siy +Description: Sivandi +Added: 2009-07-29 +%% +Type: language +Subtag: siz +Description: Siwi +Added: 2009-07-29 +%% +Type: language +Subtag: sja +Description: Epena +Added: 2009-07-29 +%% +Type: language +Subtag: sjb +Description: Sajau Basap +Added: 2009-07-29 +%% +Type: language +Subtag: sjd +Description: Kildin Sami +Added: 2009-07-29 +%% +Type: language +Subtag: sje +Description: Pite Sami +Added: 2009-07-29 +%% +Type: language +Subtag: sjg +Description: Assangori +Added: 2009-07-29 +%% +Type: language +Subtag: sjk +Description: Kemi Sami +Added: 2009-07-29 +%% +Type: language +Subtag: sjl +Description: Sajalong +Description: Miji +Added: 2009-07-29 +%% +Type: language +Subtag: sjm +Description: Mapun +Added: 2009-07-29 +%% +Type: language +Subtag: sjn +Description: Sindarin +Added: 2009-07-29 +%% +Type: language +Subtag: sjo +Description: Xibe +Added: 2009-07-29 +%% +Type: language +Subtag: sjp +Description: Surjapuri +Added: 2009-07-29 +%% +Type: language +Subtag: sjr +Description: Siar-Lak +Added: 2009-07-29 +%% +Type: language +Subtag: sjs +Description: Senhaja De Srair +Added: 2009-07-29 +%% +Type: language +Subtag: sjt +Description: Ter Sami +Added: 2009-07-29 +%% +Type: language +Subtag: sju +Description: Ume Sami +Added: 2009-07-29 +%% +Type: language +Subtag: sjw +Description: Shawnee +Added: 2009-07-29 +%% +Type: language +Subtag: ska +Description: Skagit +Added: 2009-07-29 +%% +Type: language +Subtag: skb +Description: Saek +Added: 2009-07-29 +%% +Type: language +Subtag: skc +Description: Ma Manda +Added: 2009-07-29 +%% +Type: language +Subtag: skd +Description: Southern Sierra Miwok +Added: 2009-07-29 +%% +Type: language +Subtag: ske +Description: Seke (Vanuatu) +Added: 2009-07-29 +%% +Type: language +Subtag: skf +Description: Sakirabiá +Added: 2009-07-29 +%% +Type: language +Subtag: skg +Description: Sakalava Malagasy +Added: 2009-07-29 +Macrolanguage: mg +%% +Type: language +Subtag: skh +Description: Sikule +Added: 2009-07-29 +%% +Type: language +Subtag: ski +Description: Sika +Added: 2009-07-29 +%% +Type: language +Subtag: skj +Description: Seke (Nepal) +Added: 2009-07-29 +%% +Type: language +Subtag: skk +Description: Sok +Added: 2009-07-29 +%% +Type: language +Subtag: skm +Description: Kutong +Added: 2009-07-29 +%% +Type: language +Subtag: skn +Description: Kolibugan Subanon +Added: 2009-07-29 +%% +Type: language +Subtag: sko +Description: Seko Tengah +Added: 2009-07-29 +%% +Type: language +Subtag: skp +Description: Sekapan +Added: 2009-07-29 +%% +Type: language +Subtag: skq +Description: Sininkere +Added: 2009-07-29 +%% +Type: language +Subtag: skr +Description: Seraiki +Added: 2009-07-29 +Macrolanguage: lah +%% +Type: language +Subtag: sks +Description: Maia +Added: 2009-07-29 +%% +Type: language +Subtag: skt +Description: Sakata +Added: 2009-07-29 +%% +Type: language +Subtag: sku +Description: Sakao +Added: 2009-07-29 +%% +Type: language +Subtag: skv +Description: Skou +Added: 2009-07-29 +%% +Type: language +Subtag: skw +Description: Skepi Creole Dutch +Added: 2009-07-29 +%% +Type: language +Subtag: skx +Description: Seko Padang +Added: 2009-07-29 +%% +Type: language +Subtag: sky +Description: Sikaiana +Added: 2009-07-29 +%% +Type: language +Subtag: skz +Description: Sekar +Added: 2009-07-29 +%% +Type: language +Subtag: sla +Description: Slavic languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: slc +Description: Sáliba +Added: 2009-07-29 +%% +Type: language +Subtag: sld +Description: Sissala +Added: 2009-07-29 +%% +Type: language +Subtag: sle +Description: Sholaga +Added: 2009-07-29 +%% +Type: language +Subtag: slf +Description: Swiss-Italian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: slg +Description: Selungai Murut +Added: 2009-07-29 +%% +Type: language +Subtag: slh +Description: Southern Puget Sound Salish +Added: 2009-07-29 +%% +Type: language +Subtag: sli +Description: Lower Silesian +Added: 2009-07-29 +%% +Type: language +Subtag: slj +Description: Salumá +Added: 2009-07-29 +%% +Type: language +Subtag: sll +Description: Salt-Yui +Added: 2009-07-29 +%% +Type: language +Subtag: slm +Description: Pangutaran Sama +Added: 2009-07-29 +%% +Type: language +Subtag: sln +Description: Salinan +Added: 2009-07-29 +%% +Type: language +Subtag: slp +Description: Lamaholot +Added: 2009-07-29 +%% +Type: language +Subtag: slq +Description: Salchuq +Added: 2009-07-29 +%% +Type: language +Subtag: slr +Description: Salar +Added: 2009-07-29 +%% +Type: language +Subtag: sls +Description: Singapore Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: slt +Description: Sila +Added: 2009-07-29 +%% +Type: language +Subtag: slu +Description: Selaru +Added: 2009-07-29 +%% +Type: language +Subtag: slw +Description: Sialum +Added: 2009-07-29 +%% +Type: language +Subtag: slx +Description: Salampasu +Added: 2009-07-29 +%% +Type: language +Subtag: sly +Description: Selayar +Added: 2009-07-29 +%% +Type: language +Subtag: slz +Description: Ma'ya +Added: 2009-07-29 +%% +Type: language +Subtag: sma +Description: Southern Sami +Added: 2005-10-16 +%% +Type: language +Subtag: smb +Description: Simbari +Added: 2009-07-29 +%% +Type: language +Subtag: smc +Description: Som +Added: 2009-07-29 +%% +Type: language +Subtag: smd +Description: Sama +Added: 2009-07-29 +%% +Type: language +Subtag: smf +Description: Auwe +Added: 2009-07-29 +%% +Type: language +Subtag: smg +Description: Simbali +Added: 2009-07-29 +%% +Type: language +Subtag: smh +Description: Samei +Added: 2009-07-29 +%% +Type: language +Subtag: smi +Description: Sami languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: smj +Description: Lule Sami +Added: 2005-10-16 +%% +Type: language +Subtag: smk +Description: Bolinao +Added: 2009-07-29 +%% +Type: language +Subtag: sml +Description: Central Sama +Added: 2009-07-29 +%% +Type: language +Subtag: smm +Description: Musasa +Added: 2009-07-29 +%% +Type: language +Subtag: smn +Description: Inari Sami +Added: 2005-10-16 +%% +Type: language +Subtag: smp +Description: Samaritan +Added: 2009-07-29 +%% +Type: language +Subtag: smq +Description: Samo +Added: 2009-07-29 +%% +Type: language +Subtag: smr +Description: Simeulue +Added: 2009-07-29 +%% +Type: language +Subtag: sms +Description: Skolt Sami +Added: 2005-10-16 +%% +Type: language +Subtag: smt +Description: Simte +Added: 2009-07-29 +%% +Type: language +Subtag: smu +Description: Somray +Added: 2009-07-29 +%% +Type: language +Subtag: smv +Description: Samvedi +Added: 2009-07-29 +%% +Type: language +Subtag: smw +Description: Sumbawa +Added: 2009-07-29 +%% +Type: language +Subtag: smx +Description: Samba +Added: 2009-07-29 +%% +Type: language +Subtag: smy +Description: Semnani +Added: 2009-07-29 +%% +Type: language +Subtag: smz +Description: Simeku +Added: 2009-07-29 +%% +Type: language +Subtag: snb +Description: Sebuyau +Added: 2009-07-29 +%% +Type: language +Subtag: snc +Description: Sinaugoro +Added: 2009-07-29 +%% +Type: language +Subtag: sne +Description: Bau Bidayuh +Added: 2009-07-29 +%% +Type: language +Subtag: snf +Description: Noon +Added: 2009-07-29 +%% +Type: language +Subtag: sng +Description: Sanga (Democratic Republic of Congo) +Added: 2009-07-29 +%% +Type: language +Subtag: snh +Description: Shinabo +Added: 2009-07-29 +%% +Type: language +Subtag: sni +Description: Sensi +Added: 2009-07-29 +%% +Type: language +Subtag: snj +Description: Riverain Sango +Added: 2009-07-29 +%% +Type: language +Subtag: snk +Description: Soninke +Added: 2005-10-16 +%% +Type: language +Subtag: snl +Description: Sangil +Added: 2009-07-29 +%% +Type: language +Subtag: snm +Description: Southern Ma'di +Added: 2009-07-29 +%% +Type: language +Subtag: snn +Description: Siona +Added: 2009-07-29 +%% +Type: language +Subtag: sno +Description: Snohomish +Added: 2009-07-29 +%% +Type: language +Subtag: snp +Description: Siane +Added: 2009-07-29 +%% +Type: language +Subtag: snq +Description: Sangu (Gabon) +Added: 2009-07-29 +%% +Type: language +Subtag: snr +Description: Sihan +Added: 2009-07-29 +%% +Type: language +Subtag: sns +Description: South West Bay +Description: Nahavaq +Added: 2009-07-29 +%% +Type: language +Subtag: snu +Description: Senggi +Description: Viid +Added: 2009-07-29 +%% +Type: language +Subtag: snv +Description: Sa'ban +Added: 2009-07-29 +%% +Type: language +Subtag: snw +Description: Selee +Added: 2009-07-29 +%% +Type: language +Subtag: snx +Description: Sam +Added: 2009-07-29 +%% +Type: language +Subtag: sny +Description: Saniyo-Hiyewe +Added: 2009-07-29 +%% +Type: language +Subtag: snz +Description: Sinsauru +Added: 2009-07-29 +%% +Type: language +Subtag: soa +Description: Thai Song +Added: 2009-07-29 +%% +Type: language +Subtag: sob +Description: Sobei +Added: 2009-07-29 +%% +Type: language +Subtag: soc +Description: So (Democratic Republic of Congo) +Added: 2009-07-29 +%% +Type: language +Subtag: sod +Description: Songoora +Added: 2009-07-29 +%% +Type: language +Subtag: soe +Description: Songomeno +Added: 2009-07-29 +%% +Type: language +Subtag: sog +Description: Sogdian +Added: 2005-10-16 +%% +Type: language +Subtag: soh +Description: Aka +Added: 2009-07-29 +%% +Type: language +Subtag: soi +Description: Sonha +Added: 2009-07-29 +%% +Type: language +Subtag: soj +Description: Soi +Added: 2009-07-29 +%% +Type: language +Subtag: sok +Description: Sokoro +Added: 2009-07-29 +%% +Type: language +Subtag: sol +Description: Solos +Added: 2009-07-29 +%% +Type: language +Subtag: son +Description: Songhai languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: soo +Description: Songo +Added: 2009-07-29 +%% +Type: language +Subtag: sop +Description: Songe +Added: 2009-07-29 +%% +Type: language +Subtag: soq +Description: Kanasi +Added: 2009-07-29 +%% +Type: language +Subtag: sor +Description: Somrai +Added: 2009-07-29 +%% +Type: language +Subtag: sos +Description: Seeku +Added: 2009-07-29 +%% +Type: language +Subtag: sou +Description: Southern Thai +Added: 2009-07-29 +%% +Type: language +Subtag: sov +Description: Sonsorol +Added: 2009-07-29 +%% +Type: language +Subtag: sow +Description: Sowanda +Added: 2009-07-29 +%% +Type: language +Subtag: sox +Description: Swo +Added: 2009-07-29 +%% +Type: language +Subtag: soy +Description: Miyobe +Added: 2009-07-29 +%% +Type: language +Subtag: soz +Description: Temi +Added: 2009-07-29 +%% +Type: language +Subtag: spb +Description: Sepa (Indonesia) +Added: 2009-07-29 +%% +Type: language +Subtag: spc +Description: Sapé +Added: 2009-07-29 +%% +Type: language +Subtag: spd +Description: Saep +Added: 2009-07-29 +%% +Type: language +Subtag: spe +Description: Sepa (Papua New Guinea) +Added: 2009-07-29 +%% +Type: language +Subtag: spg +Description: Sian +Added: 2009-07-29 +%% +Type: language +Subtag: spi +Description: Saponi +Added: 2009-07-29 +%% +Type: language +Subtag: spk +Description: Sengo +Added: 2009-07-29 +%% +Type: language +Subtag: spl +Description: Selepet +Added: 2009-07-29 +%% +Type: language +Subtag: spm +Description: Akukem +Added: 2009-07-29 +%% +Type: language +Subtag: spo +Description: Spokane +Added: 2009-07-29 +%% +Type: language +Subtag: spp +Description: Supyire Senoufo +Added: 2009-07-29 +%% +Type: language +Subtag: spq +Description: Loreto-Ucayali Spanish +Added: 2009-07-29 +%% +Type: language +Subtag: spr +Description: Saparua +Added: 2009-07-29 +%% +Type: language +Subtag: sps +Description: Saposa +Added: 2009-07-29 +%% +Type: language +Subtag: spt +Description: Spiti Bhoti +Added: 2009-07-29 +%% +Type: language +Subtag: spu +Description: Sapuan +Added: 2009-07-29 +%% +Type: language +Subtag: spv +Description: Sambalpuri +Description: Kosli +Added: 2012-08-12 +Macrolanguage: or +%% +Type: language +Subtag: spx +Description: South Picene +Added: 2009-07-29 +%% +Type: language +Subtag: spy +Description: Sabaot +Added: 2009-07-29 +Macrolanguage: kln +%% +Type: language +Subtag: sqa +Description: Shama-Sambuga +Added: 2009-07-29 +%% +Type: language +Subtag: sqh +Description: Shau +Added: 2009-07-29 +%% +Type: language +Subtag: sqj +Description: Albanian languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: sqk +Description: Albanian Sign Language +Added: 2012-08-12 +%% +Type: language +Subtag: sqm +Description: Suma +Added: 2009-07-29 +%% +Type: language +Subtag: sqn +Description: Susquehannock +Added: 2009-07-29 +%% +Type: language +Subtag: sqo +Description: Sorkhei +Added: 2009-07-29 +%% +Type: language +Subtag: sqq +Description: Sou +Added: 2009-07-29 +%% +Type: language +Subtag: sqr +Description: Siculo Arabic +Added: 2009-07-29 +%% +Type: language +Subtag: sqs +Description: Sri Lankan Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: sqt +Description: Soqotri +Added: 2009-07-29 +%% +Type: language +Subtag: squ +Description: Squamish +Added: 2009-07-29 +%% +Type: language +Subtag: sra +Description: Saruga +Added: 2009-07-29 +%% +Type: language +Subtag: srb +Description: Sora +Added: 2009-07-29 +%% +Type: language +Subtag: src +Description: Logudorese Sardinian +Added: 2009-07-29 +Macrolanguage: sc +%% +Type: language +Subtag: sre +Description: Sara +Added: 2009-07-29 +%% +Type: language +Subtag: srf +Description: Nafi +Added: 2009-07-29 +%% +Type: language +Subtag: srg +Description: Sulod +Added: 2009-07-29 +%% +Type: language +Subtag: srh +Description: Sarikoli +Added: 2009-07-29 +%% +Type: language +Subtag: sri +Description: Siriano +Added: 2009-07-29 +%% +Type: language +Subtag: srk +Description: Serudung Murut +Added: 2009-07-29 +%% +Type: language +Subtag: srl +Description: Isirawa +Added: 2009-07-29 +%% +Type: language +Subtag: srm +Description: Saramaccan +Added: 2009-07-29 +%% +Type: language +Subtag: srn +Description: Sranan Tongo +Added: 2005-10-16 +%% +Type: language +Subtag: sro +Description: Campidanese Sardinian +Added: 2009-07-29 +Macrolanguage: sc +%% +Type: language +Subtag: srq +Description: Sirionó +Added: 2009-07-29 +%% +Type: language +Subtag: srr +Description: Serer +Added: 2005-10-16 +%% +Type: language +Subtag: srs +Description: Sarsi +Added: 2009-07-29 +%% +Type: language +Subtag: srt +Description: Sauri +Added: 2009-07-29 +%% +Type: language +Subtag: sru +Description: Suruí +Added: 2009-07-29 +%% +Type: language +Subtag: srv +Description: Southern Sorsoganon +Added: 2009-07-29 +%% +Type: language +Subtag: srw +Description: Serua +Added: 2009-07-29 +%% +Type: language +Subtag: srx +Description: Sirmauri +Added: 2009-07-29 +%% +Type: language +Subtag: sry +Description: Sera +Added: 2009-07-29 +%% +Type: language +Subtag: srz +Description: Shahmirzadi +Added: 2009-07-29 +%% +Type: language +Subtag: ssa +Description: Nilo-Saharan languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: ssb +Description: Southern Sama +Added: 2009-07-29 +%% +Type: language +Subtag: ssc +Description: Suba-Simbiti +Added: 2009-07-29 +%% +Type: language +Subtag: ssd +Description: Siroi +Added: 2009-07-29 +%% +Type: language +Subtag: sse +Description: Balangingi +Description: Bangingih Sama +Added: 2009-07-29 +%% +Type: language +Subtag: ssf +Description: Thao +Added: 2009-07-29 +%% +Type: language +Subtag: ssg +Description: Seimat +Added: 2009-07-29 +%% +Type: language +Subtag: ssh +Description: Shihhi Arabic +Added: 2009-07-29 +Macrolanguage: ar +%% +Type: language +Subtag: ssi +Description: Sansi +Added: 2009-07-29 +%% +Type: language +Subtag: ssj +Description: Sausi +Added: 2009-07-29 +%% +Type: language +Subtag: ssk +Description: Sunam +Added: 2009-07-29 +%% +Type: language +Subtag: ssl +Description: Western Sisaala +Added: 2009-07-29 +%% +Type: language +Subtag: ssm +Description: Semnam +Added: 2009-07-29 +%% +Type: language +Subtag: ssn +Description: Waata +Added: 2009-07-29 +%% +Type: language +Subtag: sso +Description: Sissano +Added: 2009-07-29 +%% +Type: language +Subtag: ssp +Description: Spanish Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: ssq +Description: So'a +Added: 2009-07-29 +%% +Type: language +Subtag: ssr +Description: Swiss-French Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: sss +Description: Sô +Added: 2009-07-29 +%% +Type: language +Subtag: sst +Description: Sinasina +Added: 2009-07-29 +%% +Type: language +Subtag: ssu +Description: Susuami +Added: 2009-07-29 +%% +Type: language +Subtag: ssv +Description: Shark Bay +Added: 2009-07-29 +%% +Type: language +Subtag: ssx +Description: Samberigi +Added: 2009-07-29 +%% +Type: language +Subtag: ssy +Description: Saho +Added: 2009-07-29 +%% +Type: language +Subtag: ssz +Description: Sengseng +Added: 2009-07-29 +%% +Type: language +Subtag: sta +Description: Settla +Added: 2009-07-29 +%% +Type: language +Subtag: stb +Description: Northern Subanen +Added: 2009-07-29 +%% +Type: language +Subtag: std +Description: Sentinel +Added: 2009-07-29 +%% +Type: language +Subtag: ste +Description: Liana-Seti +Added: 2009-07-29 +%% +Type: language +Subtag: stf +Description: Seta +Added: 2009-07-29 +%% +Type: language +Subtag: stg +Description: Trieng +Added: 2009-07-29 +%% +Type: language +Subtag: sth +Description: Shelta +Added: 2009-07-29 +%% +Type: language +Subtag: sti +Description: Bulo Stieng +Added: 2009-07-29 +%% +Type: language +Subtag: stj +Description: Matya Samo +Added: 2009-07-29 +%% +Type: language +Subtag: stk +Description: Arammba +Added: 2009-07-29 +%% +Type: language +Subtag: stl +Description: Stellingwerfs +Added: 2009-07-29 +%% +Type: language +Subtag: stm +Description: Setaman +Added: 2009-07-29 +%% +Type: language +Subtag: stn +Description: Owa +Added: 2009-07-29 +%% +Type: language +Subtag: sto +Description: Stoney +Added: 2009-07-29 +%% +Type: language +Subtag: stp +Description: Southeastern Tepehuan +Added: 2009-07-29 +%% +Type: language +Subtag: stq +Description: Saterfriesisch +Added: 2009-07-29 +%% +Type: language +Subtag: str +Description: Straits Salish +Added: 2009-07-29 +%% +Type: language +Subtag: sts +Description: Shumashti +Added: 2009-07-29 +%% +Type: language +Subtag: stt +Description: Budeh Stieng +Added: 2009-07-29 +%% +Type: language +Subtag: stu +Description: Samtao +Added: 2009-07-29 +%% +Type: language +Subtag: stv +Description: Silt'e +Added: 2009-07-29 +%% +Type: language +Subtag: stw +Description: Satawalese +Added: 2009-07-29 +%% +Type: language +Subtag: sua +Description: Sulka +Added: 2009-07-29 +%% +Type: language +Subtag: sub +Description: Suku +Added: 2009-07-29 +%% +Type: language +Subtag: suc +Description: Western Subanon +Added: 2009-07-29 +%% +Type: language +Subtag: sue +Description: Suena +Added: 2009-07-29 +%% +Type: language +Subtag: sug +Description: Suganga +Added: 2009-07-29 +%% +Type: language +Subtag: sui +Description: Suki +Added: 2009-07-29 +%% +Type: language +Subtag: suj +Description: Shubi +Added: 2009-07-29 +%% +Type: language +Subtag: suk +Description: Sukuma +Added: 2005-10-16 +%% +Type: language +Subtag: sul +Description: Surigaonon +Added: 2009-07-29 +Deprecated: 2010-03-11 +Comments: see sgd, tgn +%% +Type: language +Subtag: sum +Description: Sumo-Mayangna +Added: 2009-07-29 +Deprecated: 2010-03-11 +Comments: see ulw, yan +%% +Type: language +Subtag: suq +Description: Suri +Added: 2009-07-29 +%% +Type: language +Subtag: sur +Description: Mwaghavul +Added: 2009-07-29 +%% +Type: language +Subtag: sus +Description: Susu +Added: 2005-10-16 +%% +Type: language +Subtag: sut +Description: Subtiaba +Added: 2009-07-29 +%% +Type: language +Subtag: suv +Description: Puroik +Added: 2009-07-29 +%% +Type: language +Subtag: suw +Description: Sumbwa +Added: 2009-07-29 +%% +Type: language +Subtag: sux +Description: Sumerian +Added: 2005-10-16 +%% +Type: language +Subtag: suy +Description: Suyá +Added: 2009-07-29 +%% +Type: language +Subtag: suz +Description: Sunwar +Added: 2009-07-29 +%% +Type: language +Subtag: sva +Description: Svan +Added: 2009-07-29 +%% +Type: language +Subtag: svb +Description: Ulau-Suain +Added: 2009-07-29 +%% +Type: language +Subtag: svc +Description: Vincentian Creole English +Added: 2009-07-29 +%% +Type: language +Subtag: sve +Description: Serili +Added: 2009-07-29 +%% +Type: language +Subtag: svk +Description: Slovakian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: svr +Description: Savara +Added: 2009-07-29 +%% +Type: language +Subtag: svs +Description: Savosavo +Added: 2009-07-29 +%% +Type: language +Subtag: svx +Description: Skalvian +Added: 2009-07-29 +%% +Type: language +Subtag: swb +Description: Maore Comorian +Added: 2009-07-29 +%% +Type: language +Subtag: swc +Description: Congo Swahili +Added: 2009-07-29 +Macrolanguage: sw +%% +Type: language +Subtag: swf +Description: Sere +Added: 2009-07-29 +%% +Type: language +Subtag: swg +Description: Swabian +Added: 2009-07-29 +%% +Type: language +Subtag: swh +Description: Swahili (individual language) +Description: Kiswahili +Added: 2009-07-29 +Macrolanguage: sw +%% +Type: language +Subtag: swi +Description: Sui +Added: 2009-07-29 +%% +Type: language +Subtag: swj +Description: Sira +Added: 2009-07-29 +%% +Type: language +Subtag: swk +Description: Malawi Sena +Added: 2009-07-29 +%% +Type: language +Subtag: swl +Description: Swedish Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: swm +Description: Samosa +Added: 2009-07-29 +%% +Type: language +Subtag: swn +Description: Sawknah +Added: 2009-07-29 +%% +Type: language +Subtag: swo +Description: Shanenawa +Added: 2009-07-29 +%% +Type: language +Subtag: swp +Description: Suau +Added: 2009-07-29 +%% +Type: language +Subtag: swq +Description: Sharwa +Added: 2009-07-29 +%% +Type: language +Subtag: swr +Description: Saweru +Added: 2009-07-29 +%% +Type: language +Subtag: sws +Description: Seluwasan +Added: 2009-07-29 +%% +Type: language +Subtag: swt +Description: Sawila +Added: 2009-07-29 +%% +Type: language +Subtag: swu +Description: Suwawa +Added: 2009-07-29 +%% +Type: language +Subtag: swv +Description: Shekhawati +Added: 2009-07-29 +Macrolanguage: mwr +%% +Type: language +Subtag: sww +Description: Sowa +Added: 2009-07-29 +%% +Type: language +Subtag: swx +Description: Suruahá +Added: 2009-07-29 +%% +Type: language +Subtag: swy +Description: Sarua +Added: 2009-07-29 +%% +Type: language +Subtag: sxb +Description: Suba +Added: 2009-07-29 +%% +Type: language +Subtag: sxc +Description: Sicanian +Added: 2009-07-29 +%% +Type: language +Subtag: sxe +Description: Sighu +Added: 2009-07-29 +%% +Type: language +Subtag: sxg +Description: Shixing +Added: 2009-07-29 +%% +Type: language +Subtag: sxk +Description: Southern Kalapuya +Added: 2009-07-29 +%% +Type: language +Subtag: sxl +Description: Selian +Added: 2009-07-29 +%% +Type: language +Subtag: sxm +Description: Samre +Added: 2009-07-29 +%% +Type: language +Subtag: sxn +Description: Sangir +Added: 2009-07-29 +%% +Type: language +Subtag: sxo +Description: Sorothaptic +Added: 2009-07-29 +%% +Type: language +Subtag: sxr +Description: Saaroa +Added: 2009-07-29 +%% +Type: language +Subtag: sxs +Description: Sasaru +Added: 2009-07-29 +%% +Type: language +Subtag: sxu +Description: Upper Saxon +Added: 2009-07-29 +%% +Type: language +Subtag: sxw +Description: Saxwe Gbe +Added: 2009-07-29 +%% +Type: language +Subtag: sya +Description: Siang +Added: 2009-07-29 +%% +Type: language +Subtag: syb +Description: Central Subanen +Added: 2009-07-29 +%% +Type: language +Subtag: syc +Description: Classical Syriac +Added: 2007-04-03 +%% +Type: language +Subtag: syd +Description: Samoyedic languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: syi +Description: Seki +Added: 2009-07-29 +%% +Type: language +Subtag: syk +Description: Sukur +Added: 2009-07-29 +%% +Type: language +Subtag: syl +Description: Sylheti +Added: 2009-07-29 +%% +Type: language +Subtag: sym +Description: Maya Samo +Added: 2009-07-29 +%% +Type: language +Subtag: syn +Description: Senaya +Added: 2009-07-29 +%% +Type: language +Subtag: syo +Description: Suoy +Added: 2009-07-29 +%% +Type: language +Subtag: syr +Description: Syriac +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: sys +Description: Sinyar +Added: 2009-07-29 +%% +Type: language +Subtag: syw +Description: Kagate +Added: 2009-07-29 +%% +Type: language +Subtag: syy +Description: Al-Sayyid Bedouin Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: sza +Description: Semelai +Added: 2009-07-29 +%% +Type: language +Subtag: szb +Description: Ngalum +Added: 2009-07-29 +%% +Type: language +Subtag: szc +Description: Semaq Beri +Added: 2009-07-29 +%% +Type: language +Subtag: szd +Description: Seru +Added: 2009-07-29 +%% +Type: language +Subtag: sze +Description: Seze +Added: 2009-07-29 +%% +Type: language +Subtag: szg +Description: Sengele +Added: 2009-07-29 +%% +Type: language +Subtag: szl +Description: Silesian +Added: 2009-07-29 +%% +Type: language +Subtag: szn +Description: Sula +Added: 2009-07-29 +%% +Type: language +Subtag: szp +Description: Suabo +Added: 2009-07-29 +%% +Type: language +Subtag: szv +Description: Isu (Fako Division) +Added: 2009-07-29 +%% +Type: language +Subtag: szw +Description: Sawai +Added: 2009-07-29 +%% +Type: language +Subtag: taa +Description: Lower Tanana +Added: 2009-07-29 +%% +Type: language +Subtag: tab +Description: Tabassaran +Added: 2009-07-29 +%% +Type: language +Subtag: tac +Description: Lowland Tarahumara +Added: 2009-07-29 +%% +Type: language +Subtag: tad +Description: Tause +Added: 2009-07-29 +%% +Type: language +Subtag: tae +Description: Tariana +Added: 2009-07-29 +%% +Type: language +Subtag: taf +Description: Tapirapé +Added: 2009-07-29 +%% +Type: language +Subtag: tag +Description: Tagoi +Added: 2009-07-29 +%% +Type: language +Subtag: tai +Description: Tai languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: taj +Description: Eastern Tamang +Added: 2009-07-29 +%% +Type: language +Subtag: tak +Description: Tala +Added: 2009-07-29 +%% +Type: language +Subtag: tal +Description: Tal +Added: 2009-07-29 +%% +Type: language +Subtag: tan +Description: Tangale +Added: 2009-07-29 +%% +Type: language +Subtag: tao +Description: Yami +Added: 2009-07-29 +%% +Type: language +Subtag: tap +Description: Taabwa +Added: 2009-07-29 +%% +Type: language +Subtag: taq +Description: Tamasheq +Added: 2009-07-29 +Macrolanguage: tmh +%% +Type: language +Subtag: tar +Description: Central Tarahumara +Added: 2009-07-29 +%% +Type: language +Subtag: tas +Description: Tay Boi +Added: 2009-07-29 +%% +Type: language +Subtag: tau +Description: Upper Tanana +Added: 2009-07-29 +%% +Type: language +Subtag: tav +Description: Tatuyo +Added: 2009-07-29 +%% +Type: language +Subtag: taw +Description: Tai +Added: 2009-07-29 +%% +Type: language +Subtag: tax +Description: Tamki +Added: 2009-07-29 +%% +Type: language +Subtag: tay +Description: Atayal +Added: 2009-07-29 +%% +Type: language +Subtag: taz +Description: Tocho +Added: 2009-07-29 +%% +Type: language +Subtag: tba +Description: Aikanã +Added: 2009-07-29 +%% +Type: language +Subtag: tbb +Description: Tapeba +Added: 2009-07-29 +%% +Type: language +Subtag: tbc +Description: Takia +Added: 2009-07-29 +%% +Type: language +Subtag: tbd +Description: Kaki Ae +Added: 2009-07-29 +%% +Type: language +Subtag: tbe +Description: Tanimbili +Added: 2009-07-29 +%% +Type: language +Subtag: tbf +Description: Mandara +Added: 2009-07-29 +%% +Type: language +Subtag: tbg +Description: North Tairora +Added: 2009-07-29 +%% +Type: language +Subtag: tbh +Description: Thurawal +Added: 2009-07-29 +%% +Type: language +Subtag: tbi +Description: Gaam +Added: 2009-07-29 +%% +Type: language +Subtag: tbj +Description: Tiang +Added: 2009-07-29 +%% +Type: language +Subtag: tbk +Description: Calamian Tagbanwa +Added: 2009-07-29 +%% +Type: language +Subtag: tbl +Description: Tboli +Added: 2009-07-29 +%% +Type: language +Subtag: tbm +Description: Tagbu +Added: 2009-07-29 +%% +Type: language +Subtag: tbn +Description: Barro Negro Tunebo +Added: 2009-07-29 +%% +Type: language +Subtag: tbo +Description: Tawala +Added: 2009-07-29 +%% +Type: language +Subtag: tbp +Description: Taworta +Description: Diebroud +Added: 2009-07-29 +%% +Type: language +Subtag: tbq +Description: Tibeto-Burman languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: tbr +Description: Tumtum +Added: 2009-07-29 +%% +Type: language +Subtag: tbs +Description: Tanguat +Added: 2009-07-29 +%% +Type: language +Subtag: tbt +Description: Tembo (Kitembo) +Added: 2009-07-29 +%% +Type: language +Subtag: tbu +Description: Tubar +Added: 2009-07-29 +%% +Type: language +Subtag: tbv +Description: Tobo +Added: 2009-07-29 +%% +Type: language +Subtag: tbw +Description: Tagbanwa +Added: 2009-07-29 +%% +Type: language +Subtag: tbx +Description: Kapin +Added: 2009-07-29 +%% +Type: language +Subtag: tby +Description: Tabaru +Added: 2009-07-29 +%% +Type: language +Subtag: tbz +Description: Ditammari +Added: 2009-07-29 +%% +Type: language +Subtag: tca +Description: Ticuna +Added: 2009-07-29 +%% +Type: language +Subtag: tcb +Description: Tanacross +Added: 2009-07-29 +%% +Type: language +Subtag: tcc +Description: Datooga +Added: 2009-07-29 +%% +Type: language +Subtag: tcd +Description: Tafi +Added: 2009-07-29 +%% +Type: language +Subtag: tce +Description: Southern Tutchone +Added: 2009-07-29 +%% +Type: language +Subtag: tcf +Description: Malinaltepec Me'phaa +Description: Malinaltepec Tlapanec +Added: 2009-07-29 +%% +Type: language +Subtag: tcg +Description: Tamagario +Added: 2009-07-29 +%% +Type: language +Subtag: tch +Description: Turks And Caicos Creole English +Added: 2009-07-29 +%% +Type: language +Subtag: tci +Description: Wára +Added: 2009-07-29 +%% +Type: language +Subtag: tck +Description: Tchitchege +Added: 2009-07-29 +%% +Type: language +Subtag: tcl +Description: Taman (Myanmar) +Added: 2009-07-29 +%% +Type: language +Subtag: tcm +Description: Tanahmerah +Added: 2009-07-29 +%% +Type: language +Subtag: tcn +Description: Tichurong +Added: 2009-07-29 +%% +Type: language +Subtag: tco +Description: Taungyo +Added: 2009-07-29 +%% +Type: language +Subtag: tcp +Description: Tawr Chin +Added: 2009-07-29 +%% +Type: language +Subtag: tcq +Description: Kaiy +Added: 2009-07-29 +%% +Type: language +Subtag: tcs +Description: Torres Strait Creole +Added: 2009-07-29 +%% +Type: language +Subtag: tct +Description: T'en +Added: 2009-07-29 +%% +Type: language +Subtag: tcu +Description: Southeastern Tarahumara +Added: 2009-07-29 +%% +Type: language +Subtag: tcw +Description: Tecpatlán Totonac +Added: 2009-07-29 +%% +Type: language +Subtag: tcx +Description: Toda +Added: 2009-07-29 +%% +Type: language +Subtag: tcy +Description: Tulu +Added: 2009-07-29 +%% +Type: language +Subtag: tcz +Description: Thado Chin +Added: 2009-07-29 +%% +Type: language +Subtag: tda +Description: Tagdal +Added: 2009-07-29 +%% +Type: language +Subtag: tdb +Description: Panchpargania +Added: 2009-07-29 +%% +Type: language +Subtag: tdc +Description: Emberá-Tadó +Added: 2009-07-29 +%% +Type: language +Subtag: tdd +Description: Tai Nüa +Added: 2009-07-29 +%% +Type: language +Subtag: tde +Description: Tiranige Diga Dogon +Added: 2010-03-11 +%% +Type: language +Subtag: tdf +Description: Talieng +Added: 2009-07-29 +%% +Type: language +Subtag: tdg +Description: Western Tamang +Added: 2009-07-29 +%% +Type: language +Subtag: tdh +Description: Thulung +Added: 2009-07-29 +%% +Type: language +Subtag: tdi +Description: Tomadino +Added: 2009-07-29 +%% +Type: language +Subtag: tdj +Description: Tajio +Added: 2009-07-29 +%% +Type: language +Subtag: tdk +Description: Tambas +Added: 2009-07-29 +%% +Type: language +Subtag: tdl +Description: Sur +Added: 2009-07-29 +%% +Type: language +Subtag: tdn +Description: Tondano +Added: 2009-07-29 +%% +Type: language +Subtag: tdo +Description: Teme +Added: 2009-07-29 +%% +Type: language +Subtag: tdq +Description: Tita +Added: 2009-07-29 +%% +Type: language +Subtag: tdr +Description: Todrah +Added: 2009-07-29 +%% +Type: language +Subtag: tds +Description: Doutai +Added: 2009-07-29 +%% +Type: language +Subtag: tdt +Description: Tetun Dili +Added: 2009-07-29 +%% +Type: language +Subtag: tdu +Description: Tempasuk Dusun +Added: 2009-07-29 +%% +Type: language +Subtag: tdv +Description: Toro +Added: 2009-07-29 +%% +Type: language +Subtag: tdx +Description: Tandroy-Mahafaly Malagasy +Added: 2009-07-29 +Macrolanguage: mg +%% +Type: language +Subtag: tdy +Description: Tadyawan +Added: 2009-07-29 +%% +Type: language +Subtag: tea +Description: Temiar +Added: 2009-07-29 +%% +Type: language +Subtag: teb +Description: Tetete +Added: 2009-07-29 +%% +Type: language +Subtag: tec +Description: Terik +Added: 2009-07-29 +Macrolanguage: kln +%% +Type: language +Subtag: ted +Description: Tepo Krumen +Added: 2009-07-29 +%% +Type: language +Subtag: tee +Description: Huehuetla Tepehua +Added: 2009-07-29 +%% +Type: language +Subtag: tef +Description: Teressa +Added: 2009-07-29 +%% +Type: language +Subtag: teg +Description: Teke-Tege +Added: 2009-07-29 +%% +Type: language +Subtag: teh +Description: Tehuelche +Added: 2009-07-29 +%% +Type: language +Subtag: tei +Description: Torricelli +Added: 2009-07-29 +%% +Type: language +Subtag: tek +Description: Ibali Teke +Added: 2009-07-29 +%% +Type: language +Subtag: tem +Description: Timne +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: ten +Description: Tama (Colombia) +Added: 2009-07-29 +%% +Type: language +Subtag: teo +Description: Teso +Added: 2009-07-29 +%% +Type: language +Subtag: tep +Description: Tepecano +Added: 2009-07-29 +%% +Type: language +Subtag: teq +Description: Temein +Added: 2009-07-29 +%% +Type: language +Subtag: ter +Description: Tereno +Added: 2005-10-16 +%% +Type: language +Subtag: tes +Description: Tengger +Added: 2009-07-29 +%% +Type: language +Subtag: tet +Description: Tetum +Added: 2005-10-16 +%% +Type: language +Subtag: teu +Description: Soo +Added: 2009-07-29 +%% +Type: language +Subtag: tev +Description: Teor +Added: 2009-07-29 +%% +Type: language +Subtag: tew +Description: Tewa (USA) +Added: 2009-07-29 +%% +Type: language +Subtag: tex +Description: Tennet +Added: 2009-07-29 +%% +Type: language +Subtag: tey +Description: Tulishi +Added: 2009-07-29 +%% +Type: language +Subtag: tfi +Description: Tofin Gbe +Added: 2009-07-29 +%% +Type: language +Subtag: tfn +Description: Tanaina +Added: 2009-07-29 +%% +Type: language +Subtag: tfo +Description: Tefaro +Added: 2009-07-29 +%% +Type: language +Subtag: tfr +Description: Teribe +Added: 2009-07-29 +%% +Type: language +Subtag: tft +Description: Ternate +Added: 2009-07-29 +%% +Type: language +Subtag: tga +Description: Sagalla +Added: 2009-07-29 +%% +Type: language +Subtag: tgb +Description: Tobilung +Added: 2009-07-29 +%% +Type: language +Subtag: tgc +Description: Tigak +Added: 2009-07-29 +%% +Type: language +Subtag: tgd +Description: Ciwogai +Added: 2009-07-29 +%% +Type: language +Subtag: tge +Description: Eastern Gorkha Tamang +Added: 2009-07-29 +%% +Type: language +Subtag: tgf +Description: Chalikha +Added: 2009-07-29 +%% +Type: language +Subtag: tgg +Description: Tangga +Added: 2009-07-29 +%% +Type: language +Subtag: tgh +Description: Tobagonian Creole English +Added: 2009-07-29 +%% +Type: language +Subtag: tgi +Description: Lawunuia +Added: 2009-07-29 +%% +Type: language +Subtag: tgj +Description: Tagin +Added: 2012-08-12 +%% +Type: language +Subtag: tgn +Description: Tandaganon +Added: 2010-03-11 +%% +Type: language +Subtag: tgo +Description: Sudest +Added: 2009-07-29 +%% +Type: language +Subtag: tgp +Description: Tangoa +Added: 2009-07-29 +%% +Type: language +Subtag: tgq +Description: Tring +Added: 2009-07-29 +%% +Type: language +Subtag: tgr +Description: Tareng +Added: 2009-07-29 +%% +Type: language +Subtag: tgs +Description: Nume +Added: 2009-07-29 +%% +Type: language +Subtag: tgt +Description: Central Tagbanwa +Added: 2009-07-29 +%% +Type: language +Subtag: tgu +Description: Tanggu +Added: 2009-07-29 +%% +Type: language +Subtag: tgv +Description: Tingui-Boto +Added: 2009-07-29 +%% +Type: language +Subtag: tgw +Description: Tagwana Senoufo +Added: 2009-07-29 +%% +Type: language +Subtag: tgx +Description: Tagish +Added: 2009-07-29 +%% +Type: language +Subtag: tgy +Description: Togoyo +Added: 2009-07-29 +%% +Type: language +Subtag: tgz +Description: Tagalaka +Added: 2012-08-12 +%% +Type: language +Subtag: thc +Description: Tai Hang Tong +Added: 2009-07-29 +%% +Type: language +Subtag: thd +Description: Thayore +Added: 2009-07-29 +%% +Type: language +Subtag: the +Description: Chitwania Tharu +Added: 2009-07-29 +%% +Type: language +Subtag: thf +Description: Thangmi +Added: 2009-07-29 +%% +Type: language +Subtag: thh +Description: Northern Tarahumara +Added: 2009-07-29 +%% +Type: language +Subtag: thi +Description: Tai Long +Added: 2009-07-29 +%% +Type: language +Subtag: thk +Description: Tharaka +Description: Kitharaka +Added: 2009-07-29 +%% +Type: language +Subtag: thl +Description: Dangaura Tharu +Added: 2009-07-29 +%% +Type: language +Subtag: thm +Description: Aheu +Added: 2009-07-29 +%% +Type: language +Subtag: thn +Description: Thachanadan +Added: 2009-07-29 +%% +Type: language +Subtag: thp +Description: Thompson +Added: 2009-07-29 +%% +Type: language +Subtag: thq +Description: Kochila Tharu +Added: 2009-07-29 +%% +Type: language +Subtag: thr +Description: Rana Tharu +Added: 2009-07-29 +%% +Type: language +Subtag: ths +Description: Thakali +Added: 2009-07-29 +%% +Type: language +Subtag: tht +Description: Tahltan +Added: 2009-07-29 +%% +Type: language +Subtag: thu +Description: Thuri +Added: 2009-07-29 +%% +Type: language +Subtag: thv +Description: Tahaggart Tamahaq +Added: 2009-07-29 +Macrolanguage: tmh +%% +Type: language +Subtag: thw +Description: Thudam +Added: 2009-07-29 +%% +Type: language +Subtag: thx +Description: The +Added: 2009-07-29 +%% +Type: language +Subtag: thy +Description: Tha +Added: 2009-07-29 +%% +Type: language +Subtag: thz +Description: Tayart Tamajeq +Added: 2009-07-29 +Macrolanguage: tmh +%% +Type: language +Subtag: tia +Description: Tidikelt Tamazight +Added: 2009-07-29 +%% +Type: language +Subtag: tic +Description: Tira +Added: 2009-07-29 +%% +Type: language +Subtag: tid +Description: Tidong +Added: 2009-07-29 +%% +Type: language +Subtag: tie +Description: Tingal +Added: 2009-07-29 +Deprecated: 2011-08-16 +Preferred-Value: ras +%% +Type: language +Subtag: tif +Description: Tifal +Added: 2009-07-29 +%% +Type: language +Subtag: tig +Description: Tigre +Added: 2005-10-16 +%% +Type: language +Subtag: tih +Description: Timugon Murut +Added: 2009-07-29 +%% +Type: language +Subtag: tii +Description: Tiene +Added: 2009-07-29 +%% +Type: language +Subtag: tij +Description: Tilung +Added: 2009-07-29 +%% +Type: language +Subtag: tik +Description: Tikar +Added: 2009-07-29 +%% +Type: language +Subtag: til +Description: Tillamook +Added: 2009-07-29 +%% +Type: language +Subtag: tim +Description: Timbe +Added: 2009-07-29 +%% +Type: language +Subtag: tin +Description: Tindi +Added: 2009-07-29 +%% +Type: language +Subtag: tio +Description: Teop +Added: 2009-07-29 +%% +Type: language +Subtag: tip +Description: Trimuris +Added: 2009-07-29 +%% +Type: language +Subtag: tiq +Description: Tiéfo +Added: 2009-07-29 +%% +Type: language +Subtag: tis +Description: Masadiit Itneg +Added: 2009-07-29 +%% +Type: language +Subtag: tit +Description: Tinigua +Added: 2009-07-29 +%% +Type: language +Subtag: tiu +Description: Adasen +Added: 2009-07-29 +%% +Type: language +Subtag: tiv +Description: Tiv +Added: 2005-10-16 +%% +Type: language +Subtag: tiw +Description: Tiwi +Added: 2009-07-29 +%% +Type: language +Subtag: tix +Description: Southern Tiwa +Added: 2009-07-29 +%% +Type: language +Subtag: tiy +Description: Tiruray +Added: 2009-07-29 +%% +Type: language +Subtag: tiz +Description: Tai Hongjin +Added: 2009-07-29 +%% +Type: language +Subtag: tja +Description: Tajuasohn +Added: 2009-07-29 +%% +Type: language +Subtag: tjg +Description: Tunjung +Added: 2009-07-29 +%% +Type: language +Subtag: tji +Description: Northern Tujia +Added: 2009-07-29 +%% +Type: language +Subtag: tjl +Description: Tai Laing +Added: 2012-08-12 +%% +Type: language +Subtag: tjm +Description: Timucua +Added: 2009-07-29 +%% +Type: language +Subtag: tjn +Description: Tonjon +Added: 2009-07-29 +%% +Type: language +Subtag: tjo +Description: Temacine Tamazight +Added: 2009-07-29 +%% +Type: language +Subtag: tjs +Description: Southern Tujia +Added: 2009-07-29 +%% +Type: language +Subtag: tju +Description: Tjurruru +Added: 2009-07-29 +%% +Type: language +Subtag: tka +Description: Truká +Added: 2009-07-29 +%% +Type: language +Subtag: tkb +Description: Buksa +Added: 2009-07-29 +%% +Type: language +Subtag: tkd +Description: Tukudede +Added: 2009-07-29 +%% +Type: language +Subtag: tke +Description: Takwane +Added: 2009-07-29 +%% +Type: language +Subtag: tkf +Description: Tukumanféd +Added: 2009-07-29 +%% +Type: language +Subtag: tkg +Description: Tesaka Malagasy +Added: 2011-08-16 +Macrolanguage: mg +%% +Type: language +Subtag: tkk +Description: Takpa +Added: 2009-07-29 +Deprecated: 2011-08-16 +Preferred-Value: twm +%% +Type: language +Subtag: tkl +Description: Tokelau +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: tkm +Description: Takelma +Added: 2009-07-29 +%% +Type: language +Subtag: tkn +Description: Toku-No-Shima +Added: 2009-07-29 +%% +Type: language +Subtag: tkp +Description: Tikopia +Added: 2009-07-29 +%% +Type: language +Subtag: tkq +Description: Tee +Added: 2009-07-29 +%% +Type: language +Subtag: tkr +Description: Tsakhur +Added: 2009-07-29 +%% +Type: language +Subtag: tks +Description: Takestani +Added: 2009-07-29 +%% +Type: language +Subtag: tkt +Description: Kathoriya Tharu +Added: 2009-07-29 +%% +Type: language +Subtag: tku +Description: Upper Necaxa Totonac +Added: 2009-07-29 +%% +Type: language +Subtag: tkw +Description: Teanu +Added: 2009-07-29 +%% +Type: language +Subtag: tkx +Description: Tangko +Added: 2009-07-29 +%% +Type: language +Subtag: tkz +Description: Takua +Added: 2009-07-29 +%% +Type: language +Subtag: tla +Description: Southwestern Tepehuan +Added: 2009-07-29 +%% +Type: language +Subtag: tlb +Description: Tobelo +Added: 2009-07-29 +%% +Type: language +Subtag: tlc +Description: Yecuatla Totonac +Added: 2009-07-29 +%% +Type: language +Subtag: tld +Description: Talaud +Added: 2009-07-29 +%% +Type: language +Subtag: tlf +Description: Telefol +Added: 2009-07-29 +%% +Type: language +Subtag: tlg +Description: Tofanma +Added: 2009-07-29 +%% +Type: language +Subtag: tlh +Description: Klingon +Description: tlhIngan-Hol +Added: 2005-10-16 +%% +Type: language +Subtag: tli +Description: Tlingit +Added: 2005-10-16 +%% +Type: language +Subtag: tlj +Description: Talinga-Bwisi +Added: 2009-07-29 +%% +Type: language +Subtag: tlk +Description: Taloki +Added: 2009-07-29 +%% +Type: language +Subtag: tll +Description: Tetela +Added: 2009-07-29 +%% +Type: language +Subtag: tlm +Description: Tolomako +Added: 2009-07-29 +%% +Type: language +Subtag: tln +Description: Talondo' +Added: 2009-07-29 +%% +Type: language +Subtag: tlo +Description: Talodi +Added: 2009-07-29 +%% +Type: language +Subtag: tlp +Description: Filomena Mata-Coahuitlán Totonac +Added: 2009-07-29 +%% +Type: language +Subtag: tlq +Description: Tai Loi +Added: 2009-07-29 +%% +Type: language +Subtag: tlr +Description: Talise +Added: 2009-07-29 +%% +Type: language +Subtag: tls +Description: Tambotalo +Added: 2009-07-29 +%% +Type: language +Subtag: tlt +Description: Teluti +Added: 2009-07-29 +%% +Type: language +Subtag: tlu +Description: Tulehu +Added: 2009-07-29 +%% +Type: language +Subtag: tlv +Description: Taliabu +Added: 2009-07-29 +%% +Type: language +Subtag: tlw +Description: South Wemale +Added: 2009-07-29 +Deprecated: 2012-08-12 +Preferred-Value: weo +%% +Type: language +Subtag: tlx +Description: Khehek +Added: 2009-07-29 +%% +Type: language +Subtag: tly +Description: Talysh +Added: 2009-07-29 +%% +Type: language +Subtag: tma +Description: Tama (Chad) +Added: 2009-07-29 +%% +Type: language +Subtag: tmb +Description: Katbol +Description: Avava +Added: 2009-07-29 +%% +Type: language +Subtag: tmc +Description: Tumak +Added: 2009-07-29 +%% +Type: language +Subtag: tmd +Description: Haruai +Added: 2009-07-29 +%% +Type: language +Subtag: tme +Description: Tremembé +Added: 2009-07-29 +%% +Type: language +Subtag: tmf +Description: Toba-Maskoy +Added: 2009-07-29 +%% +Type: language +Subtag: tmg +Description: Ternateño +Added: 2009-07-29 +%% +Type: language +Subtag: tmh +Description: Tamashek +Added: 2005-10-16 +Suppress-Script: Latn +Scope: macrolanguage +%% +Type: language +Subtag: tmi +Description: Tutuba +Added: 2009-07-29 +%% +Type: language +Subtag: tmj +Description: Samarokena +Added: 2009-07-29 +%% +Type: language +Subtag: tmk +Description: Northwestern Tamang +Added: 2009-07-29 +%% +Type: language +Subtag: tml +Description: Tamnim Citak +Added: 2009-07-29 +%% +Type: language +Subtag: tmm +Description: Tai Thanh +Added: 2009-07-29 +%% +Type: language +Subtag: tmn +Description: Taman (Indonesia) +Added: 2009-07-29 +%% +Type: language +Subtag: tmo +Description: Temoq +Added: 2009-07-29 +%% +Type: language +Subtag: tmp +Description: Tai Mène +Added: 2009-07-29 +%% +Type: language +Subtag: tmq +Description: Tumleo +Added: 2009-07-29 +%% +Type: language +Subtag: tmr +Description: Jewish Babylonian Aramaic (ca. 200-1200 CE) +Added: 2009-07-29 +%% +Type: language +Subtag: tms +Description: Tima +Added: 2009-07-29 +%% +Type: language +Subtag: tmt +Description: Tasmate +Added: 2009-07-29 +%% +Type: language +Subtag: tmu +Description: Iau +Added: 2009-07-29 +%% +Type: language +Subtag: tmv +Description: Tembo (Motembo) +Added: 2009-07-29 +%% +Type: language +Subtag: tmw +Description: Temuan +Added: 2009-07-29 +Macrolanguage: ms +%% +Type: language +Subtag: tmy +Description: Tami +Added: 2009-07-29 +%% +Type: language +Subtag: tmz +Description: Tamanaku +Added: 2009-07-29 +%% +Type: language +Subtag: tna +Description: Tacana +Added: 2009-07-29 +%% +Type: language +Subtag: tnb +Description: Western Tunebo +Added: 2009-07-29 +%% +Type: language +Subtag: tnc +Description: Tanimuca-Retuarã +Added: 2009-07-29 +%% +Type: language +Subtag: tnd +Description: Angosturas Tunebo +Added: 2009-07-29 +%% +Type: language +Subtag: tne +Description: Tinoc Kallahan +Added: 2009-07-29 +%% +Type: language +Subtag: tnf +Description: Tangshewi +Added: 2009-07-29 +Deprecated: 2010-03-11 +Preferred-Value: prs +%% +Type: language +Subtag: tng +Description: Tobanga +Added: 2009-07-29 +%% +Type: language +Subtag: tnh +Description: Maiani +Added: 2009-07-29 +%% +Type: language +Subtag: tni +Description: Tandia +Added: 2009-07-29 +%% +Type: language +Subtag: tnk +Description: Kwamera +Added: 2009-07-29 +%% +Type: language +Subtag: tnl +Description: Lenakel +Added: 2009-07-29 +%% +Type: language +Subtag: tnm +Description: Tabla +Added: 2009-07-29 +%% +Type: language +Subtag: tnn +Description: North Tanna +Added: 2009-07-29 +%% +Type: language +Subtag: tno +Description: Toromono +Added: 2009-07-29 +%% +Type: language +Subtag: tnp +Description: Whitesands +Added: 2009-07-29 +%% +Type: language +Subtag: tnq +Description: Taino +Added: 2009-07-29 +%% +Type: language +Subtag: tnr +Description: Bedik +Added: 2009-07-29 +%% +Type: language +Subtag: tns +Description: Tenis +Added: 2009-07-29 +%% +Type: language +Subtag: tnt +Description: Tontemboan +Added: 2009-07-29 +%% +Type: language +Subtag: tnu +Description: Tay Khang +Added: 2009-07-29 +%% +Type: language +Subtag: tnv +Description: Tangchangya +Added: 2009-07-29 +%% +Type: language +Subtag: tnw +Description: Tonsawang +Added: 2009-07-29 +%% +Type: language +Subtag: tnx +Description: Tanema +Added: 2009-07-29 +%% +Type: language +Subtag: tny +Description: Tongwe +Added: 2009-07-29 +%% +Type: language +Subtag: tnz +Description: Tonga (Thailand) +Added: 2009-07-29 +%% +Type: language +Subtag: tob +Description: Toba +Added: 2009-07-29 +%% +Type: language +Subtag: toc +Description: Coyutla Totonac +Added: 2009-07-29 +%% +Type: language +Subtag: tod +Description: Toma +Added: 2009-07-29 +%% +Type: language +Subtag: toe +Description: Tomedes +Added: 2009-07-29 +%% +Type: language +Subtag: tof +Description: Gizrra +Added: 2009-07-29 +%% +Type: language +Subtag: tog +Description: Tonga (Nyasa) +Added: 2005-10-16 +%% +Type: language +Subtag: toh +Description: Gitonga +Added: 2009-07-29 +%% +Type: language +Subtag: toi +Description: Tonga (Zambia) +Added: 2009-07-29 +%% +Type: language +Subtag: toj +Description: Tojolabal +Added: 2009-07-29 +%% +Type: language +Subtag: tol +Description: Tolowa +Added: 2009-07-29 +%% +Type: language +Subtag: tom +Description: Tombulu +Added: 2009-07-29 +%% +Type: language +Subtag: too +Description: Xicotepec De Juárez Totonac +Added: 2009-07-29 +%% +Type: language +Subtag: top +Description: Papantla Totonac +Added: 2009-07-29 +%% +Type: language +Subtag: toq +Description: Toposa +Added: 2009-07-29 +%% +Type: language +Subtag: tor +Description: Togbo-Vara Banda +Added: 2009-07-29 +%% +Type: language +Subtag: tos +Description: Highland Totonac +Added: 2009-07-29 +%% +Type: language +Subtag: tou +Description: Tho +Added: 2009-07-29 +%% +Type: language +Subtag: tov +Description: Upper Taromi +Added: 2009-07-29 +%% +Type: language +Subtag: tow +Description: Jemez +Added: 2009-07-29 +%% +Type: language +Subtag: tox +Description: Tobian +Added: 2009-07-29 +%% +Type: language +Subtag: toy +Description: Topoiyo +Added: 2009-07-29 +%% +Type: language +Subtag: toz +Description: To +Added: 2009-07-29 +%% +Type: language +Subtag: tpa +Description: Taupota +Added: 2009-07-29 +%% +Type: language +Subtag: tpc +Description: Azoyú Me'phaa +Description: Azoyú Tlapanec +Added: 2009-07-29 +%% +Type: language +Subtag: tpe +Description: Tippera +Added: 2009-07-29 +%% +Type: language +Subtag: tpf +Description: Tarpia +Added: 2009-07-29 +%% +Type: language +Subtag: tpg +Description: Kula +Added: 2009-07-29 +%% +Type: language +Subtag: tpi +Description: Tok Pisin +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: tpj +Description: Tapieté +Added: 2009-07-29 +%% +Type: language +Subtag: tpk +Description: Tupinikin +Added: 2009-07-29 +%% +Type: language +Subtag: tpl +Description: Tlacoapa Me'phaa +Description: Tlacoapa Tlapanec +Added: 2009-07-29 +%% +Type: language +Subtag: tpm +Description: Tampulma +Added: 2009-07-29 +%% +Type: language +Subtag: tpn +Description: Tupinambá +Added: 2009-07-29 +%% +Type: language +Subtag: tpo +Description: Tai Pao +Added: 2009-07-29 +%% +Type: language +Subtag: tpp +Description: Pisaflores Tepehua +Added: 2009-07-29 +%% +Type: language +Subtag: tpq +Description: Tukpa +Added: 2009-07-29 +%% +Type: language +Subtag: tpr +Description: Tuparí +Added: 2009-07-29 +%% +Type: language +Subtag: tpt +Description: Tlachichilco Tepehua +Added: 2009-07-29 +%% +Type: language +Subtag: tpu +Description: Tampuan +Added: 2009-07-29 +%% +Type: language +Subtag: tpv +Description: Tanapag +Added: 2009-07-29 +%% +Type: language +Subtag: tpw +Description: Tupí +Added: 2009-07-29 +%% +Type: language +Subtag: tpx +Description: Acatepec Me'phaa +Description: Acatepec Tlapanec +Added: 2009-07-29 +%% +Type: language +Subtag: tpy +Description: Trumai +Added: 2009-07-29 +%% +Type: language +Subtag: tpz +Description: Tinputz +Added: 2009-07-29 +%% +Type: language +Subtag: tqb +Description: Tembé +Added: 2009-07-29 +%% +Type: language +Subtag: tql +Description: Lehali +Added: 2009-07-29 +%% +Type: language +Subtag: tqm +Description: Turumsa +Added: 2009-07-29 +%% +Type: language +Subtag: tqn +Description: Tenino +Added: 2009-07-29 +%% +Type: language +Subtag: tqo +Description: Toaripi +Added: 2009-07-29 +%% +Type: language +Subtag: tqp +Description: Tomoip +Added: 2009-07-29 +%% +Type: language +Subtag: tqq +Description: Tunni +Added: 2009-07-29 +%% +Type: language +Subtag: tqr +Description: Torona +Added: 2009-07-29 +%% +Type: language +Subtag: tqt +Description: Western Totonac +Added: 2009-07-29 +%% +Type: language +Subtag: tqu +Description: Touo +Added: 2009-07-29 +%% +Type: language +Subtag: tqw +Description: Tonkawa +Added: 2009-07-29 +%% +Type: language +Subtag: tra +Description: Tirahi +Added: 2009-07-29 +%% +Type: language +Subtag: trb +Description: Terebu +Added: 2009-07-29 +%% +Type: language +Subtag: trc +Description: Copala Triqui +Added: 2009-07-29 +%% +Type: language +Subtag: trd +Description: Turi +Added: 2009-07-29 +%% +Type: language +Subtag: tre +Description: East Tarangan +Added: 2009-07-29 +%% +Type: language +Subtag: trf +Description: Trinidadian Creole English +Added: 2009-07-29 +%% +Type: language +Subtag: trg +Description: Lishán Didán +Added: 2009-07-29 +%% +Type: language +Subtag: trh +Description: Turaka +Added: 2009-07-29 +%% +Type: language +Subtag: tri +Description: Trió +Added: 2009-07-29 +%% +Type: language +Subtag: trj +Description: Toram +Added: 2009-07-29 +%% +Type: language +Subtag: trk +Description: Turkic languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: trl +Description: Traveller Scottish +Added: 2009-07-29 +%% +Type: language +Subtag: trm +Description: Tregami +Added: 2009-07-29 +%% +Type: language +Subtag: trn +Description: Trinitario +Added: 2009-07-29 +%% +Type: language +Subtag: tro +Description: Tarao Naga +Added: 2009-07-29 +%% +Type: language +Subtag: trp +Description: Kok Borok +Added: 2009-07-29 +%% +Type: language +Subtag: trq +Description: San Martín Itunyoso Triqui +Added: 2009-07-29 +%% +Type: language +Subtag: trr +Description: Taushiro +Added: 2009-07-29 +%% +Type: language +Subtag: trs +Description: Chicahuaxtla Triqui +Added: 2009-07-29 +%% +Type: language +Subtag: trt +Description: Tunggare +Added: 2009-07-29 +%% +Type: language +Subtag: tru +Description: Turoyo +Description: Surayt +Added: 2009-07-29 +%% +Type: language +Subtag: trv +Description: Taroko +Added: 2009-07-29 +%% +Type: language +Subtag: trw +Description: Torwali +Added: 2009-07-29 +%% +Type: language +Subtag: trx +Description: Tringgus-Sembaan Bidayuh +Added: 2009-07-29 +%% +Type: language +Subtag: try +Description: Turung +Added: 2009-07-29 +%% +Type: language +Subtag: trz +Description: Torá +Added: 2009-07-29 +%% +Type: language +Subtag: tsa +Description: Tsaangi +Added: 2009-07-29 +%% +Type: language +Subtag: tsb +Description: Tsamai +Added: 2009-07-29 +%% +Type: language +Subtag: tsc +Description: Tswa +Added: 2009-07-29 +%% +Type: language +Subtag: tsd +Description: Tsakonian +Added: 2009-07-29 +%% +Type: language +Subtag: tse +Description: Tunisian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: tsf +Description: Southwestern Tamang +Added: 2009-07-29 +%% +Type: language +Subtag: tsg +Description: Tausug +Added: 2009-07-29 +%% +Type: language +Subtag: tsh +Description: Tsuvan +Added: 2009-07-29 +%% +Type: language +Subtag: tsi +Description: Tsimshian +Added: 2005-10-16 +%% +Type: language +Subtag: tsj +Description: Tshangla +Added: 2009-07-29 +%% +Type: language +Subtag: tsk +Description: Tseku +Added: 2009-07-29 +%% +Type: language +Subtag: tsl +Description: Ts'ün-Lao +Added: 2009-07-29 +%% +Type: language +Subtag: tsm +Description: Turkish Sign Language +Description: Türk İşaret Dili +Added: 2009-07-29 +%% +Type: language +Subtag: tsp +Description: Northern Toussian +Added: 2009-07-29 +%% +Type: language +Subtag: tsq +Description: Thai Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: tsr +Description: Akei +Added: 2009-07-29 +%% +Type: language +Subtag: tss +Description: Taiwan Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: tst +Description: Tondi Songway Kiini +Added: 2011-08-16 +%% +Type: language +Subtag: tsu +Description: Tsou +Added: 2009-07-29 +%% +Type: language +Subtag: tsv +Description: Tsogo +Added: 2009-07-29 +%% +Type: language +Subtag: tsw +Description: Tsishingini +Added: 2009-07-29 +%% +Type: language +Subtag: tsx +Description: Mubami +Added: 2009-07-29 +%% +Type: language +Subtag: tsy +Description: Tebul Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: tsz +Description: Purepecha +Added: 2009-07-29 +%% +Type: language +Subtag: tta +Description: Tutelo +Added: 2009-07-29 +%% +Type: language +Subtag: ttb +Description: Gaa +Added: 2009-07-29 +%% +Type: language +Subtag: ttc +Description: Tektiteko +Added: 2009-07-29 +%% +Type: language +Subtag: ttd +Description: Tauade +Added: 2009-07-29 +%% +Type: language +Subtag: tte +Description: Bwanabwana +Added: 2009-07-29 +%% +Type: language +Subtag: ttf +Description: Tuotomb +Added: 2009-07-29 +%% +Type: language +Subtag: ttg +Description: Tutong +Added: 2009-07-29 +%% +Type: language +Subtag: tth +Description: Upper Ta'oih +Added: 2009-07-29 +%% +Type: language +Subtag: tti +Description: Tobati +Added: 2009-07-29 +%% +Type: language +Subtag: ttj +Description: Tooro +Added: 2009-07-29 +%% +Type: language +Subtag: ttk +Description: Totoro +Added: 2009-07-29 +%% +Type: language +Subtag: ttl +Description: Totela +Added: 2009-07-29 +%% +Type: language +Subtag: ttm +Description: Northern Tutchone +Added: 2009-07-29 +%% +Type: language +Subtag: ttn +Description: Towei +Added: 2009-07-29 +%% +Type: language +Subtag: tto +Description: Lower Ta'oih +Added: 2009-07-29 +%% +Type: language +Subtag: ttp +Description: Tombelala +Added: 2009-07-29 +%% +Type: language +Subtag: ttq +Description: Tawallammat Tamajaq +Added: 2009-07-29 +Macrolanguage: tmh +%% +Type: language +Subtag: ttr +Description: Tera +Added: 2009-07-29 +%% +Type: language +Subtag: tts +Description: Northeastern Thai +Added: 2009-07-29 +%% +Type: language +Subtag: ttt +Description: Muslim Tat +Added: 2009-07-29 +%% +Type: language +Subtag: ttu +Description: Torau +Added: 2009-07-29 +%% +Type: language +Subtag: ttv +Description: Titan +Added: 2009-07-29 +%% +Type: language +Subtag: ttw +Description: Long Wat +Added: 2009-07-29 +%% +Type: language +Subtag: tty +Description: Sikaritai +Added: 2009-07-29 +%% +Type: language +Subtag: ttz +Description: Tsum +Added: 2009-07-29 +%% +Type: language +Subtag: tua +Description: Wiarumus +Added: 2009-07-29 +%% +Type: language +Subtag: tub +Description: Tübatulabal +Added: 2009-07-29 +%% +Type: language +Subtag: tuc +Description: Mutu +Added: 2009-07-29 +%% +Type: language +Subtag: tud +Description: Tuxá +Added: 2009-07-29 +%% +Type: language +Subtag: tue +Description: Tuyuca +Added: 2009-07-29 +%% +Type: language +Subtag: tuf +Description: Central Tunebo +Added: 2009-07-29 +%% +Type: language +Subtag: tug +Description: Tunia +Added: 2009-07-29 +%% +Type: language +Subtag: tuh +Description: Taulil +Added: 2009-07-29 +%% +Type: language +Subtag: tui +Description: Tupuri +Added: 2009-07-29 +%% +Type: language +Subtag: tuj +Description: Tugutil +Added: 2009-07-29 +%% +Type: language +Subtag: tul +Description: Tula +Added: 2009-07-29 +%% +Type: language +Subtag: tum +Description: Tumbuka +Added: 2005-10-16 +%% +Type: language +Subtag: tun +Description: Tunica +Added: 2009-07-29 +%% +Type: language +Subtag: tuo +Description: Tucano +Added: 2009-07-29 +%% +Type: language +Subtag: tup +Description: Tupi languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: tuq +Description: Tedaga +Added: 2009-07-29 +%% +Type: language +Subtag: tus +Description: Tuscarora +Added: 2009-07-29 +%% +Type: language +Subtag: tut +Description: Altaic languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: tuu +Description: Tututni +Added: 2009-07-29 +%% +Type: language +Subtag: tuv +Description: Turkana +Added: 2009-07-29 +%% +Type: language +Subtag: tuw +Description: Tungus languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: tux +Description: Tuxináwa +Added: 2009-07-29 +%% +Type: language +Subtag: tuy +Description: Tugen +Added: 2009-07-29 +Macrolanguage: kln +%% +Type: language +Subtag: tuz +Description: Turka +Added: 2009-07-29 +%% +Type: language +Subtag: tva +Description: Vaghua +Added: 2009-07-29 +%% +Type: language +Subtag: tvd +Description: Tsuvadi +Added: 2009-07-29 +%% +Type: language +Subtag: tve +Description: Te'un +Added: 2009-07-29 +%% +Type: language +Subtag: tvk +Description: Southeast Ambrym +Added: 2009-07-29 +%% +Type: language +Subtag: tvl +Description: Tuvalu +Added: 2005-10-16 +Suppress-Script: Latn +%% +Type: language +Subtag: tvm +Description: Tela-Masbuar +Added: 2009-07-29 +%% +Type: language +Subtag: tvn +Description: Tavoyan +Added: 2009-07-29 +%% +Type: language +Subtag: tvo +Description: Tidore +Added: 2009-07-29 +%% +Type: language +Subtag: tvs +Description: Taveta +Added: 2009-07-29 +%% +Type: language +Subtag: tvt +Description: Tutsa Naga +Added: 2009-07-29 +%% +Type: language +Subtag: tvu +Description: Tunen +Added: 2012-08-12 +%% +Type: language +Subtag: tvw +Description: Sedoa +Added: 2009-07-29 +%% +Type: language +Subtag: tvy +Description: Timor Pidgin +Added: 2009-07-29 +%% +Type: language +Subtag: twa +Description: Twana +Added: 2009-07-29 +%% +Type: language +Subtag: twb +Description: Western Tawbuid +Added: 2009-07-29 +%% +Type: language +Subtag: twc +Description: Teshenawa +Added: 2009-07-29 +%% +Type: language +Subtag: twd +Description: Twents +Added: 2009-07-29 +%% +Type: language +Subtag: twe +Description: Tewa (Indonesia) +Added: 2009-07-29 +%% +Type: language +Subtag: twf +Description: Northern Tiwa +Added: 2009-07-29 +%% +Type: language +Subtag: twg +Description: Tereweng +Added: 2009-07-29 +%% +Type: language +Subtag: twh +Description: Tai Dón +Added: 2009-07-29 +%% +Type: language +Subtag: twl +Description: Tawara +Added: 2009-07-29 +%% +Type: language +Subtag: twm +Description: Tawang Monpa +Added: 2009-07-29 +%% +Type: language +Subtag: twn +Description: Twendi +Added: 2009-07-29 +%% +Type: language +Subtag: two +Description: Tswapong +Added: 2009-07-29 +%% +Type: language +Subtag: twp +Description: Ere +Added: 2009-07-29 +%% +Type: language +Subtag: twq +Description: Tasawaq +Added: 2009-07-29 +%% +Type: language +Subtag: twr +Description: Southwestern Tarahumara +Added: 2009-07-29 +%% +Type: language +Subtag: twt +Description: Turiwára +Added: 2009-07-29 +%% +Type: language +Subtag: twu +Description: Termanu +Added: 2009-07-29 +%% +Type: language +Subtag: tww +Description: Tuwari +Added: 2009-07-29 +%% +Type: language +Subtag: twx +Description: Tewe +Added: 2009-07-29 +%% +Type: language +Subtag: twy +Description: Tawoyan +Added: 2009-07-29 +%% +Type: language +Subtag: txa +Description: Tombonuo +Added: 2009-07-29 +%% +Type: language +Subtag: txb +Description: Tokharian B +Added: 2009-07-29 +%% +Type: language +Subtag: txc +Description: Tsetsaut +Added: 2009-07-29 +%% +Type: language +Subtag: txe +Description: Totoli +Added: 2009-07-29 +%% +Type: language +Subtag: txg +Description: Tangut +Added: 2009-07-29 +%% +Type: language +Subtag: txh +Description: Thracian +Added: 2009-07-29 +%% +Type: language +Subtag: txi +Description: Ikpeng +Added: 2009-07-29 +%% +Type: language +Subtag: txm +Description: Tomini +Added: 2009-07-29 +%% +Type: language +Subtag: txn +Description: West Tarangan +Added: 2009-07-29 +%% +Type: language +Subtag: txo +Description: Toto +Added: 2009-07-29 +%% +Type: language +Subtag: txq +Description: Tii +Added: 2009-07-29 +%% +Type: language +Subtag: txr +Description: Tartessian +Added: 2009-07-29 +%% +Type: language +Subtag: txs +Description: Tonsea +Added: 2009-07-29 +%% +Type: language +Subtag: txt +Description: Citak +Added: 2009-07-29 +%% +Type: language +Subtag: txu +Description: Kayapó +Added: 2009-07-29 +%% +Type: language +Subtag: txx +Description: Tatana +Added: 2009-07-29 +%% +Type: language +Subtag: txy +Description: Tanosy Malagasy +Added: 2009-07-29 +Macrolanguage: mg +%% +Type: language +Subtag: tya +Description: Tauya +Added: 2009-07-29 +%% +Type: language +Subtag: tye +Description: Kyenga +Added: 2009-07-29 +%% +Type: language +Subtag: tyh +Description: O'du +Added: 2009-07-29 +%% +Type: language +Subtag: tyi +Description: Teke-Tsaayi +Added: 2009-07-29 +%% +Type: language +Subtag: tyj +Description: Tai Do +Added: 2009-07-29 +%% +Type: language +Subtag: tyl +Description: Thu Lao +Added: 2009-07-29 +%% +Type: language +Subtag: tyn +Description: Kombai +Added: 2009-07-29 +%% +Type: language +Subtag: typ +Description: Thaypan +Added: 2009-07-29 +%% +Type: language +Subtag: tyr +Description: Tai Daeng +Added: 2009-07-29 +%% +Type: language +Subtag: tys +Description: Tày Sa Pa +Added: 2009-07-29 +%% +Type: language +Subtag: tyt +Description: Tày Tac +Added: 2009-07-29 +%% +Type: language +Subtag: tyu +Description: Kua +Added: 2009-07-29 +%% +Type: language +Subtag: tyv +Description: Tuvinian +Added: 2005-10-16 +%% +Type: language +Subtag: tyx +Description: Teke-Tyee +Added: 2009-07-29 +%% +Type: language +Subtag: tyz +Description: Tày +Added: 2009-07-29 +%% +Type: language +Subtag: tza +Description: Tanzanian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: tzh +Description: Tzeltal +Added: 2009-07-29 +%% +Type: language +Subtag: tzj +Description: Tz'utujil +Added: 2009-07-29 +%% +Type: language +Subtag: tzm +Description: Central Atlas Tamazight +Added: 2009-07-29 +%% +Type: language +Subtag: tzn +Description: Tugun +Added: 2009-07-29 +%% +Type: language +Subtag: tzo +Description: Tzotzil +Added: 2009-07-29 +%% +Type: language +Subtag: tzx +Description: Tabriak +Added: 2009-07-29 +%% +Type: language +Subtag: uam +Description: Uamué +Added: 2009-07-29 +%% +Type: language +Subtag: uan +Description: Kuan +Added: 2009-07-29 +%% +Type: language +Subtag: uar +Description: Tairuma +Added: 2009-07-29 +%% +Type: language +Subtag: uba +Description: Ubang +Added: 2009-07-29 +%% +Type: language +Subtag: ubi +Description: Ubi +Added: 2009-07-29 +%% +Type: language +Subtag: ubl +Description: Buhi'non Bikol +Added: 2010-03-11 +Macrolanguage: bik +%% +Type: language +Subtag: ubr +Description: Ubir +Added: 2009-07-29 +%% +Type: language +Subtag: ubu +Description: Umbu-Ungu +Added: 2009-07-29 +%% +Type: language +Subtag: uby +Description: Ubykh +Added: 2009-07-29 +%% +Type: language +Subtag: uda +Description: Uda +Added: 2009-07-29 +%% +Type: language +Subtag: ude +Description: Udihe +Added: 2009-07-29 +%% +Type: language +Subtag: udg +Description: Muduga +Added: 2009-07-29 +%% +Type: language +Subtag: udi +Description: Udi +Added: 2009-07-29 +%% +Type: language +Subtag: udj +Description: Ujir +Added: 2009-07-29 +%% +Type: language +Subtag: udl +Description: Wuzlam +Added: 2009-07-29 +%% +Type: language +Subtag: udm +Description: Udmurt +Added: 2005-10-16 +%% +Type: language +Subtag: udu +Description: Uduk +Added: 2009-07-29 +%% +Type: language +Subtag: ues +Description: Kioko +Added: 2009-07-29 +%% +Type: language +Subtag: ufi +Description: Ufim +Added: 2009-07-29 +%% +Type: language +Subtag: uga +Description: Ugaritic +Added: 2005-10-16 +%% +Type: language +Subtag: ugb +Description: Kuku-Ugbanh +Added: 2009-07-29 +%% +Type: language +Subtag: uge +Description: Ughele +Added: 2009-07-29 +%% +Type: language +Subtag: ugn +Description: Ugandan Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: ugo +Description: Ugong +Added: 2009-07-29 +%% +Type: language +Subtag: ugy +Description: Uruguayan Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: uha +Description: Uhami +Added: 2009-07-29 +%% +Type: language +Subtag: uhn +Description: Damal +Added: 2009-07-29 +%% +Type: language +Subtag: uis +Description: Uisai +Added: 2009-07-29 +%% +Type: language +Subtag: uiv +Description: Iyive +Added: 2009-07-29 +%% +Type: language +Subtag: uji +Description: Tanjijili +Added: 2009-07-29 +%% +Type: language +Subtag: uka +Description: Kaburi +Added: 2009-07-29 +%% +Type: language +Subtag: ukg +Description: Ukuriguma +Added: 2009-07-29 +%% +Type: language +Subtag: ukh +Description: Ukhwejo +Added: 2009-07-29 +%% +Type: language +Subtag: ukl +Description: Ukrainian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: ukp +Description: Ukpe-Bayobiri +Added: 2009-07-29 +%% +Type: language +Subtag: ukq +Description: Ukwa +Added: 2009-07-29 +%% +Type: language +Subtag: uks +Description: Urubú-Kaapor Sign Language +Description: Kaapor Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: uku +Description: Ukue +Added: 2009-07-29 +%% +Type: language +Subtag: ukw +Description: Ukwuani-Aboh-Ndoni +Added: 2009-07-29 +%% +Type: language +Subtag: uky +Description: Kuuk-Yak +Added: 2012-08-12 +%% +Type: language +Subtag: ula +Description: Fungwa +Added: 2009-07-29 +%% +Type: language +Subtag: ulb +Description: Ulukwumi +Added: 2009-07-29 +%% +Type: language +Subtag: ulc +Description: Ulch +Added: 2009-07-29 +%% +Type: language +Subtag: ulf +Description: Usku +Description: Afra +Added: 2009-07-29 +%% +Type: language +Subtag: uli +Description: Ulithian +Added: 2009-07-29 +%% +Type: language +Subtag: ulk +Description: Meriam +Added: 2009-07-29 +%% +Type: language +Subtag: ull +Description: Ullatan +Added: 2009-07-29 +%% +Type: language +Subtag: ulm +Description: Ulumanda' +Added: 2009-07-29 +%% +Type: language +Subtag: uln +Description: Unserdeutsch +Added: 2009-07-29 +%% +Type: language +Subtag: ulu +Description: Uma' Lung +Added: 2009-07-29 +%% +Type: language +Subtag: ulw +Description: Ulwa +Added: 2010-03-11 +%% +Type: language +Subtag: uma +Description: Umatilla +Added: 2009-07-29 +%% +Type: language +Subtag: umb +Description: Umbundu +Added: 2005-10-16 +%% +Type: language +Subtag: umc +Description: Marrucinian +Added: 2009-07-29 +%% +Type: language +Subtag: umd +Description: Umbindhamu +Added: 2009-07-29 +%% +Type: language +Subtag: umg +Description: Umbuygamu +Added: 2009-07-29 +%% +Type: language +Subtag: umi +Description: Ukit +Added: 2009-07-29 +%% +Type: language +Subtag: umm +Description: Umon +Added: 2009-07-29 +%% +Type: language +Subtag: umn +Description: Makyan Naga +Added: 2009-07-29 +%% +Type: language +Subtag: umo +Description: Umotína +Added: 2009-07-29 +%% +Type: language +Subtag: ump +Description: Umpila +Added: 2009-07-29 +%% +Type: language +Subtag: umr +Description: Umbugarla +Added: 2009-07-29 +%% +Type: language +Subtag: ums +Description: Pendau +Added: 2009-07-29 +%% +Type: language +Subtag: umu +Description: Munsee +Added: 2009-07-29 +Macrolanguage: del +%% +Type: language +Subtag: una +Description: North Watut +Added: 2009-07-29 +%% +Type: language +Subtag: und +Description: Undetermined +Added: 2005-10-16 +Scope: special +%% +Type: language +Subtag: une +Description: Uneme +Added: 2009-07-29 +%% +Type: language +Subtag: ung +Description: Ngarinyin +Added: 2009-07-29 +%% +Type: language +Subtag: unk +Description: Enawené-Nawé +Added: 2009-07-29 +%% +Type: language +Subtag: unm +Description: Unami +Added: 2009-07-29 +Macrolanguage: del +%% +Type: language +Subtag: unp +Description: Worora +Added: 2009-07-29 +Deprecated: 2012-08-12 +Comments: see wro, xgu +%% +Type: language +Subtag: unr +Description: Mundari +Added: 2009-07-29 +%% +Type: language +Subtag: unx +Description: Munda +Added: 2009-07-29 +%% +Type: language +Subtag: unz +Description: Unde Kaili +Added: 2009-07-29 +%% +Type: language +Subtag: uok +Description: Uokha +Added: 2009-07-29 +%% +Type: language +Subtag: upi +Description: Umeda +Added: 2009-07-29 +%% +Type: language +Subtag: upv +Description: Uripiv-Wala-Rano-Atchin +Added: 2009-07-29 +%% +Type: language +Subtag: ura +Description: Urarina +Added: 2009-07-29 +%% +Type: language +Subtag: urb +Description: Urubú-Kaapor +Description: Kaapor +Added: 2009-07-29 +%% +Type: language +Subtag: urc +Description: Urningangg +Added: 2009-07-29 +%% +Type: language +Subtag: ure +Description: Uru +Added: 2009-07-29 +%% +Type: language +Subtag: urf +Description: Uradhi +Added: 2009-07-29 +%% +Type: language +Subtag: urg +Description: Urigina +Added: 2009-07-29 +%% +Type: language +Subtag: urh +Description: Urhobo +Added: 2009-07-29 +%% +Type: language +Subtag: uri +Description: Urim +Added: 2009-07-29 +%% +Type: language +Subtag: urj +Description: Uralic languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: urk +Description: Urak Lawoi' +Added: 2009-07-29 +Macrolanguage: ms +%% +Type: language +Subtag: url +Description: Urali +Added: 2009-07-29 +%% +Type: language +Subtag: urm +Description: Urapmin +Added: 2009-07-29 +%% +Type: language +Subtag: urn +Description: Uruangnirin +Added: 2009-07-29 +%% +Type: language +Subtag: uro +Description: Ura (Papua New Guinea) +Added: 2009-07-29 +%% +Type: language +Subtag: urp +Description: Uru-Pa-In +Added: 2009-07-29 +%% +Type: language +Subtag: urr +Description: Lehalurup +Description: Löyöp +Added: 2009-07-29 +%% +Type: language +Subtag: urt +Description: Urat +Added: 2009-07-29 +%% +Type: language +Subtag: uru +Description: Urumi +Added: 2009-07-29 +%% +Type: language +Subtag: urv +Description: Uruava +Added: 2009-07-29 +%% +Type: language +Subtag: urw +Description: Sop +Added: 2009-07-29 +%% +Type: language +Subtag: urx +Description: Urimo +Added: 2009-07-29 +%% +Type: language +Subtag: ury +Description: Orya +Added: 2009-07-29 +%% +Type: language +Subtag: urz +Description: Uru-Eu-Wau-Wau +Added: 2009-07-29 +%% +Type: language +Subtag: usa +Description: Usarufa +Added: 2009-07-29 +%% +Type: language +Subtag: ush +Description: Ushojo +Added: 2009-07-29 +%% +Type: language +Subtag: usi +Description: Usui +Added: 2009-07-29 +%% +Type: language +Subtag: usk +Description: Usaghade +Added: 2009-07-29 +%% +Type: language +Subtag: usp +Description: Uspanteco +Added: 2009-07-29 +%% +Type: language +Subtag: usu +Description: Uya +Added: 2009-07-29 +%% +Type: language +Subtag: uta +Description: Otank +Added: 2009-07-29 +%% +Type: language +Subtag: ute +Description: Ute-Southern Paiute +Added: 2009-07-29 +%% +Type: language +Subtag: utp +Description: Amba (Solomon Islands) +Added: 2009-07-29 +%% +Type: language +Subtag: utr +Description: Etulo +Added: 2009-07-29 +%% +Type: language +Subtag: utu +Description: Utu +Added: 2009-07-29 +%% +Type: language +Subtag: uum +Description: Urum +Added: 2009-07-29 +%% +Type: language +Subtag: uun +Description: Kulon-Pazeh +Added: 2009-07-29 +%% +Type: language +Subtag: uur +Description: Ura (Vanuatu) +Added: 2009-07-29 +%% +Type: language +Subtag: uuu +Description: U +Added: 2009-07-29 +%% +Type: language +Subtag: uve +Description: West Uvean +Added: 2009-07-29 +%% +Type: language +Subtag: uvh +Description: Uri +Added: 2009-07-29 +%% +Type: language +Subtag: uvl +Description: Lote +Added: 2009-07-29 +%% +Type: language +Subtag: uwa +Description: Kuku-Uwanh +Added: 2009-07-29 +%% +Type: language +Subtag: uya +Description: Doko-Uyanga +Added: 2009-07-29 +%% +Type: language +Subtag: uzn +Description: Northern Uzbek +Added: 2009-07-29 +Macrolanguage: uz +%% +Type: language +Subtag: uzs +Description: Southern Uzbek +Added: 2009-07-29 +Macrolanguage: uz +%% +Type: language +Subtag: vaa +Description: Vaagri Booli +Added: 2009-07-29 +%% +Type: language +Subtag: vae +Description: Vale +Added: 2009-07-29 +%% +Type: language +Subtag: vaf +Description: Vafsi +Added: 2009-07-29 +%% +Type: language +Subtag: vag +Description: Vagla +Added: 2009-07-29 +%% +Type: language +Subtag: vah +Description: Varhadi-Nagpuri +Added: 2009-07-29 +%% +Type: language +Subtag: vai +Description: Vai +Added: 2005-10-16 +%% +Type: language +Subtag: vaj +Description: Vasekela Bushman +Added: 2009-07-29 +%% +Type: language +Subtag: val +Description: Vehes +Added: 2009-07-29 +%% +Type: language +Subtag: vam +Description: Vanimo +Added: 2009-07-29 +%% +Type: language +Subtag: van +Description: Valman +Added: 2009-07-29 +%% +Type: language +Subtag: vao +Description: Vao +Added: 2009-07-29 +%% +Type: language +Subtag: vap +Description: Vaiphei +Added: 2009-07-29 +%% +Type: language +Subtag: var +Description: Huarijio +Added: 2009-07-29 +%% +Type: language +Subtag: vas +Description: Vasavi +Added: 2009-07-29 +%% +Type: language +Subtag: vau +Description: Vanuma +Added: 2009-07-29 +%% +Type: language +Subtag: vav +Description: Varli +Added: 2009-07-29 +%% +Type: language +Subtag: vay +Description: Wayu +Added: 2009-07-29 +%% +Type: language +Subtag: vbb +Description: Southeast Babar +Added: 2009-07-29 +%% +Type: language +Subtag: vbk +Description: Southwestern Bontok +Added: 2010-03-11 +Macrolanguage: bnc +%% +Type: language +Subtag: vec +Description: Venetian +Added: 2009-07-29 +%% +Type: language +Subtag: ved +Description: Veddah +Added: 2009-07-29 +%% +Type: language +Subtag: vel +Description: Veluws +Added: 2009-07-29 +%% +Type: language +Subtag: vem +Description: Vemgo-Mabas +Added: 2009-07-29 +%% +Type: language +Subtag: veo +Description: Ventureño +Added: 2009-07-29 +%% +Type: language +Subtag: vep +Description: Veps +Added: 2009-07-29 +%% +Type: language +Subtag: ver +Description: Mom Jango +Added: 2009-07-29 +%% +Type: language +Subtag: vgr +Description: Vaghri +Added: 2009-07-29 +%% +Type: language +Subtag: vgt +Description: Vlaamse Gebarentaal +Description: Flemish Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: vic +Description: Virgin Islands Creole English +Added: 2009-07-29 +%% +Type: language +Subtag: vid +Description: Vidunda +Added: 2009-07-29 +%% +Type: language +Subtag: vif +Description: Vili +Added: 2009-07-29 +%% +Type: language +Subtag: vig +Description: Viemo +Added: 2009-07-29 +%% +Type: language +Subtag: vil +Description: Vilela +Added: 2009-07-29 +%% +Type: language +Subtag: vin +Description: Vinza +Added: 2009-07-29 +%% +Type: language +Subtag: vis +Description: Vishavan +Added: 2009-07-29 +%% +Type: language +Subtag: vit +Description: Viti +Added: 2009-07-29 +%% +Type: language +Subtag: viv +Description: Iduna +Added: 2009-07-29 +%% +Type: language +Subtag: vka +Description: Kariyarra +Added: 2009-07-29 +%% +Type: language +Subtag: vki +Description: Ija-Zuba +Added: 2009-07-29 +%% +Type: language +Subtag: vkj +Description: Kujarge +Added: 2009-07-29 +%% +Type: language +Subtag: vkk +Description: Kaur +Added: 2009-07-29 +Macrolanguage: ms +%% +Type: language +Subtag: vkl +Description: Kulisusu +Added: 2009-07-29 +%% +Type: language +Subtag: vkm +Description: Kamakan +Added: 2009-07-29 +%% +Type: language +Subtag: vko +Description: Kodeoha +Added: 2009-07-29 +%% +Type: language +Subtag: vkp +Description: Korlai Creole Portuguese +Added: 2009-07-29 +%% +Type: language +Subtag: vkt +Description: Tenggarong Kutai Malay +Added: 2009-07-29 +Macrolanguage: ms +%% +Type: language +Subtag: vku +Description: Kurrama +Added: 2009-07-29 +%% +Type: language +Subtag: vlp +Description: Valpei +Added: 2009-07-29 +%% +Type: language +Subtag: vls +Description: Vlaams +Added: 2009-07-29 +%% +Type: language +Subtag: vma +Description: Martuyhunira +Added: 2009-07-29 +%% +Type: language +Subtag: vmb +Description: Mbabaram +Added: 2009-07-29 +%% +Type: language +Subtag: vmc +Description: Juxtlahuaca Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: vmd +Description: Mudu Koraga +Added: 2009-07-29 +%% +Type: language +Subtag: vme +Description: East Masela +Added: 2009-07-29 +%% +Type: language +Subtag: vmf +Description: Mainfränkisch +Added: 2009-07-29 +%% +Type: language +Subtag: vmg +Description: Minigir +Added: 2009-07-29 +%% +Type: language +Subtag: vmh +Description: Maraghei +Added: 2009-07-29 +%% +Type: language +Subtag: vmi +Description: Miwa +Added: 2009-07-29 +%% +Type: language +Subtag: vmj +Description: Ixtayutla Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: vmk +Description: Makhuwa-Shirima +Added: 2009-07-29 +%% +Type: language +Subtag: vml +Description: Malgana +Added: 2009-07-29 +%% +Type: language +Subtag: vmm +Description: Mitlatongo Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: vmp +Description: Soyaltepec Mazatec +Added: 2009-07-29 +%% +Type: language +Subtag: vmq +Description: Soyaltepec Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: vmr +Description: Marenje +Added: 2009-07-29 +%% +Type: language +Subtag: vms +Description: Moksela +Added: 2009-07-29 +%% +Type: language +Subtag: vmu +Description: Muluridyi +Added: 2009-07-29 +%% +Type: language +Subtag: vmv +Description: Valley Maidu +Added: 2009-07-29 +%% +Type: language +Subtag: vmw +Description: Makhuwa +Added: 2009-07-29 +%% +Type: language +Subtag: vmx +Description: Tamazola Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: vmy +Description: Ayautla Mazatec +Added: 2009-07-29 +%% +Type: language +Subtag: vmz +Description: Mazatlán Mazatec +Added: 2009-07-29 +%% +Type: language +Subtag: vnk +Description: Vano +Description: Lovono +Added: 2009-07-29 +%% +Type: language +Subtag: vnm +Description: Vinmavis +Description: Neve'ei +Added: 2009-07-29 +%% +Type: language +Subtag: vnp +Description: Vunapu +Added: 2009-07-29 +%% +Type: language +Subtag: vor +Description: Voro +Added: 2009-07-29 +%% +Type: language +Subtag: vot +Description: Votic +Added: 2005-10-16 +%% +Type: language +Subtag: vra +Description: Vera'a +Added: 2009-07-29 +%% +Type: language +Subtag: vro +Description: Võro +Added: 2009-07-29 +Macrolanguage: et +%% +Type: language +Subtag: vrs +Description: Varisi +Added: 2009-07-29 +%% +Type: language +Subtag: vrt +Description: Burmbar +Description: Banam Bay +Added: 2009-07-29 +%% +Type: language +Subtag: vsi +Description: Moldova Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: vsl +Description: Venezuelan Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: vsv +Description: Valencian Sign Language +Description: Llengua de signes valenciana +Added: 2009-07-29 +%% +Type: language +Subtag: vto +Description: Vitou +Added: 2009-07-29 +%% +Type: language +Subtag: vum +Description: Vumbu +Added: 2009-07-29 +%% +Type: language +Subtag: vun +Description: Vunjo +Added: 2009-07-29 +%% +Type: language +Subtag: vut +Description: Vute +Added: 2009-07-29 +%% +Type: language +Subtag: vwa +Description: Awa (China) +Added: 2009-07-29 +%% +Type: language +Subtag: waa +Description: Walla Walla +Added: 2009-07-29 +%% +Type: language +Subtag: wab +Description: Wab +Added: 2009-07-29 +%% +Type: language +Subtag: wac +Description: Wasco-Wishram +Added: 2009-07-29 +%% +Type: language +Subtag: wad +Description: Wandamen +Added: 2009-07-29 +%% +Type: language +Subtag: wae +Description: Walser +Added: 2009-07-29 +%% +Type: language +Subtag: waf +Description: Wakoná +Added: 2009-07-29 +%% +Type: language +Subtag: wag +Description: Wa'ema +Added: 2009-07-29 +%% +Type: language +Subtag: wah +Description: Watubela +Added: 2009-07-29 +%% +Type: language +Subtag: wai +Description: Wares +Added: 2009-07-29 +%% +Type: language +Subtag: waj +Description: Waffa +Added: 2009-07-29 +%% +Type: language +Subtag: wak +Description: Wakashan languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: wal +Description: Wolaytta +Description: Wolaitta +Added: 2005-10-16 +%% +Type: language +Subtag: wam +Description: Wampanoag +Added: 2009-07-29 +%% +Type: language +Subtag: wan +Description: Wan +Added: 2009-07-29 +%% +Type: language +Subtag: wao +Description: Wappo +Added: 2009-07-29 +%% +Type: language +Subtag: wap +Description: Wapishana +Added: 2009-07-29 +%% +Type: language +Subtag: waq +Description: Wageman +Added: 2009-07-29 +%% +Type: language +Subtag: war +Description: Waray (Philippines) +Added: 2005-10-16 +%% +Type: language +Subtag: was +Description: Washo +Added: 2005-10-16 +%% +Type: language +Subtag: wat +Description: Kaninuwa +Added: 2009-07-29 +%% +Type: language +Subtag: wau +Description: Waurá +Added: 2009-07-29 +%% +Type: language +Subtag: wav +Description: Waka +Added: 2009-07-29 +%% +Type: language +Subtag: waw +Description: Waiwai +Added: 2009-07-29 +%% +Type: language +Subtag: wax +Description: Watam +Added: 2009-07-29 +%% +Type: language +Subtag: way +Description: Wayana +Added: 2009-07-29 +%% +Type: language +Subtag: waz +Description: Wampur +Added: 2009-07-29 +%% +Type: language +Subtag: wba +Description: Warao +Added: 2009-07-29 +%% +Type: language +Subtag: wbb +Description: Wabo +Added: 2009-07-29 +%% +Type: language +Subtag: wbe +Description: Waritai +Added: 2009-07-29 +%% +Type: language +Subtag: wbf +Description: Wara +Added: 2009-07-29 +%% +Type: language +Subtag: wbh +Description: Wanda +Added: 2009-07-29 +%% +Type: language +Subtag: wbi +Description: Vwanji +Added: 2009-07-29 +%% +Type: language +Subtag: wbj +Description: Alagwa +Added: 2009-07-29 +%% +Type: language +Subtag: wbk +Description: Waigali +Added: 2009-07-29 +%% +Type: language +Subtag: wbl +Description: Wakhi +Added: 2009-07-29 +%% +Type: language +Subtag: wbm +Description: Wa +Added: 2009-07-29 +%% +Type: language +Subtag: wbp +Description: Warlpiri +Added: 2009-07-29 +%% +Type: language +Subtag: wbq +Description: Waddar +Added: 2009-07-29 +%% +Type: language +Subtag: wbr +Description: Wagdi +Added: 2009-07-29 +Macrolanguage: raj +%% +Type: language +Subtag: wbt +Description: Wanman +Added: 2009-07-29 +%% +Type: language +Subtag: wbv +Description: Wajarri +Added: 2009-07-29 +%% +Type: language +Subtag: wbw +Description: Woi +Added: 2009-07-29 +%% +Type: language +Subtag: wca +Description: Yanomámi +Added: 2009-07-29 +%% +Type: language +Subtag: wci +Description: Waci Gbe +Added: 2009-07-29 +%% +Type: language +Subtag: wdd +Description: Wandji +Added: 2009-07-29 +%% +Type: language +Subtag: wdg +Description: Wadaginam +Added: 2009-07-29 +%% +Type: language +Subtag: wdj +Description: Wadjiginy +Added: 2009-07-29 +%% +Type: language +Subtag: wdu +Description: Wadjigu +Added: 2009-07-29 +%% +Type: language +Subtag: wea +Description: Wewaw +Added: 2009-07-29 +%% +Type: language +Subtag: wec +Description: Wè Western +Added: 2009-07-29 +%% +Type: language +Subtag: wed +Description: Wedau +Added: 2009-07-29 +%% +Type: language +Subtag: weh +Description: Weh +Added: 2009-07-29 +%% +Type: language +Subtag: wei +Description: Kiunum +Added: 2009-07-29 +%% +Type: language +Subtag: wem +Description: Weme Gbe +Added: 2009-07-29 +%% +Type: language +Subtag: wen +Description: Sorbian languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: weo +Description: Wemale +Added: 2009-07-29 +%% +Type: language +Subtag: wep +Description: Westphalien +Added: 2009-07-29 +%% +Type: language +Subtag: wer +Description: Weri +Added: 2009-07-29 +%% +Type: language +Subtag: wes +Description: Cameroon Pidgin +Added: 2009-07-29 +%% +Type: language +Subtag: wet +Description: Perai +Added: 2009-07-29 +%% +Type: language +Subtag: weu +Description: Rawngtu Chin +Added: 2009-07-29 +%% +Type: language +Subtag: wew +Description: Wejewa +Added: 2009-07-29 +%% +Type: language +Subtag: wfg +Description: Yafi +Description: Zorop +Added: 2009-07-29 +%% +Type: language +Subtag: wga +Description: Wagaya +Added: 2009-07-29 +%% +Type: language +Subtag: wgb +Description: Wagawaga +Added: 2010-03-11 +%% +Type: language +Subtag: wgg +Description: Wangganguru +Added: 2009-07-29 +%% +Type: language +Subtag: wgi +Description: Wahgi +Added: 2009-07-29 +%% +Type: language +Subtag: wgo +Description: Waigeo +Added: 2009-07-29 +%% +Type: language +Subtag: wgu +Description: Wirangu +Added: 2012-08-12 +%% +Type: language +Subtag: wgw +Description: Wagawaga +Added: 2009-07-29 +Deprecated: 2010-03-11 +Comments: see wgb, ylb +%% +Type: language +Subtag: wgy +Description: Warrgamay +Added: 2009-07-29 +%% +Type: language +Subtag: wha +Description: Manusela +Added: 2009-07-29 +%% +Type: language +Subtag: whg +Description: North Wahgi +Added: 2009-07-29 +%% +Type: language +Subtag: whk +Description: Wahau Kenyah +Added: 2009-07-29 +%% +Type: language +Subtag: whu +Description: Wahau Kayan +Added: 2009-07-29 +%% +Type: language +Subtag: wib +Description: Southern Toussian +Added: 2009-07-29 +%% +Type: language +Subtag: wic +Description: Wichita +Added: 2009-07-29 +%% +Type: language +Subtag: wie +Description: Wik-Epa +Added: 2009-07-29 +%% +Type: language +Subtag: wif +Description: Wik-Keyangan +Added: 2009-07-29 +%% +Type: language +Subtag: wig +Description: Wik-Ngathana +Added: 2009-07-29 +%% +Type: language +Subtag: wih +Description: Wik-Me'anha +Added: 2009-07-29 +%% +Type: language +Subtag: wii +Description: Minidien +Added: 2009-07-29 +%% +Type: language +Subtag: wij +Description: Wik-Iiyanh +Added: 2009-07-29 +%% +Type: language +Subtag: wik +Description: Wikalkan +Added: 2009-07-29 +%% +Type: language +Subtag: wil +Description: Wilawila +Added: 2009-07-29 +%% +Type: language +Subtag: wim +Description: Wik-Mungkan +Added: 2009-07-29 +%% +Type: language +Subtag: win +Description: Ho-Chunk +Added: 2009-07-29 +%% +Type: language +Subtag: wir +Description: Wiraféd +Added: 2009-07-29 +%% +Type: language +Subtag: wit +Description: Wintu +Added: 2009-07-29 +%% +Type: language +Subtag: wiu +Description: Wiru +Added: 2009-07-29 +%% +Type: language +Subtag: wiv +Description: Vitu +Added: 2009-07-29 +%% +Type: language +Subtag: wiw +Description: Wirangu +Added: 2009-07-29 +Deprecated: 2012-08-12 +Comments: see nwo, wgu +%% +Type: language +Subtag: wiy +Description: Wiyot +Added: 2009-07-29 +%% +Type: language +Subtag: wja +Description: Waja +Added: 2009-07-29 +%% +Type: language +Subtag: wji +Description: Warji +Added: 2009-07-29 +%% +Type: language +Subtag: wka +Description: Kw'adza +Added: 2009-07-29 +%% +Type: language +Subtag: wkb +Description: Kumbaran +Added: 2009-07-29 +%% +Type: language +Subtag: wkd +Description: Wakde +Description: Mo +Added: 2009-07-29 +%% +Type: language +Subtag: wkl +Description: Kalanadi +Added: 2009-07-29 +%% +Type: language +Subtag: wku +Description: Kunduvadi +Added: 2009-07-29 +%% +Type: language +Subtag: wkw +Description: Wakawaka +Added: 2009-07-29 +%% +Type: language +Subtag: wla +Description: Walio +Added: 2009-07-29 +%% +Type: language +Subtag: wlc +Description: Mwali Comorian +Added: 2009-07-29 +%% +Type: language +Subtag: wle +Description: Wolane +Added: 2009-07-29 +%% +Type: language +Subtag: wlg +Description: Kunbarlang +Added: 2009-07-29 +%% +Type: language +Subtag: wli +Description: Waioli +Added: 2009-07-29 +%% +Type: language +Subtag: wlk +Description: Wailaki +Added: 2009-07-29 +%% +Type: language +Subtag: wll +Description: Wali (Sudan) +Added: 2009-07-29 +%% +Type: language +Subtag: wlm +Description: Middle Welsh +Added: 2009-07-29 +%% +Type: language +Subtag: wlo +Description: Wolio +Added: 2009-07-29 +%% +Type: language +Subtag: wlr +Description: Wailapa +Added: 2009-07-29 +%% +Type: language +Subtag: wls +Description: Wallisian +Added: 2009-07-29 +%% +Type: language +Subtag: wlu +Description: Wuliwuli +Added: 2009-07-29 +%% +Type: language +Subtag: wlv +Description: Wichí Lhamtés Vejoz +Added: 2009-07-29 +%% +Type: language +Subtag: wlw +Description: Walak +Added: 2009-07-29 +%% +Type: language +Subtag: wlx +Description: Wali (Ghana) +Added: 2009-07-29 +%% +Type: language +Subtag: wly +Description: Waling +Added: 2009-07-29 +%% +Type: language +Subtag: wma +Description: Mawa (Nigeria) +Added: 2009-07-29 +%% +Type: language +Subtag: wmb +Description: Wambaya +Added: 2009-07-29 +%% +Type: language +Subtag: wmc +Description: Wamas +Added: 2009-07-29 +%% +Type: language +Subtag: wmd +Description: Mamaindé +Added: 2009-07-29 +%% +Type: language +Subtag: wme +Description: Wambule +Added: 2009-07-29 +%% +Type: language +Subtag: wmh +Description: Waima'a +Added: 2009-07-29 +%% +Type: language +Subtag: wmi +Description: Wamin +Added: 2009-07-29 +%% +Type: language +Subtag: wmm +Description: Maiwa (Indonesia) +Added: 2009-07-29 +%% +Type: language +Subtag: wmn +Description: Waamwang +Added: 2009-07-29 +%% +Type: language +Subtag: wmo +Description: Wom (Papua New Guinea) +Added: 2009-07-29 +%% +Type: language +Subtag: wms +Description: Wambon +Added: 2009-07-29 +%% +Type: language +Subtag: wmt +Description: Walmajarri +Added: 2009-07-29 +%% +Type: language +Subtag: wmw +Description: Mwani +Added: 2009-07-29 +%% +Type: language +Subtag: wmx +Description: Womo +Added: 2009-07-29 +%% +Type: language +Subtag: wnb +Description: Wanambre +Added: 2009-07-29 +%% +Type: language +Subtag: wnc +Description: Wantoat +Added: 2009-07-29 +%% +Type: language +Subtag: wnd +Description: Wandarang +Added: 2009-07-29 +%% +Type: language +Subtag: wne +Description: Waneci +Added: 2009-07-29 +%% +Type: language +Subtag: wng +Description: Wanggom +Added: 2009-07-29 +%% +Type: language +Subtag: wni +Description: Ndzwani Comorian +Added: 2009-07-29 +%% +Type: language +Subtag: wnk +Description: Wanukaka +Added: 2009-07-29 +%% +Type: language +Subtag: wnm +Description: Wanggamala +Added: 2009-07-29 +%% +Type: language +Subtag: wno +Description: Wano +Added: 2009-07-29 +%% +Type: language +Subtag: wnp +Description: Wanap +Added: 2009-07-29 +%% +Type: language +Subtag: wnu +Description: Usan +Added: 2009-07-29 +%% +Type: language +Subtag: wny +Description: Wanyi +Added: 2012-08-12 +%% +Type: language +Subtag: woa +Description: Tyaraity +Added: 2009-07-29 +%% +Type: language +Subtag: wob +Description: Wè Northern +Added: 2009-07-29 +%% +Type: language +Subtag: woc +Description: Wogeo +Added: 2009-07-29 +%% +Type: language +Subtag: wod +Description: Wolani +Added: 2009-07-29 +%% +Type: language +Subtag: woe +Description: Woleaian +Added: 2009-07-29 +%% +Type: language +Subtag: wof +Description: Gambian Wolof +Added: 2009-07-29 +%% +Type: language +Subtag: wog +Description: Wogamusin +Added: 2009-07-29 +%% +Type: language +Subtag: woi +Description: Kamang +Added: 2009-07-29 +%% +Type: language +Subtag: wok +Description: Longto +Added: 2009-07-29 +%% +Type: language +Subtag: wom +Description: Wom (Nigeria) +Added: 2009-07-29 +%% +Type: language +Subtag: won +Description: Wongo +Added: 2009-07-29 +%% +Type: language +Subtag: woo +Description: Manombai +Added: 2009-07-29 +%% +Type: language +Subtag: wor +Description: Woria +Added: 2009-07-29 +%% +Type: language +Subtag: wos +Description: Hanga Hundi +Added: 2009-07-29 +%% +Type: language +Subtag: wow +Description: Wawonii +Added: 2009-07-29 +%% +Type: language +Subtag: woy +Description: Weyto +Added: 2009-07-29 +%% +Type: language +Subtag: wpc +Description: Maco +Added: 2009-07-29 +%% +Type: language +Subtag: wra +Description: Warapu +Added: 2009-07-29 +%% +Type: language +Subtag: wrb +Description: Warluwara +Added: 2009-07-29 +%% +Type: language +Subtag: wrd +Description: Warduji +Added: 2009-07-29 +%% +Type: language +Subtag: wrg +Description: Warungu +Added: 2009-07-29 +%% +Type: language +Subtag: wrh +Description: Wiradhuri +Added: 2009-07-29 +%% +Type: language +Subtag: wri +Description: Wariyangga +Added: 2009-07-29 +%% +Type: language +Subtag: wrk +Description: Garrwa +Added: 2012-08-12 +%% +Type: language +Subtag: wrl +Description: Warlmanpa +Added: 2009-07-29 +%% +Type: language +Subtag: wrm +Description: Warumungu +Added: 2009-07-29 +%% +Type: language +Subtag: wrn +Description: Warnang +Added: 2009-07-29 +%% +Type: language +Subtag: wro +Description: Worrorra +Added: 2012-08-12 +%% +Type: language +Subtag: wrp +Description: Waropen +Added: 2009-07-29 +%% +Type: language +Subtag: wrr +Description: Wardaman +Added: 2009-07-29 +%% +Type: language +Subtag: wrs +Description: Waris +Added: 2009-07-29 +%% +Type: language +Subtag: wru +Description: Waru +Added: 2009-07-29 +%% +Type: language +Subtag: wrv +Description: Waruna +Added: 2009-07-29 +%% +Type: language +Subtag: wrw +Description: Gugu Warra +Added: 2009-07-29 +%% +Type: language +Subtag: wrx +Description: Wae Rana +Added: 2009-07-29 +%% +Type: language +Subtag: wry +Description: Merwari +Added: 2009-07-29 +Macrolanguage: mwr +%% +Type: language +Subtag: wrz +Description: Waray (Australia) +Added: 2009-07-29 +%% +Type: language +Subtag: wsa +Description: Warembori +Added: 2009-07-29 +%% +Type: language +Subtag: wsi +Description: Wusi +Added: 2009-07-29 +%% +Type: language +Subtag: wsk +Description: Waskia +Added: 2009-07-29 +%% +Type: language +Subtag: wsr +Description: Owenia +Added: 2009-07-29 +%% +Type: language +Subtag: wss +Description: Wasa +Added: 2009-07-29 +%% +Type: language +Subtag: wsu +Description: Wasu +Added: 2009-07-29 +%% +Type: language +Subtag: wsv +Description: Wotapuri-Katarqalai +Added: 2009-07-29 +%% +Type: language +Subtag: wtf +Description: Watiwa +Added: 2009-07-29 +%% +Type: language +Subtag: wti +Description: Berta +Added: 2009-07-29 +%% +Type: language +Subtag: wtk +Description: Watakataui +Added: 2009-07-29 +%% +Type: language +Subtag: wtm +Description: Mewati +Added: 2009-07-29 +%% +Type: language +Subtag: wtw +Description: Wotu +Added: 2009-07-29 +%% +Type: language +Subtag: wua +Description: Wikngenchera +Added: 2009-07-29 +%% +Type: language +Subtag: wub +Description: Wunambal +Added: 2009-07-29 +%% +Type: language +Subtag: wud +Description: Wudu +Added: 2009-07-29 +%% +Type: language +Subtag: wuh +Description: Wutunhua +Added: 2009-07-29 +%% +Type: language +Subtag: wul +Description: Silimo +Added: 2009-07-29 +%% +Type: language +Subtag: wum +Description: Wumbvu +Added: 2009-07-29 +%% +Type: language +Subtag: wun +Description: Bungu +Added: 2009-07-29 +%% +Type: language +Subtag: wur +Description: Wurrugu +Added: 2009-07-29 +%% +Type: language +Subtag: wut +Description: Wutung +Added: 2009-07-29 +%% +Type: language +Subtag: wuu +Description: Wu Chinese +Added: 2009-07-29 +Macrolanguage: zh +%% +Type: language +Subtag: wuv +Description: Wuvulu-Aua +Added: 2009-07-29 +%% +Type: language +Subtag: wux +Description: Wulna +Added: 2009-07-29 +%% +Type: language +Subtag: wuy +Description: Wauyai +Added: 2009-07-29 +%% +Type: language +Subtag: wwa +Description: Waama +Added: 2009-07-29 +%% +Type: language +Subtag: wwb +Description: Wakabunga +Added: 2012-08-12 +%% +Type: language +Subtag: wwo +Description: Wetamut +Description: Dorig +Added: 2009-07-29 +%% +Type: language +Subtag: wwr +Description: Warrwa +Added: 2009-07-29 +%% +Type: language +Subtag: www +Description: Wawa +Added: 2009-07-29 +%% +Type: language +Subtag: wxa +Description: Waxianghua +Added: 2009-07-29 +%% +Type: language +Subtag: wya +Description: Wyandot +Added: 2009-07-29 +%% +Type: language +Subtag: wyb +Description: Wangaaybuwan-Ngiyambaa +Added: 2009-07-29 +%% +Type: language +Subtag: wym +Description: Wymysorys +Added: 2009-07-29 +%% +Type: language +Subtag: wyr +Description: Wayoró +Added: 2009-07-29 +%% +Type: language +Subtag: wyy +Description: Western Fijian +Added: 2009-07-29 +%% +Type: language +Subtag: xaa +Description: Andalusian Arabic +Added: 2009-07-29 +%% +Type: language +Subtag: xab +Description: Sambe +Added: 2009-07-29 +%% +Type: language +Subtag: xac +Description: Kachari +Added: 2009-07-29 +%% +Type: language +Subtag: xad +Description: Adai +Added: 2009-07-29 +%% +Type: language +Subtag: xae +Description: Aequian +Added: 2009-07-29 +%% +Type: language +Subtag: xag +Description: Aghwan +Added: 2009-07-29 +%% +Type: language +Subtag: xai +Description: Kaimbé +Added: 2009-07-29 +%% +Type: language +Subtag: xal +Description: Kalmyk +Description: Oirat +Added: 2005-10-16 +%% +Type: language +Subtag: xam +Description: /Xam +Added: 2009-07-29 +%% +Type: language +Subtag: xan +Description: Xamtanga +Added: 2009-07-29 +%% +Type: language +Subtag: xao +Description: Khao +Added: 2009-07-29 +%% +Type: language +Subtag: xap +Description: Apalachee +Added: 2009-07-29 +%% +Type: language +Subtag: xaq +Description: Aquitanian +Added: 2009-07-29 +%% +Type: language +Subtag: xar +Description: Karami +Added: 2009-07-29 +%% +Type: language +Subtag: xas +Description: Kamas +Added: 2009-07-29 +%% +Type: language +Subtag: xat +Description: Katawixi +Added: 2009-07-29 +%% +Type: language +Subtag: xau +Description: Kauwera +Added: 2009-07-29 +%% +Type: language +Subtag: xav +Description: Xavánte +Added: 2009-07-29 +%% +Type: language +Subtag: xaw +Description: Kawaiisu +Added: 2009-07-29 +%% +Type: language +Subtag: xay +Description: Kayan Mahakam +Added: 2009-07-29 +%% +Type: language +Subtag: xba +Description: Kamba (Brazil) +Added: 2009-07-29 +%% +Type: language +Subtag: xbb +Description: Lower Burdekin +Added: 2010-03-11 +%% +Type: language +Subtag: xbc +Description: Bactrian +Added: 2009-07-29 +%% +Type: language +Subtag: xbi +Description: Kombio +Added: 2009-07-29 +%% +Type: language +Subtag: xbm +Description: Middle Breton +Added: 2009-07-29 +%% +Type: language +Subtag: xbn +Description: Kenaboi +Added: 2010-03-11 +%% +Type: language +Subtag: xbo +Description: Bolgarian +Added: 2009-07-29 +%% +Type: language +Subtag: xbr +Description: Kambera +Added: 2009-07-29 +%% +Type: language +Subtag: xbw +Description: Kambiwá +Added: 2009-07-29 +%% +Type: language +Subtag: xbx +Description: Kabixí +Added: 2009-07-29 +%% +Type: language +Subtag: xcb +Description: Cumbric +Added: 2009-07-29 +%% +Type: language +Subtag: xcc +Description: Camunic +Added: 2009-07-29 +%% +Type: language +Subtag: xce +Description: Celtiberian +Added: 2009-07-29 +%% +Type: language +Subtag: xcg +Description: Cisalpine Gaulish +Added: 2009-07-29 +%% +Type: language +Subtag: xch +Description: Chemakum +Description: Chimakum +Added: 2009-07-29 +%% +Type: language +Subtag: xcl +Description: Classical Armenian +Added: 2009-07-29 +%% +Type: language +Subtag: xcm +Description: Comecrudo +Added: 2009-07-29 +%% +Type: language +Subtag: xcn +Description: Cotoname +Added: 2009-07-29 +%% +Type: language +Subtag: xco +Description: Chorasmian +Added: 2009-07-29 +%% +Type: language +Subtag: xcr +Description: Carian +Added: 2009-07-29 +%% +Type: language +Subtag: xct +Description: Classical Tibetan +Added: 2009-07-29 +%% +Type: language +Subtag: xcu +Description: Curonian +Added: 2009-07-29 +%% +Type: language +Subtag: xcv +Description: Chuvantsy +Added: 2009-07-29 +%% +Type: language +Subtag: xcw +Description: Coahuilteco +Added: 2009-07-29 +%% +Type: language +Subtag: xcy +Description: Cayuse +Added: 2009-07-29 +%% +Type: language +Subtag: xdc +Description: Dacian +Added: 2009-07-29 +%% +Type: language +Subtag: xdm +Description: Edomite +Added: 2009-07-29 +%% +Type: language +Subtag: xdy +Description: Malayic Dayak +Added: 2009-07-29 +%% +Type: language +Subtag: xeb +Description: Eblan +Added: 2009-07-29 +%% +Type: language +Subtag: xed +Description: Hdi +Added: 2009-07-29 +%% +Type: language +Subtag: xeg +Description: //Xegwi +Added: 2009-07-29 +%% +Type: language +Subtag: xel +Description: Kelo +Added: 2009-07-29 +%% +Type: language +Subtag: xem +Description: Kembayan +Added: 2009-07-29 +%% +Type: language +Subtag: xep +Description: Epi-Olmec +Added: 2009-07-29 +%% +Type: language +Subtag: xer +Description: Xerénte +Added: 2009-07-29 +%% +Type: language +Subtag: xes +Description: Kesawai +Added: 2009-07-29 +%% +Type: language +Subtag: xet +Description: Xetá +Added: 2009-07-29 +%% +Type: language +Subtag: xeu +Description: Keoru-Ahia +Added: 2009-07-29 +%% +Type: language +Subtag: xfa +Description: Faliscan +Added: 2009-07-29 +%% +Type: language +Subtag: xga +Description: Galatian +Added: 2009-07-29 +%% +Type: language +Subtag: xgb +Description: Gbin +Added: 2012-08-12 +%% +Type: language +Subtag: xgf +Description: Gabrielino-Fernandeño +Added: 2009-07-29 +%% +Type: language +Subtag: xgl +Description: Galindan +Added: 2009-07-29 +%% +Type: language +Subtag: xgn +Description: Mongolian languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: xgr +Description: Garza +Added: 2009-07-29 +%% +Type: language +Subtag: xgu +Description: Unggumi +Added: 2012-08-12 +%% +Type: language +Subtag: xha +Description: Harami +Added: 2009-07-29 +%% +Type: language +Subtag: xhc +Description: Hunnic +Added: 2009-07-29 +%% +Type: language +Subtag: xhd +Description: Hadrami +Added: 2009-07-29 +%% +Type: language +Subtag: xhe +Description: Khetrani +Added: 2009-07-29 +Macrolanguage: lah +%% +Type: language +Subtag: xhr +Description: Hernican +Added: 2009-07-29 +%% +Type: language +Subtag: xht +Description: Hattic +Added: 2009-07-29 +%% +Type: language +Subtag: xhu +Description: Hurrian +Added: 2009-07-29 +%% +Type: language +Subtag: xhv +Description: Khua +Added: 2009-07-29 +%% +Type: language +Subtag: xia +Description: Xiandao +Added: 2009-07-29 +%% +Type: language +Subtag: xib +Description: Iberian +Added: 2009-07-29 +%% +Type: language +Subtag: xii +Description: Xiri +Added: 2009-07-29 +%% +Type: language +Subtag: xil +Description: Illyrian +Added: 2009-07-29 +%% +Type: language +Subtag: xin +Description: Xinca +Added: 2009-07-29 +%% +Type: language +Subtag: xip +Description: Xipináwa +Added: 2009-07-29 +%% +Type: language +Subtag: xir +Description: Xiriâna +Added: 2009-07-29 +%% +Type: language +Subtag: xiv +Description: Indus Valley Language +Added: 2009-07-29 +%% +Type: language +Subtag: xiy +Description: Xipaya +Added: 2009-07-29 +%% +Type: language +Subtag: xka +Description: Kalkoti +Added: 2009-07-29 +%% +Type: language +Subtag: xkb +Description: Northern Nago +Added: 2009-07-29 +%% +Type: language +Subtag: xkc +Description: Kho'ini +Added: 2009-07-29 +%% +Type: language +Subtag: xkd +Description: Mendalam Kayan +Added: 2009-07-29 +%% +Type: language +Subtag: xke +Description: Kereho +Added: 2009-07-29 +%% +Type: language +Subtag: xkf +Description: Khengkha +Added: 2009-07-29 +%% +Type: language +Subtag: xkg +Description: Kagoro +Added: 2009-07-29 +%% +Type: language +Subtag: xkh +Description: Karahawyana +Added: 2009-07-29 +%% +Type: language +Subtag: xki +Description: Kenyan Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: xkj +Description: Kajali +Added: 2009-07-29 +%% +Type: language +Subtag: xkk +Description: Kaco' +Added: 2009-07-29 +%% +Type: language +Subtag: xkl +Description: Mainstream Kenyah +Added: 2009-07-29 +%% +Type: language +Subtag: xkn +Description: Kayan River Kayan +Added: 2009-07-29 +%% +Type: language +Subtag: xko +Description: Kiorr +Added: 2009-07-29 +%% +Type: language +Subtag: xkp +Description: Kabatei +Added: 2009-07-29 +%% +Type: language +Subtag: xkq +Description: Koroni +Added: 2009-07-29 +%% +Type: language +Subtag: xkr +Description: Xakriabá +Added: 2009-07-29 +%% +Type: language +Subtag: xks +Description: Kumbewaha +Added: 2009-07-29 +%% +Type: language +Subtag: xkt +Description: Kantosi +Added: 2009-07-29 +%% +Type: language +Subtag: xku +Description: Kaamba +Added: 2009-07-29 +%% +Type: language +Subtag: xkv +Description: Kgalagadi +Added: 2009-07-29 +%% +Type: language +Subtag: xkw +Description: Kembra +Added: 2009-07-29 +%% +Type: language +Subtag: xkx +Description: Karore +Added: 2009-07-29 +%% +Type: language +Subtag: xky +Description: Uma' Lasan +Added: 2009-07-29 +%% +Type: language +Subtag: xkz +Description: Kurtokha +Added: 2009-07-29 +%% +Type: language +Subtag: xla +Description: Kamula +Added: 2009-07-29 +%% +Type: language +Subtag: xlb +Description: Loup B +Added: 2009-07-29 +%% +Type: language +Subtag: xlc +Description: Lycian +Added: 2009-07-29 +%% +Type: language +Subtag: xld +Description: Lydian +Added: 2009-07-29 +%% +Type: language +Subtag: xle +Description: Lemnian +Added: 2009-07-29 +%% +Type: language +Subtag: xlg +Description: Ligurian (Ancient) +Added: 2009-07-29 +%% +Type: language +Subtag: xli +Description: Liburnian +Added: 2009-07-29 +%% +Type: language +Subtag: xln +Description: Alanic +Added: 2009-07-29 +%% +Type: language +Subtag: xlo +Description: Loup A +Added: 2009-07-29 +%% +Type: language +Subtag: xlp +Description: Lepontic +Added: 2009-07-29 +%% +Type: language +Subtag: xls +Description: Lusitanian +Added: 2009-07-29 +%% +Type: language +Subtag: xlu +Description: Cuneiform Luwian +Added: 2009-07-29 +%% +Type: language +Subtag: xly +Description: Elymian +Added: 2009-07-29 +%% +Type: language +Subtag: xma +Description: Mushungulu +Added: 2009-07-29 +%% +Type: language +Subtag: xmb +Description: Mbonga +Added: 2009-07-29 +%% +Type: language +Subtag: xmc +Description: Makhuwa-Marrevone +Added: 2009-07-29 +%% +Type: language +Subtag: xmd +Description: Mbudum +Added: 2009-07-29 +%% +Type: language +Subtag: xme +Description: Median +Added: 2009-07-29 +%% +Type: language +Subtag: xmf +Description: Mingrelian +Added: 2009-07-29 +%% +Type: language +Subtag: xmg +Description: Mengaka +Added: 2009-07-29 +%% +Type: language +Subtag: xmh +Description: Kuku-Muminh +Added: 2009-07-29 +%% +Type: language +Subtag: xmj +Description: Majera +Added: 2009-07-29 +%% +Type: language +Subtag: xmk +Description: Ancient Macedonian +Added: 2009-07-29 +%% +Type: language +Subtag: xml +Description: Malaysian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: xmm +Description: Manado Malay +Added: 2009-07-29 +Macrolanguage: ms +%% +Type: language +Subtag: xmn +Description: Manichaean Middle Persian +Added: 2009-07-29 +%% +Type: language +Subtag: xmo +Description: Morerebi +Added: 2009-07-29 +%% +Type: language +Subtag: xmp +Description: Kuku-Mu'inh +Added: 2009-07-29 +%% +Type: language +Subtag: xmq +Description: Kuku-Mangk +Added: 2009-07-29 +%% +Type: language +Subtag: xmr +Description: Meroitic +Added: 2009-07-29 +%% +Type: language +Subtag: xms +Description: Moroccan Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: xmt +Description: Matbat +Added: 2009-07-29 +%% +Type: language +Subtag: xmu +Description: Kamu +Added: 2009-07-29 +%% +Type: language +Subtag: xmv +Description: Antankarana Malagasy +Description: Tankarana Malagasy +Added: 2009-07-29 +Macrolanguage: mg +%% +Type: language +Subtag: xmw +Description: Tsimihety Malagasy +Added: 2009-07-29 +Macrolanguage: mg +%% +Type: language +Subtag: xmx +Description: Maden +Added: 2009-07-29 +%% +Type: language +Subtag: xmy +Description: Mayaguduna +Added: 2009-07-29 +%% +Type: language +Subtag: xmz +Description: Mori Bawah +Added: 2009-07-29 +%% +Type: language +Subtag: xna +Description: Ancient North Arabian +Added: 2009-07-29 +%% +Type: language +Subtag: xnb +Description: Kanakanabu +Added: 2009-07-29 +%% +Type: language +Subtag: xnd +Description: Na-Dene languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: xng +Description: Middle Mongolian +Added: 2009-07-29 +%% +Type: language +Subtag: xnh +Description: Kuanhua +Added: 2009-07-29 +%% +Type: language +Subtag: xnn +Description: Northern Kankanay +Added: 2009-07-29 +%% +Type: language +Subtag: xno +Description: Anglo-Norman +Added: 2009-07-29 +%% +Type: language +Subtag: xnr +Description: Kangri +Added: 2009-07-29 +Macrolanguage: doi +%% +Type: language +Subtag: xns +Description: Kanashi +Added: 2009-07-29 +%% +Type: language +Subtag: xnt +Description: Narragansett +Added: 2010-03-11 +%% +Type: language +Subtag: xnz +Description: Kenzi +Description: Mattoki +Added: 2012-08-12 +%% +Type: language +Subtag: xoc +Description: O'chi'chi' +Added: 2009-07-29 +%% +Type: language +Subtag: xod +Description: Kokoda +Added: 2009-07-29 +%% +Type: language +Subtag: xog +Description: Soga +Added: 2009-07-29 +%% +Type: language +Subtag: xoi +Description: Kominimung +Added: 2009-07-29 +%% +Type: language +Subtag: xok +Description: Xokleng +Added: 2009-07-29 +%% +Type: language +Subtag: xom +Description: Komo (Sudan) +Added: 2009-07-29 +%% +Type: language +Subtag: xon +Description: Konkomba +Added: 2009-07-29 +%% +Type: language +Subtag: xoo +Description: Xukurú +Added: 2009-07-29 +%% +Type: language +Subtag: xop +Description: Kopar +Added: 2009-07-29 +%% +Type: language +Subtag: xor +Description: Korubo +Added: 2009-07-29 +%% +Type: language +Subtag: xow +Description: Kowaki +Added: 2009-07-29 +%% +Type: language +Subtag: xpc +Description: Pecheneg +Added: 2009-07-29 +%% +Type: language +Subtag: xpe +Description: Liberia Kpelle +Added: 2009-07-29 +Macrolanguage: kpe +%% +Type: language +Subtag: xpg +Description: Phrygian +Added: 2009-07-29 +%% +Type: language +Subtag: xpi +Description: Pictish +Added: 2009-07-29 +%% +Type: language +Subtag: xpj +Description: Mpalitjanh +Added: 2012-08-12 +%% +Type: language +Subtag: xpk +Description: Kulina Pano +Added: 2009-07-29 +%% +Type: language +Subtag: xpm +Description: Pumpokol +Added: 2009-07-29 +%% +Type: language +Subtag: xpn +Description: Kapinawá +Added: 2009-07-29 +%% +Type: language +Subtag: xpo +Description: Pochutec +Added: 2009-07-29 +%% +Type: language +Subtag: xpp +Description: Puyo-Paekche +Added: 2009-07-29 +%% +Type: language +Subtag: xpq +Description: Mohegan-Pequot +Added: 2010-03-11 +%% +Type: language +Subtag: xpr +Description: Parthian +Added: 2009-07-29 +%% +Type: language +Subtag: xps +Description: Pisidian +Added: 2009-07-29 +%% +Type: language +Subtag: xpu +Description: Punic +Added: 2009-07-29 +%% +Type: language +Subtag: xpy +Description: Puyo +Added: 2009-07-29 +%% +Type: language +Subtag: xqa +Description: Karakhanid +Added: 2009-07-29 +%% +Type: language +Subtag: xqt +Description: Qatabanian +Added: 2009-07-29 +%% +Type: language +Subtag: xra +Description: Krahô +Added: 2009-07-29 +%% +Type: language +Subtag: xrb +Description: Eastern Karaboro +Added: 2009-07-29 +%% +Type: language +Subtag: xre +Description: Kreye +Added: 2009-07-29 +%% +Type: language +Subtag: xri +Description: Krikati-Timbira +Added: 2009-07-29 +%% +Type: language +Subtag: xrm +Description: Armazic +Added: 2009-07-29 +%% +Type: language +Subtag: xrn +Description: Arin +Added: 2009-07-29 +%% +Type: language +Subtag: xrr +Description: Raetic +Added: 2009-07-29 +%% +Type: language +Subtag: xrt +Description: Aranama-Tamique +Added: 2009-07-29 +%% +Type: language +Subtag: xru +Description: Marriammu +Added: 2009-07-29 +%% +Type: language +Subtag: xrw +Description: Karawa +Added: 2009-07-29 +%% +Type: language +Subtag: xsa +Description: Sabaean +Added: 2009-07-29 +%% +Type: language +Subtag: xsb +Description: Sambal +Added: 2009-07-29 +%% +Type: language +Subtag: xsc +Description: Scythian +Added: 2009-07-29 +%% +Type: language +Subtag: xsd +Description: Sidetic +Added: 2009-07-29 +%% +Type: language +Subtag: xse +Description: Sempan +Added: 2009-07-29 +%% +Type: language +Subtag: xsh +Description: Shamang +Added: 2009-07-29 +%% +Type: language +Subtag: xsi +Description: Sio +Added: 2009-07-29 +%% +Type: language +Subtag: xsj +Description: Subi +Added: 2009-07-29 +%% +Type: language +Subtag: xsl +Description: South Slavey +Added: 2009-07-29 +Macrolanguage: den +%% +Type: language +Subtag: xsm +Description: Kasem +Added: 2009-07-29 +%% +Type: language +Subtag: xsn +Description: Sanga (Nigeria) +Added: 2009-07-29 +%% +Type: language +Subtag: xso +Description: Solano +Added: 2009-07-29 +%% +Type: language +Subtag: xsp +Description: Silopi +Added: 2009-07-29 +%% +Type: language +Subtag: xsq +Description: Makhuwa-Saka +Added: 2009-07-29 +%% +Type: language +Subtag: xsr +Description: Sherpa +Added: 2009-07-29 +%% +Type: language +Subtag: xss +Description: Assan +Added: 2009-07-29 +%% +Type: language +Subtag: xsu +Description: Sanumá +Added: 2009-07-29 +%% +Type: language +Subtag: xsv +Description: Sudovian +Added: 2009-07-29 +%% +Type: language +Subtag: xsy +Description: Saisiyat +Added: 2009-07-29 +%% +Type: language +Subtag: xta +Description: Alcozauca Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: xtb +Description: Chazumba Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: xtc +Description: Katcha-Kadugli-Miri +Added: 2009-07-29 +%% +Type: language +Subtag: xtd +Description: Diuxi-Tilantongo Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: xte +Description: Ketengban +Added: 2009-07-29 +%% +Type: language +Subtag: xtg +Description: Transalpine Gaulish +Added: 2009-07-29 +%% +Type: language +Subtag: xti +Description: Sinicahua Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: xtj +Description: San Juan Teita Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: xtl +Description: Tijaltepec Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: xtm +Description: Magdalena Peñasco Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: xtn +Description: Northern Tlaxiaco Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: xto +Description: Tokharian A +Added: 2009-07-29 +%% +Type: language +Subtag: xtp +Description: San Miguel Piedras Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: xtq +Description: Tumshuqese +Added: 2009-07-29 +%% +Type: language +Subtag: xtr +Description: Early Tripuri +Added: 2009-07-29 +%% +Type: language +Subtag: xts +Description: Sindihui Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: xtt +Description: Tacahua Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: xtu +Description: Cuyamecalco Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: xtw +Description: Tawandê +Added: 2009-07-29 +%% +Type: language +Subtag: xty +Description: Yoloxochitl Mixtec +Added: 2009-07-29 +%% +Type: language +Subtag: xtz +Description: Tasmanian +Added: 2009-07-29 +%% +Type: language +Subtag: xua +Description: Alu Kurumba +Added: 2009-07-29 +%% +Type: language +Subtag: xub +Description: Betta Kurumba +Added: 2009-07-29 +%% +Type: language +Subtag: xud +Description: Umiida +Added: 2012-08-12 +%% +Type: language +Subtag: xug +Description: Kunigami +Added: 2009-07-29 +%% +Type: language +Subtag: xuj +Description: Jennu Kurumba +Added: 2009-07-29 +%% +Type: language +Subtag: xum +Description: Umbrian +Added: 2009-07-29 +%% +Type: language +Subtag: xun +Description: Unggarranggu +Added: 2012-08-12 +%% +Type: language +Subtag: xuo +Description: Kuo +Added: 2009-07-29 +%% +Type: language +Subtag: xup +Description: Upper Umpqua +Added: 2009-07-29 +%% +Type: language +Subtag: xur +Description: Urartian +Added: 2009-07-29 +%% +Type: language +Subtag: xut +Description: Kuthant +Added: 2009-07-29 +%% +Type: language +Subtag: xuu +Description: Kxoe +Added: 2009-07-29 +%% +Type: language +Subtag: xve +Description: Venetic +Added: 2009-07-29 +%% +Type: language +Subtag: xvi +Description: Kamviri +Added: 2009-07-29 +%% +Type: language +Subtag: xvn +Description: Vandalic +Added: 2009-07-29 +%% +Type: language +Subtag: xvo +Description: Volscian +Added: 2009-07-29 +%% +Type: language +Subtag: xvs +Description: Vestinian +Added: 2009-07-29 +%% +Type: language +Subtag: xwa +Description: Kwaza +Added: 2009-07-29 +%% +Type: language +Subtag: xwc +Description: Woccon +Added: 2009-07-29 +%% +Type: language +Subtag: xwe +Description: Xwela Gbe +Added: 2009-07-29 +%% +Type: language +Subtag: xwg +Description: Kwegu +Added: 2009-07-29 +%% +Type: language +Subtag: xwl +Description: Western Xwla Gbe +Added: 2009-07-29 +%% +Type: language +Subtag: xwo +Description: Written Oirat +Added: 2009-07-29 +%% +Type: language +Subtag: xwr +Description: Kwerba Mamberamo +Added: 2009-07-29 +%% +Type: language +Subtag: xxb +Description: Boro (Ghana) +Added: 2009-07-29 +%% +Type: language +Subtag: xxk +Description: Ke'o +Added: 2009-07-29 +%% +Type: language +Subtag: xxr +Description: Koropó +Added: 2009-07-29 +%% +Type: language +Subtag: xxt +Description: Tambora +Added: 2009-07-29 +%% +Type: language +Subtag: xyl +Description: Yalakalore +Added: 2009-07-29 +%% +Type: language +Subtag: xyy +Description: Yorta Yorta +Added: 2012-08-12 +%% +Type: language +Subtag: xzh +Description: Zhang-Zhung +Added: 2009-07-29 +%% +Type: language +Subtag: xzm +Description: Zemgalian +Added: 2009-07-29 +%% +Type: language +Subtag: xzp +Description: Ancient Zapotec +Added: 2009-07-29 +%% +Type: language +Subtag: yaa +Description: Yaminahua +Added: 2009-07-29 +%% +Type: language +Subtag: yab +Description: Yuhup +Added: 2009-07-29 +%% +Type: language +Subtag: yac +Description: Pass Valley Yali +Added: 2009-07-29 +%% +Type: language +Subtag: yad +Description: Yagua +Added: 2009-07-29 +%% +Type: language +Subtag: yae +Description: Pumé +Added: 2009-07-29 +%% +Type: language +Subtag: yaf +Description: Yaka (Democratic Republic of Congo) +Added: 2009-07-29 +%% +Type: language +Subtag: yag +Description: Yámana +Added: 2009-07-29 +%% +Type: language +Subtag: yah +Description: Yazgulyam +Added: 2009-07-29 +%% +Type: language +Subtag: yai +Description: Yagnobi +Added: 2009-07-29 +%% +Type: language +Subtag: yaj +Description: Banda-Yangere +Added: 2009-07-29 +%% +Type: language +Subtag: yak +Description: Yakama +Added: 2009-07-29 +%% +Type: language +Subtag: yal +Description: Yalunka +Added: 2009-07-29 +%% +Type: language +Subtag: yam +Description: Yamba +Added: 2009-07-29 +%% +Type: language +Subtag: yan +Description: Mayangna +Added: 2010-03-11 +%% +Type: language +Subtag: yao +Description: Yao +Added: 2005-10-16 +%% +Type: language +Subtag: yap +Description: Yapese +Added: 2005-10-16 +%% +Type: language +Subtag: yaq +Description: Yaqui +Added: 2009-07-29 +%% +Type: language +Subtag: yar +Description: Yabarana +Added: 2009-07-29 +%% +Type: language +Subtag: yas +Description: Nugunu (Cameroon) +Added: 2009-07-29 +%% +Type: language +Subtag: yat +Description: Yambeta +Added: 2009-07-29 +%% +Type: language +Subtag: yau +Description: Yuwana +Added: 2009-07-29 +%% +Type: language +Subtag: yav +Description: Yangben +Added: 2009-07-29 +%% +Type: language +Subtag: yaw +Description: Yawalapití +Added: 2009-07-29 +%% +Type: language +Subtag: yax +Description: Yauma +Added: 2009-07-29 +%% +Type: language +Subtag: yay +Description: Agwagwune +Added: 2009-07-29 +%% +Type: language +Subtag: yaz +Description: Lokaa +Added: 2009-07-29 +%% +Type: language +Subtag: yba +Description: Yala +Added: 2009-07-29 +%% +Type: language +Subtag: ybb +Description: Yemba +Added: 2009-07-29 +%% +Type: language +Subtag: ybd +Description: Yangbye +Added: 2009-07-29 +Deprecated: 2012-08-12 +Preferred-Value: rki +%% +Type: language +Subtag: ybe +Description: West Yugur +Added: 2009-07-29 +%% +Type: language +Subtag: ybh +Description: Yakha +Added: 2009-07-29 +%% +Type: language +Subtag: ybi +Description: Yamphu +Added: 2009-07-29 +%% +Type: language +Subtag: ybj +Description: Hasha +Added: 2009-07-29 +%% +Type: language +Subtag: ybk +Description: Bokha +Added: 2009-07-29 +%% +Type: language +Subtag: ybl +Description: Yukuben +Added: 2009-07-29 +%% +Type: language +Subtag: ybm +Description: Yaben +Added: 2009-07-29 +%% +Type: language +Subtag: ybn +Description: Yabaâna +Added: 2009-07-29 +%% +Type: language +Subtag: ybo +Description: Yabong +Added: 2009-07-29 +%% +Type: language +Subtag: ybx +Description: Yawiyo +Added: 2009-07-29 +%% +Type: language +Subtag: yby +Description: Yaweyuha +Added: 2009-07-29 +%% +Type: language +Subtag: ych +Description: Chesu +Added: 2009-07-29 +%% +Type: language +Subtag: ycl +Description: Lolopo +Added: 2009-07-29 +%% +Type: language +Subtag: ycn +Description: Yucuna +Added: 2009-07-29 +%% +Type: language +Subtag: ycp +Description: Chepya +Added: 2009-07-29 +%% +Type: language +Subtag: ydd +Description: Eastern Yiddish +Added: 2009-07-29 +Macrolanguage: yi +%% +Type: language +Subtag: yde +Description: Yangum Dey +Added: 2009-07-29 +%% +Type: language +Subtag: ydg +Description: Yidgha +Added: 2009-07-29 +%% +Type: language +Subtag: ydk +Description: Yoidik +Added: 2009-07-29 +%% +Type: language +Subtag: yds +Description: Yiddish Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: yea +Description: Ravula +Added: 2009-07-29 +%% +Type: language +Subtag: yec +Description: Yeniche +Added: 2009-07-29 +%% +Type: language +Subtag: yee +Description: Yimas +Added: 2009-07-29 +%% +Type: language +Subtag: yei +Description: Yeni +Added: 2009-07-29 +%% +Type: language +Subtag: yej +Description: Yevanic +Added: 2009-07-29 +%% +Type: language +Subtag: yel +Description: Yela +Added: 2009-07-29 +%% +Type: language +Subtag: yen +Description: Yendang +Added: 2009-07-29 +Deprecated: 2012-08-12 +Comments: see ynq, yot +%% +Type: language +Subtag: yer +Description: Tarok +Added: 2009-07-29 +%% +Type: language +Subtag: yes +Description: Nyankpa +Added: 2009-07-29 +%% +Type: language +Subtag: yet +Description: Yetfa +Added: 2009-07-29 +%% +Type: language +Subtag: yeu +Description: Yerukula +Added: 2009-07-29 +%% +Type: language +Subtag: yev +Description: Yapunda +Added: 2009-07-29 +%% +Type: language +Subtag: yey +Description: Yeyi +Added: 2009-07-29 +%% +Type: language +Subtag: yga +Description: Malyangapa +Added: 2012-08-12 +%% +Type: language +Subtag: ygl +Description: Yangum Gel +Added: 2009-07-29 +%% +Type: language +Subtag: ygm +Description: Yagomi +Added: 2009-07-29 +%% +Type: language +Subtag: ygp +Description: Gepo +Added: 2009-07-29 +%% +Type: language +Subtag: ygr +Description: Yagaria +Added: 2009-07-29 +%% +Type: language +Subtag: ygw +Description: Yagwoia +Added: 2009-07-29 +%% +Type: language +Subtag: yha +Description: Baha Buyang +Added: 2009-07-29 +%% +Type: language +Subtag: yhd +Description: Judeo-Iraqi Arabic +Added: 2009-07-29 +Macrolanguage: jrb +%% +Type: language +Subtag: yhl +Description: Hlepho Phowa +Added: 2009-07-29 +%% +Type: language +Subtag: yia +Description: Yinggarda +Added: 2009-07-29 +%% +Type: language +Subtag: yif +Description: Ache +Added: 2009-07-29 +%% +Type: language +Subtag: yig +Description: Wusa Nasu +Added: 2009-07-29 +%% +Type: language +Subtag: yih +Description: Western Yiddish +Added: 2009-07-29 +Macrolanguage: yi +%% +Type: language +Subtag: yii +Description: Yidiny +Added: 2009-07-29 +%% +Type: language +Subtag: yij +Description: Yindjibarndi +Added: 2009-07-29 +%% +Type: language +Subtag: yik +Description: Dongshanba Lalo +Added: 2009-07-29 +%% +Type: language +Subtag: yil +Description: Yindjilandji +Added: 2009-07-29 +%% +Type: language +Subtag: yim +Description: Yimchungru Naga +Added: 2009-07-29 +%% +Type: language +Subtag: yin +Description: Yinchia +Added: 2009-07-29 +%% +Type: language +Subtag: yip +Description: Pholo +Added: 2009-07-29 +%% +Type: language +Subtag: yiq +Description: Miqie +Added: 2009-07-29 +%% +Type: language +Subtag: yir +Description: North Awyu +Added: 2009-07-29 +%% +Type: language +Subtag: yis +Description: Yis +Added: 2009-07-29 +%% +Type: language +Subtag: yit +Description: Eastern Lalu +Added: 2009-07-29 +%% +Type: language +Subtag: yiu +Description: Awu +Added: 2009-07-29 +%% +Type: language +Subtag: yiv +Description: Northern Nisu +Added: 2009-07-29 +%% +Type: language +Subtag: yix +Description: Axi Yi +Added: 2009-07-29 +%% +Type: language +Subtag: yiy +Description: Yir Yoront +Added: 2009-07-29 +%% +Type: language +Subtag: yiz +Description: Azhe +Added: 2009-07-29 +%% +Type: language +Subtag: yka +Description: Yakan +Added: 2009-07-29 +%% +Type: language +Subtag: ykg +Description: Northern Yukaghir +Added: 2009-07-29 +%% +Type: language +Subtag: yki +Description: Yoke +Added: 2009-07-29 +%% +Type: language +Subtag: ykk +Description: Yakaikeke +Added: 2009-07-29 +%% +Type: language +Subtag: ykl +Description: Khlula +Added: 2009-07-29 +%% +Type: language +Subtag: ykm +Description: Kap +Added: 2009-07-29 +%% +Type: language +Subtag: ykn +Description: Kua-nsi +Added: 2012-08-12 +%% +Type: language +Subtag: yko +Description: Yasa +Added: 2009-07-29 +%% +Type: language +Subtag: ykr +Description: Yekora +Added: 2009-07-29 +%% +Type: language +Subtag: ykt +Description: Kathu +Added: 2009-07-29 +%% +Type: language +Subtag: yku +Description: Kuamasi +Added: 2012-08-12 +%% +Type: language +Subtag: yky +Description: Yakoma +Added: 2009-07-29 +%% +Type: language +Subtag: yla +Description: Yaul +Added: 2009-07-29 +%% +Type: language +Subtag: ylb +Description: Yaleba +Added: 2010-03-11 +%% +Type: language +Subtag: yle +Description: Yele +Added: 2009-07-29 +%% +Type: language +Subtag: ylg +Description: Yelogu +Added: 2009-07-29 +%% +Type: language +Subtag: yli +Description: Angguruk Yali +Added: 2009-07-29 +%% +Type: language +Subtag: yll +Description: Yil +Added: 2009-07-29 +%% +Type: language +Subtag: ylm +Description: Limi +Added: 2009-07-29 +%% +Type: language +Subtag: yln +Description: Langnian Buyang +Added: 2009-07-29 +%% +Type: language +Subtag: ylo +Description: Naluo Yi +Added: 2009-07-29 +%% +Type: language +Subtag: ylr +Description: Yalarnnga +Added: 2009-07-29 +%% +Type: language +Subtag: ylu +Description: Aribwaung +Added: 2009-07-29 +%% +Type: language +Subtag: yly +Description: Nyâlayu +Added: 2009-07-29 +%% +Type: language +Subtag: yma +Description: Yamphe +Added: 2009-07-29 +Deprecated: 2012-08-12 +Preferred-Value: lrr +%% +Type: language +Subtag: ymb +Description: Yambes +Added: 2009-07-29 +%% +Type: language +Subtag: ymc +Description: Southern Muji +Added: 2009-07-29 +%% +Type: language +Subtag: ymd +Description: Muda +Added: 2009-07-29 +%% +Type: language +Subtag: yme +Description: Yameo +Added: 2009-07-29 +%% +Type: language +Subtag: ymg +Description: Yamongeri +Added: 2009-07-29 +%% +Type: language +Subtag: ymh +Description: Mili +Added: 2009-07-29 +%% +Type: language +Subtag: ymi +Description: Moji +Added: 2009-07-29 +%% +Type: language +Subtag: ymk +Description: Makwe +Added: 2009-07-29 +%% +Type: language +Subtag: yml +Description: Iamalele +Added: 2009-07-29 +%% +Type: language +Subtag: ymm +Description: Maay +Added: 2009-07-29 +%% +Type: language +Subtag: ymn +Description: Yamna +Description: Sunum +Added: 2009-07-29 +%% +Type: language +Subtag: ymo +Description: Yangum Mon +Added: 2009-07-29 +%% +Type: language +Subtag: ymp +Description: Yamap +Added: 2009-07-29 +%% +Type: language +Subtag: ymq +Description: Qila Muji +Added: 2009-07-29 +%% +Type: language +Subtag: ymr +Description: Malasar +Added: 2009-07-29 +%% +Type: language +Subtag: yms +Description: Mysian +Added: 2009-07-29 +%% +Type: language +Subtag: ymt +Description: Mator-Taygi-Karagas +Added: 2009-07-29 +%% +Type: language +Subtag: ymx +Description: Northern Muji +Added: 2009-07-29 +%% +Type: language +Subtag: ymz +Description: Muzi +Added: 2009-07-29 +%% +Type: language +Subtag: yna +Description: Aluo +Added: 2009-07-29 +%% +Type: language +Subtag: ynd +Description: Yandruwandha +Added: 2009-07-29 +%% +Type: language +Subtag: yne +Description: Lang'e +Added: 2009-07-29 +%% +Type: language +Subtag: yng +Description: Yango +Added: 2009-07-29 +%% +Type: language +Subtag: ynh +Description: Yangho +Added: 2009-07-29 +%% +Type: language +Subtag: ynk +Description: Naukan Yupik +Added: 2009-07-29 +%% +Type: language +Subtag: ynl +Description: Yangulam +Added: 2009-07-29 +%% +Type: language +Subtag: ynn +Description: Yana +Added: 2009-07-29 +%% +Type: language +Subtag: yno +Description: Yong +Added: 2009-07-29 +%% +Type: language +Subtag: ynq +Description: Yendang +Added: 2012-08-12 +%% +Type: language +Subtag: yns +Description: Yansi +Added: 2009-07-29 +%% +Type: language +Subtag: ynu +Description: Yahuna +Added: 2009-07-29 +%% +Type: language +Subtag: yob +Description: Yoba +Added: 2009-07-29 +%% +Type: language +Subtag: yog +Description: Yogad +Added: 2009-07-29 +%% +Type: language +Subtag: yoi +Description: Yonaguni +Added: 2009-07-29 +%% +Type: language +Subtag: yok +Description: Yokuts +Added: 2009-07-29 +%% +Type: language +Subtag: yol +Description: Yola +Added: 2009-07-29 +%% +Type: language +Subtag: yom +Description: Yombe +Added: 2009-07-29 +%% +Type: language +Subtag: yon +Description: Yongkom +Added: 2009-07-29 +%% +Type: language +Subtag: yos +Description: Yos +Added: 2009-07-29 +%% +Type: language +Subtag: yot +Description: Yotti +Added: 2012-08-12 +%% +Type: language +Subtag: yox +Description: Yoron +Added: 2009-07-29 +%% +Type: language +Subtag: yoy +Description: Yoy +Added: 2009-07-29 +%% +Type: language +Subtag: ypa +Description: Phala +Added: 2009-07-29 +%% +Type: language +Subtag: ypb +Description: Labo Phowa +Added: 2009-07-29 +%% +Type: language +Subtag: ypg +Description: Phola +Added: 2009-07-29 +%% +Type: language +Subtag: yph +Description: Phupha +Added: 2009-07-29 +%% +Type: language +Subtag: ypk +Description: Yupik languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: ypm +Description: Phuma +Added: 2009-07-29 +%% +Type: language +Subtag: ypn +Description: Ani Phowa +Added: 2009-07-29 +%% +Type: language +Subtag: ypo +Description: Alo Phola +Added: 2009-07-29 +%% +Type: language +Subtag: ypp +Description: Phupa +Added: 2009-07-29 +%% +Type: language +Subtag: ypz +Description: Phuza +Added: 2009-07-29 +%% +Type: language +Subtag: yra +Description: Yerakai +Added: 2009-07-29 +%% +Type: language +Subtag: yrb +Description: Yareba +Added: 2009-07-29 +%% +Type: language +Subtag: yre +Description: Yaouré +Added: 2009-07-29 +%% +Type: language +Subtag: yri +Description: Yarí +Added: 2009-07-29 +%% +Type: language +Subtag: yrk +Description: Nenets +Added: 2009-07-29 +%% +Type: language +Subtag: yrl +Description: Nhengatu +Added: 2009-07-29 +%% +Type: language +Subtag: yrn +Description: Yerong +Added: 2009-07-29 +%% +Type: language +Subtag: yrs +Description: Yarsun +Added: 2009-07-29 +%% +Type: language +Subtag: yrw +Description: Yarawata +Added: 2009-07-29 +%% +Type: language +Subtag: ysc +Description: Yassic +Added: 2009-07-29 +%% +Type: language +Subtag: ysd +Description: Samatao +Added: 2009-07-29 +%% +Type: language +Subtag: ysg +Description: Sonaga +Added: 2012-08-12 +%% +Type: language +Subtag: ysl +Description: Yugoslavian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: ysn +Description: Sani +Added: 2009-07-29 +%% +Type: language +Subtag: yso +Description: Nisi (China) +Added: 2009-07-29 +%% +Type: language +Subtag: ysp +Description: Southern Lolopo +Added: 2009-07-29 +%% +Type: language +Subtag: ysr +Description: Sirenik Yupik +Added: 2009-07-29 +%% +Type: language +Subtag: yss +Description: Yessan-Mayo +Added: 2009-07-29 +%% +Type: language +Subtag: ysy +Description: Sanie +Added: 2009-07-29 +%% +Type: language +Subtag: yta +Description: Talu +Added: 2009-07-29 +%% +Type: language +Subtag: ytl +Description: Tanglang +Added: 2009-07-29 +%% +Type: language +Subtag: ytp +Description: Thopho +Added: 2009-07-29 +%% +Type: language +Subtag: ytw +Description: Yout Wam +Added: 2010-03-11 +%% +Type: language +Subtag: yua +Description: Yucateco +Description: Yucatec Maya +Added: 2009-07-29 +%% +Type: language +Subtag: yub +Description: Yugambal +Added: 2009-07-29 +%% +Type: language +Subtag: yuc +Description: Yuchi +Added: 2009-07-29 +%% +Type: language +Subtag: yud +Description: Judeo-Tripolitanian Arabic +Added: 2009-07-29 +Macrolanguage: jrb +%% +Type: language +Subtag: yue +Description: Yue Chinese +Added: 2009-07-29 +Macrolanguage: zh +%% +Type: language +Subtag: yuf +Description: Havasupai-Walapai-Yavapai +Added: 2009-07-29 +%% +Type: language +Subtag: yug +Description: Yug +Added: 2009-07-29 +%% +Type: language +Subtag: yui +Description: Yurutí +Added: 2009-07-29 +%% +Type: language +Subtag: yuj +Description: Karkar-Yuri +Added: 2009-07-29 +%% +Type: language +Subtag: yuk +Description: Yuki +Added: 2009-07-29 +%% +Type: language +Subtag: yul +Description: Yulu +Added: 2009-07-29 +%% +Type: language +Subtag: yum +Description: Quechan +Added: 2009-07-29 +%% +Type: language +Subtag: yun +Description: Bena (Nigeria) +Added: 2009-07-29 +%% +Type: language +Subtag: yup +Description: Yukpa +Added: 2009-07-29 +%% +Type: language +Subtag: yuq +Description: Yuqui +Added: 2009-07-29 +%% +Type: language +Subtag: yur +Description: Yurok +Added: 2009-07-29 +%% +Type: language +Subtag: yut +Description: Yopno +Added: 2009-07-29 +%% +Type: language +Subtag: yuu +Description: Yugh +Added: 2009-07-29 +%% +Type: language +Subtag: yuw +Description: Yau (Morobe Province) +Added: 2009-07-29 +%% +Type: language +Subtag: yux +Description: Southern Yukaghir +Added: 2009-07-29 +%% +Type: language +Subtag: yuy +Description: East Yugur +Added: 2009-07-29 +%% +Type: language +Subtag: yuz +Description: Yuracare +Added: 2009-07-29 +%% +Type: language +Subtag: yva +Description: Yawa +Added: 2009-07-29 +%% +Type: language +Subtag: yvt +Description: Yavitero +Added: 2009-07-29 +%% +Type: language +Subtag: ywa +Description: Kalou +Added: 2009-07-29 +%% +Type: language +Subtag: ywl +Description: Western Lalu +Added: 2009-07-29 +%% +Type: language +Subtag: ywn +Description: Yawanawa +Added: 2009-07-29 +%% +Type: language +Subtag: ywq +Description: Wuding-Luquan Yi +Added: 2009-07-29 +%% +Type: language +Subtag: ywr +Description: Yawuru +Added: 2009-07-29 +%% +Type: language +Subtag: ywt +Description: Xishanba Lalo +Description: Central Lalo +Added: 2009-07-29 +%% +Type: language +Subtag: ywu +Description: Wumeng Nasu +Added: 2009-07-29 +%% +Type: language +Subtag: yww +Description: Yawarawarga +Added: 2009-07-29 +%% +Type: language +Subtag: yxg +Description: Yagara +Added: 2012-08-12 +%% +Type: language +Subtag: yxy +Description: Yabula Yabula +Added: 2012-08-12 +%% +Type: language +Subtag: yyu +Description: Yau (Sandaun Province) +Added: 2009-07-29 +%% +Type: language +Subtag: yyz +Description: Ayizi +Added: 2009-07-29 +%% +Type: language +Subtag: yzg +Description: E'ma Buyang +Added: 2009-07-29 +%% +Type: language +Subtag: yzk +Description: Zokhuo +Added: 2009-07-29 +%% +Type: language +Subtag: zaa +Description: Sierra de Juárez Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zab +Description: San Juan Guelavía Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zac +Description: Ocotlán Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zad +Description: Cajonos Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zae +Description: Yareni Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zaf +Description: Ayoquesco Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zag +Description: Zaghawa +Added: 2009-07-29 +%% +Type: language +Subtag: zah +Description: Zangwal +Added: 2009-07-29 +%% +Type: language +Subtag: zai +Description: Isthmus Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zaj +Description: Zaramo +Added: 2009-07-29 +%% +Type: language +Subtag: zak +Description: Zanaki +Added: 2009-07-29 +%% +Type: language +Subtag: zal +Description: Zauzou +Added: 2009-07-29 +%% +Type: language +Subtag: zam +Description: Miahuatlán Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zao +Description: Ozolotepec Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zap +Description: Zapotec +Added: 2005-10-16 +Scope: macrolanguage +%% +Type: language +Subtag: zaq +Description: Aloápam Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zar +Description: Rincón Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zas +Description: Santo Domingo Albarradas Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zat +Description: Tabaa Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zau +Description: Zangskari +Added: 2009-07-29 +%% +Type: language +Subtag: zav +Description: Yatzachi Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zaw +Description: Mitla Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zax +Description: Xadani Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zay +Description: Zayse-Zergulla +Description: Zaysete +Added: 2009-07-29 +%% +Type: language +Subtag: zaz +Description: Zari +Added: 2009-07-29 +%% +Type: language +Subtag: zbc +Description: Central Berawan +Added: 2009-07-29 +%% +Type: language +Subtag: zbe +Description: East Berawan +Added: 2009-07-29 +%% +Type: language +Subtag: zbl +Description: Blissymbols +Description: Bliss +Description: Blissymbolics +Added: 2007-08-21 +Suppress-Script: Blis +%% +Type: language +Subtag: zbt +Description: Batui +Added: 2009-07-29 +%% +Type: language +Subtag: zbw +Description: West Berawan +Added: 2009-07-29 +%% +Type: language +Subtag: zca +Description: Coatecas Altas Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zch +Description: Central Hongshuihe Zhuang +Added: 2009-07-29 +Macrolanguage: za +%% +Type: language +Subtag: zdj +Description: Ngazidja Comorian +Added: 2009-07-29 +%% +Type: language +Subtag: zea +Description: Zeeuws +Added: 2009-07-29 +%% +Type: language +Subtag: zeg +Description: Zenag +Added: 2009-07-29 +%% +Type: language +Subtag: zeh +Description: Eastern Hongshuihe Zhuang +Added: 2009-07-29 +Macrolanguage: za +%% +Type: language +Subtag: zen +Description: Zenaga +Added: 2005-10-16 +%% +Type: language +Subtag: zga +Description: Kinga +Added: 2009-07-29 +%% +Type: language +Subtag: zgb +Description: Guibei Zhuang +Added: 2009-07-29 +Macrolanguage: za +%% +Type: language +Subtag: zgm +Description: Minz Zhuang +Added: 2009-07-29 +Macrolanguage: za +%% +Type: language +Subtag: zgn +Description: Guibian Zhuang +Added: 2009-07-29 +Macrolanguage: za +%% +Type: language +Subtag: zgr +Description: Magori +Added: 2009-07-29 +%% +Type: language +Subtag: zhb +Description: Zhaba +Added: 2009-07-29 +%% +Type: language +Subtag: zhd +Description: Dai Zhuang +Added: 2009-07-29 +Macrolanguage: za +%% +Type: language +Subtag: zhi +Description: Zhire +Added: 2009-07-29 +%% +Type: language +Subtag: zhn +Description: Nong Zhuang +Added: 2009-07-29 +Macrolanguage: za +%% +Type: language +Subtag: zhw +Description: Zhoa +Added: 2009-07-29 +%% +Type: language +Subtag: zhx +Description: Chinese (family) +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: zia +Description: Zia +Added: 2009-07-29 +%% +Type: language +Subtag: zib +Description: Zimbabwe Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: zik +Description: Zimakani +Added: 2009-07-29 +%% +Type: language +Subtag: zil +Description: Zialo +Added: 2011-08-16 +%% +Type: language +Subtag: zim +Description: Mesme +Added: 2009-07-29 +%% +Type: language +Subtag: zin +Description: Zinza +Added: 2009-07-29 +%% +Type: language +Subtag: zir +Description: Ziriya +Added: 2009-07-29 +%% +Type: language +Subtag: ziw +Description: Zigula +Added: 2009-07-29 +%% +Type: language +Subtag: ziz +Description: Zizilivakan +Added: 2009-07-29 +%% +Type: language +Subtag: zka +Description: Kaimbulawa +Added: 2009-07-29 +%% +Type: language +Subtag: zkb +Description: Koibal +Added: 2009-07-29 +%% +Type: language +Subtag: zkd +Description: Kadu +Added: 2012-08-12 +%% +Type: language +Subtag: zkg +Description: Koguryo +Added: 2009-07-29 +%% +Type: language +Subtag: zkh +Description: Khorezmian +Added: 2009-07-29 +%% +Type: language +Subtag: zkk +Description: Karankawa +Added: 2009-07-29 +%% +Type: language +Subtag: zkn +Description: Kanan +Added: 2012-08-12 +%% +Type: language +Subtag: zko +Description: Kott +Added: 2009-07-29 +%% +Type: language +Subtag: zkp +Description: São Paulo Kaingáng +Added: 2009-07-29 +%% +Type: language +Subtag: zkr +Description: Zakhring +Added: 2009-07-29 +%% +Type: language +Subtag: zkt +Description: Kitan +Added: 2009-07-29 +%% +Type: language +Subtag: zku +Description: Kaurna +Added: 2009-07-29 +%% +Type: language +Subtag: zkv +Description: Krevinian +Added: 2009-07-29 +%% +Type: language +Subtag: zkz +Description: Khazar +Added: 2009-07-29 +%% +Type: language +Subtag: zle +Description: East Slavic languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: zlj +Description: Liujiang Zhuang +Added: 2009-07-29 +Macrolanguage: za +%% +Type: language +Subtag: zlm +Description: Malay (individual language) +Added: 2009-07-29 +Macrolanguage: ms +%% +Type: language +Subtag: zln +Description: Lianshan Zhuang +Added: 2009-07-29 +Macrolanguage: za +%% +Type: language +Subtag: zlq +Description: Liuqian Zhuang +Added: 2009-07-29 +Macrolanguage: za +%% +Type: language +Subtag: zls +Description: South Slavic languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: zlw +Description: West Slavic languages +Added: 2009-07-29 +Scope: collection +%% +Type: language +Subtag: zma +Description: Manda (Australia) +Added: 2009-07-29 +%% +Type: language +Subtag: zmb +Description: Zimba +Added: 2009-07-29 +%% +Type: language +Subtag: zmc +Description: Margany +Added: 2009-07-29 +%% +Type: language +Subtag: zmd +Description: Maridan +Added: 2009-07-29 +%% +Type: language +Subtag: zme +Description: Mangerr +Added: 2009-07-29 +%% +Type: language +Subtag: zmf +Description: Mfinu +Added: 2009-07-29 +%% +Type: language +Subtag: zmg +Description: Marti Ke +Added: 2009-07-29 +%% +Type: language +Subtag: zmh +Description: Makolkol +Added: 2009-07-29 +%% +Type: language +Subtag: zmi +Description: Negeri Sembilan Malay +Added: 2009-07-29 +Macrolanguage: ms +%% +Type: language +Subtag: zmj +Description: Maridjabin +Added: 2009-07-29 +%% +Type: language +Subtag: zmk +Description: Mandandanyi +Added: 2009-07-29 +%% +Type: language +Subtag: zml +Description: Madngele +Added: 2009-07-29 +%% +Type: language +Subtag: zmm +Description: Marimanindji +Added: 2009-07-29 +%% +Type: language +Subtag: zmn +Description: Mbangwe +Added: 2009-07-29 +%% +Type: language +Subtag: zmo +Description: Molo +Added: 2009-07-29 +%% +Type: language +Subtag: zmp +Description: Mpuono +Added: 2009-07-29 +%% +Type: language +Subtag: zmq +Description: Mituku +Added: 2009-07-29 +%% +Type: language +Subtag: zmr +Description: Maranunggu +Added: 2009-07-29 +%% +Type: language +Subtag: zms +Description: Mbesa +Added: 2009-07-29 +%% +Type: language +Subtag: zmt +Description: Maringarr +Added: 2009-07-29 +%% +Type: language +Subtag: zmu +Description: Muruwari +Added: 2009-07-29 +%% +Type: language +Subtag: zmv +Description: Mbariman-Gudhinma +Added: 2009-07-29 +%% +Type: language +Subtag: zmw +Description: Mbo (Democratic Republic of Congo) +Added: 2009-07-29 +%% +Type: language +Subtag: zmx +Description: Bomitaba +Added: 2009-07-29 +%% +Type: language +Subtag: zmy +Description: Mariyedi +Added: 2009-07-29 +%% +Type: language +Subtag: zmz +Description: Mbandja +Added: 2009-07-29 +%% +Type: language +Subtag: zna +Description: Zan Gula +Added: 2009-07-29 +%% +Type: language +Subtag: znd +Description: Zande languages +Added: 2005-10-16 +Scope: collection +%% +Type: language +Subtag: zne +Description: Zande (individual language) +Added: 2009-07-29 +%% +Type: language +Subtag: zng +Description: Mang +Added: 2009-07-29 +%% +Type: language +Subtag: znk +Description: Manangkari +Added: 2009-07-29 +%% +Type: language +Subtag: zns +Description: Mangas +Added: 2009-07-29 +%% +Type: language +Subtag: zoc +Description: Copainalá Zoque +Added: 2009-07-29 +%% +Type: language +Subtag: zoh +Description: Chimalapa Zoque +Added: 2009-07-29 +%% +Type: language +Subtag: zom +Description: Zou +Added: 2009-07-29 +%% +Type: language +Subtag: zoo +Description: Asunción Mixtepec Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zoq +Description: Tabasco Zoque +Added: 2009-07-29 +%% +Type: language +Subtag: zor +Description: Rayón Zoque +Added: 2009-07-29 +%% +Type: language +Subtag: zos +Description: Francisco León Zoque +Added: 2009-07-29 +%% +Type: language +Subtag: zpa +Description: Lachiguiri Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zpb +Description: Yautepec Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zpc +Description: Choapan Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zpd +Description: Southeastern Ixtlán Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zpe +Description: Petapa Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zpf +Description: San Pedro Quiatoni Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zpg +Description: Guevea De Humboldt Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zph +Description: Totomachapan Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zpi +Description: Santa María Quiegolani Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zpj +Description: Quiavicuzas Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zpk +Description: Tlacolulita Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zpl +Description: Lachixío Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zpm +Description: Mixtepec Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zpn +Description: Santa Inés Yatzechi Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zpo +Description: Amatlán Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zpp +Description: El Alto Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zpq +Description: Zoogocho Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zpr +Description: Santiago Xanica Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zps +Description: Coatlán Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zpt +Description: San Vicente Coatlán Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zpu +Description: Yalálag Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zpv +Description: Chichicapan Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zpw +Description: Zaniza Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zpx +Description: San Baltazar Loxicha Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zpy +Description: Mazaltepec Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zpz +Description: Texmelucan Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zqe +Description: Qiubei Zhuang +Added: 2009-07-29 +Macrolanguage: za +%% +Type: language +Subtag: zra +Description: Kara (Korea) +Added: 2009-07-29 +%% +Type: language +Subtag: zrg +Description: Mirgan +Added: 2009-07-29 +%% +Type: language +Subtag: zrn +Description: Zerenkel +Added: 2009-07-29 +%% +Type: language +Subtag: zro +Description: Záparo +Added: 2009-07-29 +%% +Type: language +Subtag: zrp +Description: Zarphatic +Added: 2009-07-29 +%% +Type: language +Subtag: zrs +Description: Mairasi +Added: 2009-07-29 +%% +Type: language +Subtag: zsa +Description: Sarasira +Added: 2009-07-29 +%% +Type: language +Subtag: zsk +Description: Kaskean +Added: 2009-07-29 +%% +Type: language +Subtag: zsl +Description: Zambian Sign Language +Added: 2009-07-29 +%% +Type: language +Subtag: zsm +Description: Standard Malay +Added: 2009-07-29 +Macrolanguage: ms +%% +Type: language +Subtag: zsr +Description: Southern Rincon Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zsu +Description: Sukurum +Added: 2009-07-29 +%% +Type: language +Subtag: zte +Description: Elotepec Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: ztg +Description: Xanaguía Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: ztl +Description: Lapaguía-Guivini Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: ztm +Description: San Agustín Mixtepec Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: ztn +Description: Santa Catarina Albarradas Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: ztp +Description: Loxicha Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: ztq +Description: Quioquitani-Quierí Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zts +Description: Tilquiapan Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: ztt +Description: Tejalapan Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: ztu +Description: Güilá Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: ztx +Description: Zaachila Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zty +Description: Yatee Zapotec +Added: 2009-07-29 +Macrolanguage: zap +%% +Type: language +Subtag: zua +Description: Zeem +Added: 2009-07-29 +%% +Type: language +Subtag: zuh +Description: Tokano +Added: 2009-07-29 +%% +Type: language +Subtag: zum +Description: Kumzari +Added: 2009-07-29 +%% +Type: language +Subtag: zun +Description: Zuni +Added: 2005-10-16 +%% +Type: language +Subtag: zuy +Description: Zumaya +Added: 2009-07-29 +%% +Type: language +Subtag: zwa +Description: Zay +Added: 2009-07-29 +%% +Type: language +Subtag: zxx +Description: No linguistic content +Description: Not applicable +Added: 2006-03-08 +Scope: special +%% +Type: language +Subtag: zyb +Description: Yongbei Zhuang +Added: 2009-07-29 +Macrolanguage: za +%% +Type: language +Subtag: zyg +Description: Yang Zhuang +Added: 2009-07-29 +Macrolanguage: za +%% +Type: language +Subtag: zyj +Description: Youjiang Zhuang +Added: 2009-07-29 +Macrolanguage: za +%% +Type: language +Subtag: zyn +Description: Yongnan Zhuang +Added: 2009-07-29 +Macrolanguage: za +%% +Type: language +Subtag: zyp +Description: Zyphe +Added: 2009-07-29 +%% +Type: language +Subtag: zza +Description: Zaza +Description: Dimili +Description: Dimli (macrolanguage) +Description: Kirdki +Description: Kirmanjki (macrolanguage) +Description: Zazaki +Added: 2006-08-24 +Scope: macrolanguage +%% +Type: language +Subtag: zzj +Description: Zuojiang Zhuang +Added: 2009-07-29 +Macrolanguage: za +%% +Type: extlang +Subtag: aao +Description: Algerian Saharan Arabic +Added: 2009-07-29 +Preferred-Value: aao +Prefix: ar +Macrolanguage: ar +%% +Type: extlang +Subtag: abh +Description: Tajiki Arabic +Added: 2009-07-29 +Preferred-Value: abh +Prefix: ar +Macrolanguage: ar +%% +Type: extlang +Subtag: abv +Description: Baharna Arabic +Added: 2009-07-29 +Preferred-Value: abv +Prefix: ar +Macrolanguage: ar +%% +Type: extlang +Subtag: acm +Description: Mesopotamian Arabic +Added: 2009-07-29 +Preferred-Value: acm +Prefix: ar +Macrolanguage: ar +%% +Type: extlang +Subtag: acq +Description: Ta'izzi-Adeni Arabic +Added: 2009-07-29 +Preferred-Value: acq +Prefix: ar +Macrolanguage: ar +%% +Type: extlang +Subtag: acw +Description: Hijazi Arabic +Added: 2009-07-29 +Preferred-Value: acw +Prefix: ar +Macrolanguage: ar +%% +Type: extlang +Subtag: acx +Description: Omani Arabic +Added: 2009-07-29 +Preferred-Value: acx +Prefix: ar +Macrolanguage: ar +%% +Type: extlang +Subtag: acy +Description: Cypriot Arabic +Added: 2009-07-29 +Preferred-Value: acy +Prefix: ar +Macrolanguage: ar +%% +Type: extlang +Subtag: adf +Description: Dhofari Arabic +Added: 2009-07-29 +Preferred-Value: adf +Prefix: ar +Macrolanguage: ar +%% +Type: extlang +Subtag: ads +Description: Adamorobe Sign Language +Added: 2009-07-29 +Preferred-Value: ads +Prefix: sgn +%% +Type: extlang +Subtag: aeb +Description: Tunisian Arabic +Added: 2009-07-29 +Preferred-Value: aeb +Prefix: ar +Macrolanguage: ar +%% +Type: extlang +Subtag: aec +Description: Saidi Arabic +Added: 2009-07-29 +Preferred-Value: aec +Prefix: ar +Macrolanguage: ar +%% +Type: extlang +Subtag: aed +Description: Argentine Sign Language +Added: 2009-07-29 +Preferred-Value: aed +Prefix: sgn +%% +Type: extlang +Subtag: aen +Description: Armenian Sign Language +Added: 2009-07-29 +Preferred-Value: aen +Prefix: sgn +%% +Type: extlang +Subtag: afb +Description: Gulf Arabic +Added: 2009-07-29 +Preferred-Value: afb +Prefix: ar +Macrolanguage: ar +%% +Type: extlang +Subtag: afg +Description: Afghan Sign Language +Added: 2009-07-29 +Preferred-Value: afg +Prefix: sgn +%% +Type: extlang +Subtag: ajp +Description: South Levantine Arabic +Added: 2009-07-29 +Preferred-Value: ajp +Prefix: ar +Macrolanguage: ar +%% +Type: extlang +Subtag: apc +Description: North Levantine Arabic +Added: 2009-07-29 +Preferred-Value: apc +Prefix: ar +Macrolanguage: ar +%% +Type: extlang +Subtag: apd +Description: Sudanese Arabic +Added: 2009-07-29 +Preferred-Value: apd +Prefix: ar +Macrolanguage: ar +%% +Type: extlang +Subtag: arb +Description: Standard Arabic +Added: 2009-07-29 +Preferred-Value: arb +Prefix: ar +Macrolanguage: ar +%% +Type: extlang +Subtag: arq +Description: Algerian Arabic +Added: 2009-07-29 +Preferred-Value: arq +Prefix: ar +Macrolanguage: ar +%% +Type: extlang +Subtag: ars +Description: Najdi Arabic +Added: 2009-07-29 +Preferred-Value: ars +Prefix: ar +Macrolanguage: ar +%% +Type: extlang +Subtag: ary +Description: Moroccan Arabic +Added: 2009-07-29 +Preferred-Value: ary +Prefix: ar +Macrolanguage: ar +%% +Type: extlang +Subtag: arz +Description: Egyptian Arabic +Added: 2009-07-29 +Preferred-Value: arz +Prefix: ar +Macrolanguage: ar +%% +Type: extlang +Subtag: ase +Description: American Sign Language +Added: 2009-07-29 +Preferred-Value: ase +Prefix: sgn +%% +Type: extlang +Subtag: asf +Description: Australian Sign Language +Added: 2009-07-29 +Preferred-Value: asf +Prefix: sgn +%% +Type: extlang +Subtag: asp +Description: Algerian Sign Language +Added: 2009-07-29 +Preferred-Value: asp +Prefix: sgn +%% +Type: extlang +Subtag: asq +Description: Austrian Sign Language +Added: 2009-07-29 +Preferred-Value: asq +Prefix: sgn +%% +Type: extlang +Subtag: asw +Description: Australian Aborigines Sign Language +Added: 2009-07-29 +Preferred-Value: asw +Prefix: sgn +%% +Type: extlang +Subtag: auz +Description: Uzbeki Arabic +Added: 2009-07-29 +Preferred-Value: auz +Prefix: ar +Macrolanguage: ar +%% +Type: extlang +Subtag: avl +Description: Eastern Egyptian Bedawi Arabic +Added: 2009-07-29 +Preferred-Value: avl +Prefix: ar +Macrolanguage: ar +%% +Type: extlang +Subtag: ayh +Description: Hadrami Arabic +Added: 2009-07-29 +Preferred-Value: ayh +Prefix: ar +Macrolanguage: ar +%% +Type: extlang +Subtag: ayl +Description: Libyan Arabic +Added: 2009-07-29 +Preferred-Value: ayl +Prefix: ar +Macrolanguage: ar +%% +Type: extlang +Subtag: ayn +Description: Sanaani Arabic +Added: 2009-07-29 +Preferred-Value: ayn +Prefix: ar +Macrolanguage: ar +%% +Type: extlang +Subtag: ayp +Description: North Mesopotamian Arabic +Added: 2009-07-29 +Preferred-Value: ayp +Prefix: ar +Macrolanguage: ar +%% +Type: extlang +Subtag: bbz +Description: Babalia Creole Arabic +Added: 2009-07-29 +Preferred-Value: bbz +Prefix: ar +Macrolanguage: ar +%% +Type: extlang +Subtag: bfi +Description: British Sign Language +Added: 2009-07-29 +Preferred-Value: bfi +Prefix: sgn +%% +Type: extlang +Subtag: bfk +Description: Ban Khor Sign Language +Added: 2009-07-29 +Preferred-Value: bfk +Prefix: sgn +%% +Type: extlang +Subtag: bjn +Description: Banjar +Added: 2009-07-29 +Preferred-Value: bjn +Prefix: ms +Macrolanguage: ms +%% +Type: extlang +Subtag: bog +Description: Bamako Sign Language +Added: 2009-07-29 +Preferred-Value: bog +Prefix: sgn +%% +Type: extlang +Subtag: bqn +Description: Bulgarian Sign Language +Added: 2009-07-29 +Preferred-Value: bqn +Prefix: sgn +%% +Type: extlang +Subtag: bqy +Description: Bengkala Sign Language +Added: 2009-07-29 +Preferred-Value: bqy +Prefix: sgn +%% +Type: extlang +Subtag: btj +Description: Bacanese Malay +Added: 2009-07-29 +Preferred-Value: btj +Prefix: ms +Macrolanguage: ms +%% +Type: extlang +Subtag: bve +Description: Berau Malay +Added: 2009-07-29 +Preferred-Value: bve +Prefix: ms +Macrolanguage: ms +%% +Type: extlang +Subtag: bvl +Description: Bolivian Sign Language +Added: 2009-07-29 +Preferred-Value: bvl +Prefix: sgn +%% +Type: extlang +Subtag: bvu +Description: Bukit Malay +Added: 2009-07-29 +Preferred-Value: bvu +Prefix: ms +Macrolanguage: ms +%% +Type: extlang +Subtag: bzs +Description: Brazilian Sign Language +Added: 2009-07-29 +Preferred-Value: bzs +Prefix: sgn +%% +Type: extlang +Subtag: cdo +Description: Min Dong Chinese +Added: 2009-07-29 +Preferred-Value: cdo +Prefix: zh +Macrolanguage: zh +%% +Type: extlang +Subtag: cds +Description: Chadian Sign Language +Added: 2009-07-29 +Preferred-Value: cds +Prefix: sgn +%% +Type: extlang +Subtag: cjy +Description: Jinyu Chinese +Added: 2009-07-29 +Preferred-Value: cjy +Prefix: zh +Macrolanguage: zh +%% +Type: extlang +Subtag: cmn +Description: Mandarin Chinese +Added: 2009-07-29 +Preferred-Value: cmn +Prefix: zh +Macrolanguage: zh +%% +Type: extlang +Subtag: coa +Description: Cocos Islands Malay +Added: 2009-07-29 +Preferred-Value: coa +Prefix: ms +Macrolanguage: ms +%% +Type: extlang +Subtag: cpx +Description: Pu-Xian Chinese +Added: 2009-07-29 +Preferred-Value: cpx +Prefix: zh +Macrolanguage: zh +%% +Type: extlang +Subtag: csc +Description: Catalan Sign Language +Description: Lengua de señas catalana +Description: Llengua de Signes Catalana +Added: 2009-07-29 +Preferred-Value: csc +Prefix: sgn +%% +Type: extlang +Subtag: csd +Description: Chiangmai Sign Language +Added: 2009-07-29 +Preferred-Value: csd +Prefix: sgn +%% +Type: extlang +Subtag: cse +Description: Czech Sign Language +Added: 2009-07-29 +Preferred-Value: cse +Prefix: sgn +%% +Type: extlang +Subtag: csf +Description: Cuba Sign Language +Added: 2009-07-29 +Preferred-Value: csf +Prefix: sgn +%% +Type: extlang +Subtag: csg +Description: Chilean Sign Language +Added: 2009-07-29 +Preferred-Value: csg +Prefix: sgn +%% +Type: extlang +Subtag: csl +Description: Chinese Sign Language +Added: 2009-07-29 +Preferred-Value: csl +Prefix: sgn +%% +Type: extlang +Subtag: csn +Description: Colombian Sign Language +Added: 2009-07-29 +Preferred-Value: csn +Prefix: sgn +%% +Type: extlang +Subtag: csq +Description: Croatia Sign Language +Added: 2009-07-29 +Preferred-Value: csq +Prefix: sgn +%% +Type: extlang +Subtag: csr +Description: Costa Rican Sign Language +Added: 2009-07-29 +Preferred-Value: csr +Prefix: sgn +%% +Type: extlang +Subtag: czh +Description: Huizhou Chinese +Added: 2009-07-29 +Preferred-Value: czh +Prefix: zh +Macrolanguage: zh +%% +Type: extlang +Subtag: czo +Description: Min Zhong Chinese +Added: 2009-07-29 +Preferred-Value: czo +Prefix: zh +Macrolanguage: zh +%% +Type: extlang +Subtag: doq +Description: Dominican Sign Language +Added: 2009-07-29 +Preferred-Value: doq +Prefix: sgn +%% +Type: extlang +Subtag: dse +Description: Dutch Sign Language +Added: 2009-07-29 +Preferred-Value: dse +Prefix: sgn +%% +Type: extlang +Subtag: dsl +Description: Danish Sign Language +Added: 2009-07-29 +Preferred-Value: dsl +Prefix: sgn +%% +Type: extlang +Subtag: dup +Description: Duano +Added: 2009-07-29 +Preferred-Value: dup +Prefix: ms +Macrolanguage: ms +%% +Type: extlang +Subtag: ecs +Description: Ecuadorian Sign Language +Added: 2009-07-29 +Preferred-Value: ecs +Prefix: sgn +%% +Type: extlang +Subtag: esl +Description: Egypt Sign Language +Added: 2009-07-29 +Preferred-Value: esl +Prefix: sgn +%% +Type: extlang +Subtag: esn +Description: Salvadoran Sign Language +Added: 2009-07-29 +Preferred-Value: esn +Prefix: sgn +%% +Type: extlang +Subtag: eso +Description: Estonian Sign Language +Added: 2009-07-29 +Preferred-Value: eso +Prefix: sgn +%% +Type: extlang +Subtag: eth +Description: Ethiopian Sign Language +Added: 2009-07-29 +Preferred-Value: eth +Prefix: sgn +%% +Type: extlang +Subtag: fcs +Description: Quebec Sign Language +Added: 2009-07-29 +Preferred-Value: fcs +Prefix: sgn +%% +Type: extlang +Subtag: fse +Description: Finnish Sign Language +Added: 2009-07-29 +Preferred-Value: fse +Prefix: sgn +%% +Type: extlang +Subtag: fsl +Description: French Sign Language +Added: 2009-07-29 +Preferred-Value: fsl +Prefix: sgn +%% +Type: extlang +Subtag: fss +Description: Finland-Swedish Sign Language +Description: finlandssvenskt teckenspråk +Description: suomenruotsalainen viittomakieli +Added: 2009-07-29 +Preferred-Value: fss +Prefix: sgn +%% +Type: extlang +Subtag: gan +Description: Gan Chinese +Added: 2009-07-29 +Preferred-Value: gan +Prefix: zh +Macrolanguage: zh +%% +Type: extlang +Subtag: gds +Description: Ghandruk Sign Language +Added: 2012-08-12 +Preferred-Value: gds +Prefix: sgn +%% +Type: extlang +Subtag: gom +Description: Goan Konkani +Added: 2009-07-29 +Preferred-Value: gom +Prefix: kok +Macrolanguage: kok +%% +Type: extlang +Subtag: gse +Description: Ghanaian Sign Language +Added: 2009-07-29 +Preferred-Value: gse +Prefix: sgn +%% +Type: extlang +Subtag: gsg +Description: German Sign Language +Added: 2009-07-29 +Preferred-Value: gsg +Prefix: sgn +%% +Type: extlang +Subtag: gsm +Description: Guatemalan Sign Language +Added: 2009-07-29 +Preferred-Value: gsm +Prefix: sgn +%% +Type: extlang +Subtag: gss +Description: Greek Sign Language +Added: 2009-07-29 +Preferred-Value: gss +Prefix: sgn +%% +Type: extlang +Subtag: gus +Description: Guinean Sign Language +Added: 2009-07-29 +Preferred-Value: gus +Prefix: sgn +%% +Type: extlang +Subtag: hab +Description: Hanoi Sign Language +Added: 2009-07-29 +Preferred-Value: hab +Prefix: sgn +%% +Type: extlang +Subtag: haf +Description: Haiphong Sign Language +Added: 2009-07-29 +Preferred-Value: haf +Prefix: sgn +%% +Type: extlang +Subtag: hak +Description: Hakka Chinese +Added: 2009-07-29 +Preferred-Value: hak +Prefix: zh +Macrolanguage: zh +%% +Type: extlang +Subtag: hds +Description: Honduras Sign Language +Added: 2009-07-29 +Preferred-Value: hds +Prefix: sgn +%% +Type: extlang +Subtag: hji +Description: Haji +Added: 2009-07-29 +Preferred-Value: hji +Prefix: ms +Macrolanguage: ms +%% +Type: extlang +Subtag: hks +Description: Hong Kong Sign Language +Description: Heung Kong Sau Yue +Added: 2009-07-29 +Preferred-Value: hks +Prefix: sgn +%% +Type: extlang +Subtag: hos +Description: Ho Chi Minh City Sign Language +Added: 2009-07-29 +Preferred-Value: hos +Prefix: sgn +%% +Type: extlang +Subtag: hps +Description: Hawai'i Pidgin Sign Language +Added: 2009-07-29 +Preferred-Value: hps +Prefix: sgn +%% +Type: extlang +Subtag: hsh +Description: Hungarian Sign Language +Added: 2009-07-29 +Preferred-Value: hsh +Prefix: sgn +%% +Type: extlang +Subtag: hsl +Description: Hausa Sign Language +Added: 2009-07-29 +Preferred-Value: hsl +Prefix: sgn +%% +Type: extlang +Subtag: hsn +Description: Xiang Chinese +Added: 2009-07-29 +Preferred-Value: hsn +Prefix: zh +Macrolanguage: zh +%% +Type: extlang +Subtag: icl +Description: Icelandic Sign Language +Added: 2009-07-29 +Preferred-Value: icl +Prefix: sgn +%% +Type: extlang +Subtag: ils +Description: International Sign +Added: 2009-07-29 +Preferred-Value: ils +Prefix: sgn +%% +Type: extlang +Subtag: inl +Description: Indonesian Sign Language +Added: 2009-07-29 +Preferred-Value: inl +Prefix: sgn +%% +Type: extlang +Subtag: ins +Description: Indian Sign Language +Added: 2009-07-29 +Preferred-Value: ins +Prefix: sgn +%% +Type: extlang +Subtag: ise +Description: Italian Sign Language +Added: 2009-07-29 +Preferred-Value: ise +Prefix: sgn +%% +Type: extlang +Subtag: isg +Description: Irish Sign Language +Added: 2009-07-29 +Preferred-Value: isg +Prefix: sgn +%% +Type: extlang +Subtag: isr +Description: Israeli Sign Language +Added: 2009-07-29 +Preferred-Value: isr +Prefix: sgn +%% +Type: extlang +Subtag: jak +Description: Jakun +Added: 2009-07-29 +Preferred-Value: jak +Prefix: ms +Macrolanguage: ms +%% +Type: extlang +Subtag: jax +Description: Jambi Malay +Added: 2009-07-29 +Preferred-Value: jax +Prefix: ms +Macrolanguage: ms +%% +Type: extlang +Subtag: jcs +Description: Jamaican Country Sign Language +Added: 2009-07-29 +Preferred-Value: jcs +Prefix: sgn +%% +Type: extlang +Subtag: jhs +Description: Jhankot Sign Language +Added: 2009-07-29 +Preferred-Value: jhs +Prefix: sgn +%% +Type: extlang +Subtag: jls +Description: Jamaican Sign Language +Added: 2010-03-11 +Preferred-Value: jls +Prefix: sgn +%% +Type: extlang +Subtag: jos +Description: Jordanian Sign Language +Added: 2009-07-29 +Preferred-Value: jos +Prefix: sgn +%% +Type: extlang +Subtag: jsl +Description: Japanese Sign Language +Added: 2009-07-29 +Preferred-Value: jsl +Prefix: sgn +%% +Type: extlang +Subtag: jus +Description: Jumla Sign Language +Added: 2009-07-29 +Preferred-Value: jus +Prefix: sgn +%% +Type: extlang +Subtag: kgi +Description: Selangor Sign Language +Added: 2009-07-29 +Preferred-Value: kgi +Prefix: sgn +%% +Type: extlang +Subtag: knn +Description: Konkani (individual language) +Added: 2009-07-29 +Preferred-Value: knn +Prefix: kok +Macrolanguage: kok +%% +Type: extlang +Subtag: kvb +Description: Kubu +Added: 2009-07-29 +Preferred-Value: kvb +Prefix: ms +Macrolanguage: ms +%% +Type: extlang +Subtag: kvk +Description: Korean Sign Language +Added: 2009-07-29 +Preferred-Value: kvk +Prefix: sgn +%% +Type: extlang +Subtag: kvr +Description: Kerinci +Added: 2009-07-29 +Preferred-Value: kvr +Prefix: ms +Macrolanguage: ms +%% +Type: extlang +Subtag: kxd +Description: Brunei +Added: 2009-07-29 +Preferred-Value: kxd +Prefix: ms +Macrolanguage: ms +%% +Type: extlang +Subtag: lbs +Description: Libyan Sign Language +Added: 2009-07-29 +Preferred-Value: lbs +Prefix: sgn +%% +Type: extlang +Subtag: lce +Description: Loncong +Added: 2009-07-29 +Preferred-Value: lce +Prefix: ms +Macrolanguage: ms +%% +Type: extlang +Subtag: lcf +Description: Lubu +Added: 2009-07-29 +Preferred-Value: lcf +Prefix: ms +Macrolanguage: ms +%% +Type: extlang +Subtag: liw +Description: Col +Added: 2009-07-29 +Preferred-Value: liw +Prefix: ms +Macrolanguage: ms +%% +Type: extlang +Subtag: lls +Description: Lithuanian Sign Language +Added: 2009-07-29 +Preferred-Value: lls +Prefix: sgn +%% +Type: extlang +Subtag: lsg +Description: Lyons Sign Language +Added: 2009-07-29 +Preferred-Value: lsg +Prefix: sgn +%% +Type: extlang +Subtag: lsl +Description: Latvian Sign Language +Added: 2009-07-29 +Preferred-Value: lsl +Prefix: sgn +%% +Type: extlang +Subtag: lso +Description: Laos Sign Language +Added: 2009-07-29 +Preferred-Value: lso +Prefix: sgn +%% +Type: extlang +Subtag: lsp +Description: Panamanian Sign Language +Description: Lengua de Señas Panameñas +Added: 2009-07-29 +Preferred-Value: lsp +Prefix: sgn +%% +Type: extlang +Subtag: lst +Description: Trinidad and Tobago Sign Language +Added: 2009-07-29 +Preferred-Value: lst +Prefix: sgn +%% +Type: extlang +Subtag: lsy +Description: Mauritian Sign Language +Added: 2010-03-11 +Preferred-Value: lsy +Prefix: sgn +%% +Type: extlang +Subtag: ltg +Description: Latgalian +Added: 2010-03-11 +Preferred-Value: ltg +Prefix: lv +Macrolanguage: lv +%% +Type: extlang +Subtag: lvs +Description: Standard Latvian +Added: 2010-03-11 +Preferred-Value: lvs +Prefix: lv +Macrolanguage: lv +%% +Type: extlang +Subtag: lzh +Description: Literary Chinese +Added: 2009-07-29 +Preferred-Value: lzh +Prefix: zh +Macrolanguage: zh +%% +Type: extlang +Subtag: max +Description: North Moluccan Malay +Added: 2009-07-29 +Preferred-Value: max +Prefix: ms +Macrolanguage: ms +%% +Type: extlang +Subtag: mdl +Description: Maltese Sign Language +Added: 2009-07-29 +Preferred-Value: mdl +Prefix: sgn +%% +Type: extlang +Subtag: meo +Description: Kedah Malay +Added: 2009-07-29 +Preferred-Value: meo +Prefix: ms +Macrolanguage: ms +%% +Type: extlang +Subtag: mfa +Description: Pattani Malay +Added: 2009-07-29 +Preferred-Value: mfa +Prefix: ms +Macrolanguage: ms +%% +Type: extlang +Subtag: mfb +Description: Bangka +Added: 2009-07-29 +Preferred-Value: mfb +Prefix: ms +Macrolanguage: ms +%% +Type: extlang +Subtag: mfs +Description: Mexican Sign Language +Added: 2009-07-29 +Preferred-Value: mfs +Prefix: sgn +%% +Type: extlang +Subtag: min +Description: Minangkabau +Added: 2009-07-29 +Preferred-Value: min +Prefix: ms +Macrolanguage: ms +%% +Type: extlang +Subtag: mnp +Description: Min Bei Chinese +Added: 2009-07-29 +Preferred-Value: mnp +Prefix: zh +Macrolanguage: zh +%% +Type: extlang +Subtag: mqg +Description: Kota Bangun Kutai Malay +Added: 2009-07-29 +Preferred-Value: mqg +Prefix: ms +Macrolanguage: ms +%% +Type: extlang +Subtag: mre +Description: Martha's Vineyard Sign Language +Added: 2009-07-29 +Preferred-Value: mre +Prefix: sgn +%% +Type: extlang +Subtag: msd +Description: Yucatec Maya Sign Language +Added: 2009-07-29 +Preferred-Value: msd +Prefix: sgn +%% +Type: extlang +Subtag: msi +Description: Sabah Malay +Added: 2009-07-29 +Preferred-Value: msi +Prefix: ms +Macrolanguage: ms +%% +Type: extlang +Subtag: msr +Description: Mongolian Sign Language +Added: 2009-07-29 +Preferred-Value: msr +Prefix: sgn +%% +Type: extlang +Subtag: mui +Description: Musi +Added: 2009-07-29 +Preferred-Value: mui +Prefix: ms +Macrolanguage: ms +%% +Type: extlang +Subtag: mzc +Description: Madagascar Sign Language +Added: 2009-07-29 +Preferred-Value: mzc +Prefix: sgn +%% +Type: extlang +Subtag: mzg +Description: Monastic Sign Language +Added: 2009-07-29 +Preferred-Value: mzg +Prefix: sgn +%% +Type: extlang +Subtag: mzy +Description: Mozambican Sign Language +Added: 2009-07-29 +Preferred-Value: mzy +Prefix: sgn +%% +Type: extlang +Subtag: nan +Description: Min Nan Chinese +Added: 2009-07-29 +Preferred-Value: nan +Prefix: zh +Macrolanguage: zh +%% +Type: extlang +Subtag: nbs +Description: Namibian Sign Language +Added: 2009-07-29 +Preferred-Value: nbs +Prefix: sgn +%% +Type: extlang +Subtag: ncs +Description: Nicaraguan Sign Language +Added: 2009-07-29 +Preferred-Value: ncs +Prefix: sgn +%% +Type: extlang +Subtag: nsi +Description: Nigerian Sign Language +Added: 2009-07-29 +Preferred-Value: nsi +Prefix: sgn +%% +Type: extlang +Subtag: nsl +Description: Norwegian Sign Language +Added: 2009-07-29 +Preferred-Value: nsl +Prefix: sgn +%% +Type: extlang +Subtag: nsp +Description: Nepalese Sign Language +Added: 2009-07-29 +Preferred-Value: nsp +Prefix: sgn +%% +Type: extlang +Subtag: nsr +Description: Maritime Sign Language +Added: 2009-07-29 +Preferred-Value: nsr +Prefix: sgn +%% +Type: extlang +Subtag: nzs +Description: New Zealand Sign Language +Added: 2009-07-29 +Preferred-Value: nzs +Prefix: sgn +%% +Type: extlang +Subtag: okl +Description: Old Kentish Sign Language +Added: 2009-07-29 +Preferred-Value: okl +Prefix: sgn +%% +Type: extlang +Subtag: orn +Description: Orang Kanaq +Added: 2009-07-29 +Preferred-Value: orn +Prefix: ms +Macrolanguage: ms +%% +Type: extlang +Subtag: ors +Description: Orang Seletar +Added: 2009-07-29 +Preferred-Value: ors +Prefix: ms +Macrolanguage: ms +%% +Type: extlang +Subtag: pel +Description: Pekal +Added: 2009-07-29 +Preferred-Value: pel +Prefix: ms +Macrolanguage: ms +%% +Type: extlang +Subtag: pga +Description: Sudanese Creole Arabic +Added: 2009-07-29 +Preferred-Value: pga +Prefix: ar +Macrolanguage: ar +%% +Type: extlang +Subtag: pks +Description: Pakistan Sign Language +Added: 2009-07-29 +Preferred-Value: pks +Prefix: sgn +%% +Type: extlang +Subtag: prl +Description: Peruvian Sign Language +Added: 2009-07-29 +Preferred-Value: prl +Prefix: sgn +%% +Type: extlang +Subtag: prz +Description: Providencia Sign Language +Added: 2009-07-29 +Preferred-Value: prz +Prefix: sgn +%% +Type: extlang +Subtag: psc +Description: Persian Sign Language +Added: 2009-07-29 +Preferred-Value: psc +Prefix: sgn +%% +Type: extlang +Subtag: psd +Description: Plains Indian Sign Language +Added: 2009-07-29 +Preferred-Value: psd +Prefix: sgn +%% +Type: extlang +Subtag: pse +Description: Central Malay +Added: 2009-07-29 +Preferred-Value: pse +Prefix: ms +Macrolanguage: ms +%% +Type: extlang +Subtag: psg +Description: Penang Sign Language +Added: 2009-07-29 +Preferred-Value: psg +Prefix: sgn +%% +Type: extlang +Subtag: psl +Description: Puerto Rican Sign Language +Added: 2009-07-29 +Preferred-Value: psl +Prefix: sgn +%% +Type: extlang +Subtag: pso +Description: Polish Sign Language +Added: 2009-07-29 +Preferred-Value: pso +Prefix: sgn +%% +Type: extlang +Subtag: psp +Description: Philippine Sign Language +Added: 2009-07-29 +Preferred-Value: psp +Prefix: sgn +%% +Type: extlang +Subtag: psr +Description: Portuguese Sign Language +Added: 2009-07-29 +Preferred-Value: psr +Prefix: sgn +%% +Type: extlang +Subtag: pys +Description: Paraguayan Sign Language +Description: Lengua de Señas del Paraguay +Added: 2010-03-11 +Preferred-Value: pys +Prefix: sgn +%% +Type: extlang +Subtag: rms +Description: Romanian Sign Language +Added: 2009-07-29 +Preferred-Value: rms +Prefix: sgn +%% +Type: extlang +Subtag: rsi +Description: Rennellese Sign Language +Added: 2009-07-29 +Preferred-Value: rsi +Prefix: sgn +%% +Type: extlang +Subtag: rsl +Description: Russian Sign Language +Added: 2009-07-29 +Preferred-Value: rsl +Prefix: sgn +%% +Type: extlang +Subtag: sdl +Description: Saudi Arabian Sign Language +Added: 2009-07-29 +Preferred-Value: sdl +Prefix: sgn +%% +Type: extlang +Subtag: sfb +Description: Langue des signes de Belgique Francophone +Description: French Belgian Sign Language +Added: 2009-07-29 +Preferred-Value: sfb +Prefix: sgn +%% +Type: extlang +Subtag: sfs +Description: South African Sign Language +Added: 2009-07-29 +Preferred-Value: sfs +Prefix: sgn +%% +Type: extlang +Subtag: sgg +Description: Swiss-German Sign Language +Added: 2009-07-29 +Preferred-Value: sgg +Prefix: sgn +%% +Type: extlang +Subtag: sgx +Description: Sierra Leone Sign Language +Added: 2009-07-29 +Preferred-Value: sgx +Prefix: sgn +%% +Type: extlang +Subtag: shu +Description: Chadian Arabic +Added: 2009-07-29 +Preferred-Value: shu +Prefix: ar +Macrolanguage: ar +%% +Type: extlang +Subtag: slf +Description: Swiss-Italian Sign Language +Added: 2009-07-29 +Preferred-Value: slf +Prefix: sgn +%% +Type: extlang +Subtag: sls +Description: Singapore Sign Language +Added: 2009-07-29 +Preferred-Value: sls +Prefix: sgn +%% +Type: extlang +Subtag: sqk +Description: Albanian Sign Language +Added: 2012-08-12 +Preferred-Value: sqk +Prefix: sgn +%% +Type: extlang +Subtag: sqs +Description: Sri Lankan Sign Language +Added: 2009-07-29 +Preferred-Value: sqs +Prefix: sgn +%% +Type: extlang +Subtag: ssh +Description: Shihhi Arabic +Added: 2009-07-29 +Preferred-Value: ssh +Prefix: ar +Macrolanguage: ar +%% +Type: extlang +Subtag: ssp +Description: Spanish Sign Language +Added: 2009-07-29 +Preferred-Value: ssp +Prefix: sgn +%% +Type: extlang +Subtag: ssr +Description: Swiss-French Sign Language +Added: 2009-07-29 +Preferred-Value: ssr +Prefix: sgn +%% +Type: extlang +Subtag: svk +Description: Slovakian Sign Language +Added: 2009-07-29 +Preferred-Value: svk +Prefix: sgn +%% +Type: extlang +Subtag: swc +Description: Congo Swahili +Added: 2009-07-29 +Preferred-Value: swc +Prefix: sw +Macrolanguage: sw +%% +Type: extlang +Subtag: swh +Description: Swahili (individual language) +Description: Kiswahili +Added: 2009-07-29 +Preferred-Value: swh +Prefix: sw +Macrolanguage: sw +%% +Type: extlang +Subtag: swl +Description: Swedish Sign Language +Added: 2009-07-29 +Preferred-Value: swl +Prefix: sgn +%% +Type: extlang +Subtag: syy +Description: Al-Sayyid Bedouin Sign Language +Added: 2009-07-29 +Preferred-Value: syy +Prefix: sgn +%% +Type: extlang +Subtag: tmw +Description: Temuan +Added: 2009-07-29 +Preferred-Value: tmw +Prefix: ms +Macrolanguage: ms +%% +Type: extlang +Subtag: tse +Description: Tunisian Sign Language +Added: 2009-07-29 +Preferred-Value: tse +Prefix: sgn +%% +Type: extlang +Subtag: tsm +Description: Turkish Sign Language +Description: Türk İşaret Dili +Added: 2009-07-29 +Preferred-Value: tsm +Prefix: sgn +%% +Type: extlang +Subtag: tsq +Description: Thai Sign Language +Added: 2009-07-29 +Preferred-Value: tsq +Prefix: sgn +%% +Type: extlang +Subtag: tss +Description: Taiwan Sign Language +Added: 2009-07-29 +Preferred-Value: tss +Prefix: sgn +%% +Type: extlang +Subtag: tsy +Description: Tebul Sign Language +Added: 2009-07-29 +Preferred-Value: tsy +Prefix: sgn +%% +Type: extlang +Subtag: tza +Description: Tanzanian Sign Language +Added: 2009-07-29 +Preferred-Value: tza +Prefix: sgn +%% +Type: extlang +Subtag: ugn +Description: Ugandan Sign Language +Added: 2009-07-29 +Preferred-Value: ugn +Prefix: sgn +%% +Type: extlang +Subtag: ugy +Description: Uruguayan Sign Language +Added: 2009-07-29 +Preferred-Value: ugy +Prefix: sgn +%% +Type: extlang +Subtag: ukl +Description: Ukrainian Sign Language +Added: 2009-07-29 +Preferred-Value: ukl +Prefix: sgn +%% +Type: extlang +Subtag: uks +Description: Urubú-Kaapor Sign Language +Description: Kaapor Sign Language +Added: 2009-07-29 +Preferred-Value: uks +Prefix: sgn +%% +Type: extlang +Subtag: urk +Description: Urak Lawoi' +Added: 2009-07-29 +Preferred-Value: urk +Prefix: ms +Macrolanguage: ms +%% +Type: extlang +Subtag: uzn +Description: Northern Uzbek +Added: 2009-07-29 +Preferred-Value: uzn +Prefix: uz +Macrolanguage: uz +%% +Type: extlang +Subtag: uzs +Description: Southern Uzbek +Added: 2009-07-29 +Preferred-Value: uzs +Prefix: uz +Macrolanguage: uz +%% +Type: extlang +Subtag: vgt +Description: Vlaamse Gebarentaal +Description: Flemish Sign Language +Added: 2009-07-29 +Preferred-Value: vgt +Prefix: sgn +%% +Type: extlang +Subtag: vkk +Description: Kaur +Added: 2009-07-29 +Preferred-Value: vkk +Prefix: ms +Macrolanguage: ms +%% +Type: extlang +Subtag: vkt +Description: Tenggarong Kutai Malay +Added: 2009-07-29 +Preferred-Value: vkt +Prefix: ms +Macrolanguage: ms +%% +Type: extlang +Subtag: vsi +Description: Moldova Sign Language +Added: 2009-07-29 +Preferred-Value: vsi +Prefix: sgn +%% +Type: extlang +Subtag: vsl +Description: Venezuelan Sign Language +Added: 2009-07-29 +Preferred-Value: vsl +Prefix: sgn +%% +Type: extlang +Subtag: vsv +Description: Valencian Sign Language +Description: Llengua de signes valenciana +Added: 2009-07-29 +Preferred-Value: vsv +Prefix: sgn +%% +Type: extlang +Subtag: wuu +Description: Wu Chinese +Added: 2009-07-29 +Preferred-Value: wuu +Prefix: zh +Macrolanguage: zh +%% +Type: extlang +Subtag: xki +Description: Kenyan Sign Language +Added: 2009-07-29 +Preferred-Value: xki +Prefix: sgn +%% +Type: extlang +Subtag: xml +Description: Malaysian Sign Language +Added: 2009-07-29 +Preferred-Value: xml +Prefix: sgn +%% +Type: extlang +Subtag: xmm +Description: Manado Malay +Added: 2009-07-29 +Preferred-Value: xmm +Prefix: ms +Macrolanguage: ms +%% +Type: extlang +Subtag: xms +Description: Moroccan Sign Language +Added: 2009-07-29 +Preferred-Value: xms +Prefix: sgn +%% +Type: extlang +Subtag: yds +Description: Yiddish Sign Language +Added: 2009-07-29 +Preferred-Value: yds +Prefix: sgn +%% +Type: extlang +Subtag: ysl +Description: Yugoslavian Sign Language +Added: 2009-07-29 +Preferred-Value: ysl +Prefix: sgn +%% +Type: extlang +Subtag: yue +Description: Yue Chinese +Added: 2009-07-29 +Preferred-Value: yue +Prefix: zh +Macrolanguage: zh +%% +Type: extlang +Subtag: zib +Description: Zimbabwe Sign Language +Added: 2009-07-29 +Preferred-Value: zib +Prefix: sgn +%% +Type: extlang +Subtag: zlm +Description: Malay (individual language) +Added: 2009-07-29 +Preferred-Value: zlm +Prefix: ms +Macrolanguage: ms +%% +Type: extlang +Subtag: zmi +Description: Negeri Sembilan Malay +Added: 2009-07-29 +Preferred-Value: zmi +Prefix: ms +Macrolanguage: ms +%% +Type: extlang +Subtag: zsl +Description: Zambian Sign Language +Added: 2009-07-29 +Preferred-Value: zsl +Prefix: sgn +%% +Type: extlang +Subtag: zsm +Description: Standard Malay +Added: 2009-07-29 +Preferred-Value: zsm +Prefix: ms +Macrolanguage: ms +%% +Type: script +Subtag: Afak +Description: Afaka +Added: 2011-01-07 +%% +Type: script +Subtag: Arab +Description: Arabic +Added: 2005-10-16 +%% +Type: script +Subtag: Armi +Description: Imperial Aramaic +Added: 2007-12-05 +%% +Type: script +Subtag: Armn +Description: Armenian +Added: 2005-10-16 +%% +Type: script +Subtag: Avst +Description: Avestan +Added: 2007-07-28 +%% +Type: script +Subtag: Bali +Description: Balinese +Added: 2005-10-16 +%% +Type: script +Subtag: Bamu +Description: Bamum +Added: 2009-07-30 +%% +Type: script +Subtag: Bass +Description: Bassa Vah +Added: 2010-04-10 +%% +Type: script +Subtag: Batk +Description: Batak +Added: 2005-10-16 +%% +Type: script +Subtag: Beng +Description: Bengali +Added: 2005-10-16 +%% +Type: script +Subtag: Blis +Description: Blissymbols +Added: 2005-10-16 +%% +Type: script +Subtag: Bopo +Description: Bopomofo +Added: 2005-10-16 +%% +Type: script +Subtag: Brah +Description: Brahmi +Added: 2005-10-16 +%% +Type: script +Subtag: Brai +Description: Braille +Added: 2005-10-16 +%% +Type: script +Subtag: Bugi +Description: Buginese +Added: 2005-10-16 +%% +Type: script +Subtag: Buhd +Description: Buhid +Added: 2005-10-16 +%% +Type: script +Subtag: Cakm +Description: Chakma +Added: 2007-12-05 +%% +Type: script +Subtag: Cans +Description: Unified Canadian Aboriginal Syllabics +Added: 2005-10-16 +%% +Type: script +Subtag: Cari +Description: Carian +Added: 2006-07-21 +%% +Type: script +Subtag: Cham +Description: Cham +Added: 2005-10-16 +%% +Type: script +Subtag: Cher +Description: Cherokee +Added: 2005-10-16 +%% +Type: script +Subtag: Cirt +Description: Cirth +Added: 2005-10-16 +%% +Type: script +Subtag: Copt +Description: Coptic +Added: 2005-10-16 +%% +Type: script +Subtag: Cprt +Description: Cypriot +Added: 2005-10-16 +%% +Type: script +Subtag: Cyrl +Description: Cyrillic +Added: 2005-10-16 +%% +Type: script +Subtag: Cyrs +Description: Cyrillic (Old Church Slavonic variant) +Added: 2005-10-16 +%% +Type: script +Subtag: Deva +Description: Devanagari +Description: Nagari +Added: 2005-10-16 +%% +Type: script +Subtag: Dsrt +Description: Deseret +Description: Mormon +Added: 2005-10-16 +%% +Type: script +Subtag: Dupl +Description: Duployan shorthand +Description: Duployan stenography +Added: 2010-08-16 +%% +Type: script +Subtag: Egyd +Description: Egyptian demotic +Added: 2005-10-16 +%% +Type: script +Subtag: Egyh +Description: Egyptian hieratic +Added: 2005-10-16 +%% +Type: script +Subtag: Egyp +Description: Egyptian hieroglyphs +Added: 2005-10-16 +%% +Type: script +Subtag: Elba +Description: Elbasan +Added: 2010-08-16 +%% +Type: script +Subtag: Ethi +Description: Ethiopic +Description: Geʻez +Description: Ge'ez +Added: 2005-10-16 +%% +Type: script +Subtag: Geok +Description: Khutsuri (Asomtavruli and Nuskhuri) +Added: 2005-10-16 +%% +Type: script +Subtag: Geor +Description: Georgian (Mkhedruli) +Added: 2005-10-16 +%% +Type: script +Subtag: Glag +Description: Glagolitic +Added: 2005-10-16 +%% +Type: script +Subtag: Goth +Description: Gothic +Added: 2005-10-16 +%% +Type: script +Subtag: Gran +Description: Grantha +Added: 2009-12-09 +%% +Type: script +Subtag: Grek +Description: Greek +Added: 2005-10-16 +%% +Type: script +Subtag: Gujr +Description: Gujarati +Added: 2005-10-16 +%% +Type: script +Subtag: Guru +Description: Gurmukhi +Added: 2005-10-16 +%% +Type: script +Subtag: Hang +Description: Hangul +Description: Hangŭl +Description: Hangeul +Added: 2005-10-16 +%% +Type: script +Subtag: Hani +Description: Han +Description: Hanzi +Description: Kanji +Description: Hanja +Added: 2005-10-16 +%% +Type: script +Subtag: Hano +Description: Hanunoo +Description: Hanunóo +Added: 2005-10-16 +%% +Type: script +Subtag: Hans +Description: Han (Simplified variant) +Added: 2005-10-16 +%% +Type: script +Subtag: Hant +Description: Han (Traditional variant) +Added: 2005-10-16 +%% +Type: script +Subtag: Hebr +Description: Hebrew +Added: 2005-10-16 +%% +Type: script +Subtag: Hira +Description: Hiragana +Added: 2005-10-16 +%% +Type: script +Subtag: Hluw +Description: Anatolian Hieroglyphs +Description: Luwian Hieroglyphs +Description: Hittite Hieroglyphs +Added: 2011-12-28 +%% +Type: script +Subtag: Hmng +Description: Pahawh Hmong +Added: 2005-10-16 +%% +Type: script +Subtag: Hrkt +Description: Japanese syllabaries (alias for Hiragana + Katakana) +Added: 2005-10-16 +%% +Type: script +Subtag: Hung +Description: Old Hungarian +Added: 2005-10-16 +%% +Type: script +Subtag: Inds +Description: Indus +Description: Harappan +Added: 2005-10-16 +%% +Type: script +Subtag: Ital +Description: Old Italic (Etruscan, Oscan, etc.) +Added: 2005-10-16 +%% +Type: script +Subtag: Java +Description: Javanese +Added: 2005-10-16 +%% +Type: script +Subtag: Jpan +Description: Japanese (alias for Han + Hiragana + Katakana) +Added: 2006-07-21 +%% +Type: script +Subtag: Jurc +Description: Jurchen +Added: 2011-01-07 +%% +Type: script +Subtag: Kali +Description: Kayah Li +Added: 2005-10-16 +%% +Type: script +Subtag: Kana +Description: Katakana +Added: 2005-10-16 +%% +Type: script +Subtag: Khar +Description: Kharoshthi +Added: 2005-10-16 +%% +Type: script +Subtag: Khmr +Description: Khmer +Added: 2005-10-16 +%% +Type: script +Subtag: Khoj +Description: Khojki +Added: 2011-08-16 +%% +Type: script +Subtag: Knda +Description: Kannada +Added: 2005-10-16 +%% +Type: script +Subtag: Kore +Description: Korean (alias for Hangul + Han) +Added: 2007-07-05 +%% +Type: script +Subtag: Kpel +Description: Kpelle +Added: 2010-04-10 +%% +Type: script +Subtag: Kthi +Description: Kaithi +Added: 2007-12-05 +%% +Type: script +Subtag: Lana +Description: Tai Tham +Description: Lanna +Added: 2006-07-21 +%% +Type: script +Subtag: Laoo +Description: Lao +Added: 2005-10-16 +%% +Type: script +Subtag: Latf +Description: Latin (Fraktur variant) +Added: 2005-10-16 +%% +Type: script +Subtag: Latg +Description: Latin (Gaelic variant) +Added: 2005-10-16 +%% +Type: script +Subtag: Latn +Description: Latin +Added: 2005-10-16 +%% +Type: script +Subtag: Lepc +Description: Lepcha +Description: Róng +Added: 2005-10-16 +%% +Type: script +Subtag: Limb +Description: Limbu +Added: 2005-10-16 +%% +Type: script +Subtag: Lina +Description: Linear A +Added: 2005-10-16 +%% +Type: script +Subtag: Linb +Description: Linear B +Added: 2005-10-16 +%% +Type: script +Subtag: Lisu +Description: Lisu +Description: Fraser +Added: 2009-03-13 +%% +Type: script +Subtag: Loma +Description: Loma +Added: 2010-04-10 +%% +Type: script +Subtag: Lyci +Description: Lycian +Added: 2006-07-21 +%% +Type: script +Subtag: Lydi +Description: Lydian +Added: 2006-07-21 +%% +Type: script +Subtag: Mand +Description: Mandaic +Description: Mandaean +Added: 2005-10-16 +%% +Type: script +Subtag: Mani +Description: Manichaean +Added: 2007-07-28 +%% +Type: script +Subtag: Maya +Description: Mayan hieroglyphs +Added: 2005-10-16 +%% +Type: script +Subtag: Mend +Description: Mende +Added: 2010-04-10 +%% +Type: script +Subtag: Merc +Description: Meroitic Cursive +Added: 2009-12-09 +%% +Type: script +Subtag: Mero +Description: Meroitic Hieroglyphs +Added: 2005-10-16 +%% +Type: script +Subtag: Mlym +Description: Malayalam +Added: 2005-10-16 +%% +Type: script +Subtag: Mong +Description: Mongolian +Added: 2005-10-16 +%% +Type: script +Subtag: Moon +Description: Moon +Description: Moon code +Description: Moon script +Description: Moon type +Added: 2007-01-26 +%% +Type: script +Subtag: Mroo +Description: Mro +Description: Mru +Added: 2011-01-07 +%% +Type: script +Subtag: Mtei +Description: Meitei Mayek +Description: Meithei +Description: Meetei +Added: 2007-01-26 +%% +Type: script +Subtag: Mymr +Description: Myanmar +Description: Burmese +Added: 2005-10-16 +%% +Type: script +Subtag: Narb +Description: Old North Arabian +Description: Ancient North Arabian +Added: 2010-04-10 +%% +Type: script +Subtag: Nbat +Description: Nabataean +Added: 2010-04-10 +%% +Type: script +Subtag: Nkgb +Description: Nakhi Geba +Description: 'Na-'Khi ²Ggŏ-¹baw +Description: Naxi Geba +Added: 2009-03-13 +%% +Type: script +Subtag: Nkoo +Description: N’Ko +Description: N'Ko +Added: 2005-10-16 +%% +Type: script +Subtag: Nshu +Description: Nüshu +Added: 2011-01-07 +%% +Type: script +Subtag: Ogam +Description: Ogham +Added: 2005-10-16 +%% +Type: script +Subtag: Olck +Description: Ol Chiki +Description: Ol Cemet' +Description: Ol +Description: Santali +Added: 2006-07-21 +%% +Type: script +Subtag: Orkh +Description: Old Turkic +Description: Orkhon Runic +Added: 2009-07-30 +%% +Type: script +Subtag: Orya +Description: Oriya +Added: 2005-10-16 +%% +Type: script +Subtag: Osma +Description: Osmanya +Added: 2005-10-16 +%% +Type: script +Subtag: Palm +Description: Palmyrene +Added: 2010-04-10 +%% +Type: script +Subtag: Perm +Description: Old Permic +Added: 2005-10-16 +%% +Type: script +Subtag: Phag +Description: Phags-pa +Added: 2005-10-16 +%% +Type: script +Subtag: Phli +Description: Inscriptional Pahlavi +Added: 2007-12-05 +%% +Type: script +Subtag: Phlp +Description: Psalter Pahlavi +Added: 2007-12-05 +%% +Type: script +Subtag: Phlv +Description: Book Pahlavi +Added: 2007-07-28 +%% +Type: script +Subtag: Phnx +Description: Phoenician +Added: 2005-10-16 +%% +Type: script +Subtag: Plrd +Description: Miao +Description: Pollard +Added: 2005-10-16 +%% +Type: script +Subtag: Prti +Description: Inscriptional Parthian +Added: 2007-12-05 +%% +Type: script +Subtag: Qaaa..Qabx +Description: Private use +Added: 2005-10-16 +%% +Type: script +Subtag: Rjng +Description: Rejang +Description: Redjang +Description: Kaganga +Added: 2006-10-17 +%% +Type: script +Subtag: Roro +Description: Rongorongo +Added: 2005-10-16 +%% +Type: script +Subtag: Runr +Description: Runic +Added: 2005-10-16 +%% +Type: script +Subtag: Samr +Description: Samaritan +Added: 2007-07-28 +%% +Type: script +Subtag: Sara +Description: Sarati +Added: 2005-10-16 +%% +Type: script +Subtag: Sarb +Description: Old South Arabian +Added: 2009-07-30 +%% +Type: script +Subtag: Saur +Description: Saurashtra +Added: 2006-07-21 +%% +Type: script +Subtag: Sgnw +Description: SignWriting +Added: 2006-10-17 +%% +Type: script +Subtag: Shaw +Description: Shavian +Description: Shaw +Added: 2005-10-16 +%% +Type: script +Subtag: Shrd +Description: Sharada +Description: Śāradā +Added: 2011-01-07 +%% +Type: script +Subtag: Sind +Description: Khudawadi +Description: Sindhi +Added: 2010-08-16 +%% +Type: script +Subtag: Sinh +Description: Sinhala +Added: 2005-10-16 +%% +Type: script +Subtag: Sora +Description: Sora Sompeng +Added: 2011-01-07 +%% +Type: script +Subtag: Sund +Description: Sundanese +Added: 2006-07-21 +%% +Type: script +Subtag: Sylo +Description: Syloti Nagri +Added: 2005-10-16 +%% +Type: script +Subtag: Syrc +Description: Syriac +Added: 2005-10-16 +%% +Type: script +Subtag: Syre +Description: Syriac (Estrangelo variant) +Added: 2005-10-16 +%% +Type: script +Subtag: Syrj +Description: Syriac (Western variant) +Added: 2005-10-16 +%% +Type: script +Subtag: Syrn +Description: Syriac (Eastern variant) +Added: 2005-10-16 +%% +Type: script +Subtag: Tagb +Description: Tagbanwa +Added: 2005-10-16 +%% +Type: script +Subtag: Takr +Description: Takri +Description: Ṭākrī +Description: Ṭāṅkrī +Added: 2011-01-07 +%% +Type: script +Subtag: Tale +Description: Tai Le +Added: 2005-10-16 +%% +Type: script +Subtag: Talu +Description: New Tai Lue +Added: 2005-10-16 +%% +Type: script +Subtag: Taml +Description: Tamil +Added: 2005-10-16 +%% +Type: script +Subtag: Tang +Description: Tangut +Added: 2011-01-07 +%% +Type: script +Subtag: Tavt +Description: Tai Viet +Added: 2007-12-05 +%% +Type: script +Subtag: Telu +Description: Telugu +Added: 2005-10-16 +%% +Type: script +Subtag: Teng +Description: Tengwar +Added: 2005-10-16 +%% +Type: script +Subtag: Tfng +Description: Tifinagh +Description: Berber +Added: 2005-10-16 +%% +Type: script +Subtag: Tglg +Description: Tagalog +Description: Baybayin +Description: Alibata +Added: 2005-10-16 +%% +Type: script +Subtag: Thaa +Description: Thaana +Added: 2005-10-16 +%% +Type: script +Subtag: Thai +Description: Thai +Added: 2005-10-16 +%% +Type: script +Subtag: Tibt +Description: Tibetan +Added: 2005-10-16 +%% +Type: script +Subtag: Tirh +Description: Tirhuta +Added: 2011-08-16 +%% +Type: script +Subtag: Ugar +Description: Ugaritic +Added: 2005-10-16 +%% +Type: script +Subtag: Vaii +Description: Vai +Added: 2005-10-16 +%% +Type: script +Subtag: Visp +Description: Visible Speech +Added: 2005-10-16 +%% +Type: script +Subtag: Wara +Description: Warang Citi +Description: Varang Kshiti +Added: 2009-12-09 +%% +Type: script +Subtag: Wole +Description: Woleai +Added: 2011-01-07 +%% +Type: script +Subtag: Xpeo +Description: Old Persian +Added: 2005-10-16 +%% +Type: script +Subtag: Xsux +Description: Sumero-Akkadian cuneiform +Added: 2005-10-16 +%% +Type: script +Subtag: Yiii +Description: Yi +Added: 2005-10-16 +%% +Type: script +Subtag: Zinh +Description: Code for inherited script +Added: 2009-04-03 +Comments: Not intended for use as a language subtag +%% +Type: script +Subtag: Zmth +Description: Mathematical notation +Added: 2007-12-05 +%% +Type: script +Subtag: Zsym +Description: Symbols +Added: 2007-12-05 +%% +Type: script +Subtag: Zxxx +Description: Code for unwritten documents +Added: 2005-10-16 +%% +Type: script +Subtag: Zyyy +Description: Code for undetermined script +Added: 2005-10-16 +%% +Type: script +Subtag: Zzzz +Description: Code for uncoded script +Added: 2005-10-16 +%% +Type: region +Subtag: AA +Description: Private use +Added: 2005-10-16 +%% +Type: region +Subtag: AC +Description: Ascension Island +Added: 2009-07-29 +%% +Type: region +Subtag: AD +Description: Andorra +Added: 2005-10-16 +%% +Type: region +Subtag: AE +Description: United Arab Emirates +Added: 2005-10-16 +%% +Type: region +Subtag: AF +Description: Afghanistan +Added: 2005-10-16 +%% +Type: region +Subtag: AG +Description: Antigua and Barbuda +Added: 2005-10-16 +%% +Type: region +Subtag: AI +Description: Anguilla +Added: 2005-10-16 +%% +Type: region +Subtag: AL +Description: Albania +Added: 2005-10-16 +%% +Type: region +Subtag: AM +Description: Armenia +Added: 2005-10-16 +%% +Type: region +Subtag: AN +Description: Netherlands Antilles +Added: 2005-10-16 +Deprecated: 2011-01-07 +Comments: see BQ, CW, and SX +%% +Type: region +Subtag: AO +Description: Angola +Added: 2005-10-16 +%% +Type: region +Subtag: AQ +Description: Antarctica +Added: 2005-10-16 +%% +Type: region +Subtag: AR +Description: Argentina +Added: 2005-10-16 +%% +Type: region +Subtag: AS +Description: American Samoa +Added: 2005-10-16 +%% +Type: region +Subtag: AT +Description: Austria +Added: 2005-10-16 +%% +Type: region +Subtag: AU +Description: Australia +Added: 2005-10-16 +%% +Type: region +Subtag: AW +Description: Aruba +Added: 2005-10-16 +%% +Type: region +Subtag: AX +Description: Åland Islands +Added: 2005-10-16 +%% +Type: region +Subtag: AZ +Description: Azerbaijan +Added: 2005-10-16 +%% +Type: region +Subtag: BA +Description: Bosnia and Herzegovina +Added: 2005-10-16 +%% +Type: region +Subtag: BB +Description: Barbados +Added: 2005-10-16 +%% +Type: region +Subtag: BD +Description: Bangladesh +Added: 2005-10-16 +%% +Type: region +Subtag: BE +Description: Belgium +Added: 2005-10-16 +%% +Type: region +Subtag: BF +Description: Burkina Faso +Added: 2005-10-16 +%% +Type: region +Subtag: BG +Description: Bulgaria +Added: 2005-10-16 +%% +Type: region +Subtag: BH +Description: Bahrain +Added: 2005-10-16 +%% +Type: region +Subtag: BI +Description: Burundi +Added: 2005-10-16 +%% +Type: region +Subtag: BJ +Description: Benin +Added: 2005-10-16 +%% +Type: region +Subtag: BL +Description: Saint Barthélemy +Added: 2007-11-02 +%% +Type: region +Subtag: BM +Description: Bermuda +Added: 2005-10-16 +%% +Type: region +Subtag: BN +Description: Brunei Darussalam +Added: 2005-10-16 +%% +Type: region +Subtag: BO +Description: Bolivia +Added: 2005-10-16 +%% +Type: region +Subtag: BQ +Description: Bonaire, Sint Eustatius and Saba +Added: 2011-01-07 +%% +Type: region +Subtag: BR +Description: Brazil +Added: 2005-10-16 +%% +Type: region +Subtag: BS +Description: Bahamas +Added: 2005-10-16 +%% +Type: region +Subtag: BT +Description: Bhutan +Added: 2005-10-16 +%% +Type: region +Subtag: BU +Description: Burma +Added: 2005-10-16 +Deprecated: 1989-12-05 +Preferred-Value: MM +%% +Type: region +Subtag: BV +Description: Bouvet Island +Added: 2005-10-16 +%% +Type: region +Subtag: BW +Description: Botswana +Added: 2005-10-16 +%% +Type: region +Subtag: BY +Description: Belarus +Added: 2005-10-16 +%% +Type: region +Subtag: BZ +Description: Belize +Added: 2005-10-16 +%% +Type: region +Subtag: CA +Description: Canada +Added: 2005-10-16 +%% +Type: region +Subtag: CC +Description: Cocos (Keeling) Islands +Added: 2005-10-16 +%% +Type: region +Subtag: CD +Description: The Democratic Republic of the Congo +Added: 2005-10-16 +%% +Type: region +Subtag: CF +Description: Central African Republic +Added: 2005-10-16 +%% +Type: region +Subtag: CG +Description: Congo +Added: 2005-10-16 +%% +Type: region +Subtag: CH +Description: Switzerland +Added: 2005-10-16 +%% +Type: region +Subtag: CI +Description: Côte d'Ivoire +Added: 2005-10-16 +%% +Type: region +Subtag: CK +Description: Cook Islands +Added: 2005-10-16 +%% +Type: region +Subtag: CL +Description: Chile +Added: 2005-10-16 +%% +Type: region +Subtag: CM +Description: Cameroon +Added: 2005-10-16 +%% +Type: region +Subtag: CN +Description: China +Added: 2005-10-16 +%% +Type: region +Subtag: CO +Description: Colombia +Added: 2005-10-16 +%% +Type: region +Subtag: CP +Description: Clipperton Island +Added: 2009-07-29 +%% +Type: region +Subtag: CR +Description: Costa Rica +Added: 2005-10-16 +%% +Type: region +Subtag: CS +Description: Serbia and Montenegro +Added: 2005-10-16 +Deprecated: 2006-10-05 +Comments: see RS for Serbia or ME for Montenegro +%% +Type: region +Subtag: CU +Description: Cuba +Added: 2005-10-16 +%% +Type: region +Subtag: CV +Description: Cape Verde +Added: 2005-10-16 +%% +Type: region +Subtag: CW +Description: Curaçao +Added: 2011-01-07 +%% +Type: region +Subtag: CX +Description: Christmas Island +Added: 2005-10-16 +%% +Type: region +Subtag: CY +Description: Cyprus +Added: 2005-10-16 +%% +Type: region +Subtag: CZ +Description: Czech Republic +Added: 2005-10-16 +%% +Type: region +Subtag: DD +Description: German Democratic Republic +Added: 2005-10-16 +Deprecated: 1990-10-30 +Preferred-Value: DE +%% +Type: region +Subtag: DE +Description: Germany +Added: 2005-10-16 +%% +Type: region +Subtag: DG +Description: Diego Garcia +Added: 2009-07-29 +%% +Type: region +Subtag: DJ +Description: Djibouti +Added: 2005-10-16 +%% +Type: region +Subtag: DK +Description: Denmark +Added: 2005-10-16 +%% +Type: region +Subtag: DM +Description: Dominica +Added: 2005-10-16 +%% +Type: region +Subtag: DO +Description: Dominican Republic +Added: 2005-10-16 +%% +Type: region +Subtag: DZ +Description: Algeria +Added: 2005-10-16 +%% +Type: region +Subtag: EA +Description: Ceuta, Melilla +Added: 2009-07-29 +%% +Type: region +Subtag: EC +Description: Ecuador +Added: 2005-10-16 +%% +Type: region +Subtag: EE +Description: Estonia +Added: 2005-10-16 +%% +Type: region +Subtag: EG +Description: Egypt +Added: 2005-10-16 +%% +Type: region +Subtag: EH +Description: Western Sahara +Added: 2005-10-16 +%% +Type: region +Subtag: ER +Description: Eritrea +Added: 2005-10-16 +%% +Type: region +Subtag: ES +Description: Spain +Added: 2005-10-16 +%% +Type: region +Subtag: ET +Description: Ethiopia +Added: 2005-10-16 +%% +Type: region +Subtag: EU +Description: European Union +Added: 2009-07-29 +%% +Type: region +Subtag: FI +Description: Finland +Added: 2005-10-16 +%% +Type: region +Subtag: FJ +Description: Fiji +Added: 2005-10-16 +%% +Type: region +Subtag: FK +Description: Falkland Islands (Malvinas) +Added: 2005-10-16 +%% +Type: region +Subtag: FM +Description: Federated States of Micronesia +Added: 2005-10-16 +%% +Type: region +Subtag: FO +Description: Faroe Islands +Added: 2005-10-16 +%% +Type: region +Subtag: FR +Description: France +Added: 2005-10-16 +%% +Type: region +Subtag: FX +Description: Metropolitan France +Added: 2005-10-16 +Deprecated: 1997-07-14 +Preferred-Value: FR +%% +Type: region +Subtag: GA +Description: Gabon +Added: 2005-10-16 +%% +Type: region +Subtag: GB +Description: United Kingdom +Added: 2005-10-16 +Comments: as of 2006-03-29 GB no longer includes the Channel Islands and + Isle of Man; see GG, JE, IM +%% +Type: region +Subtag: GD +Description: Grenada +Added: 2005-10-16 +%% +Type: region +Subtag: GE +Description: Georgia +Added: 2005-10-16 +%% +Type: region +Subtag: GF +Description: French Guiana +Added: 2005-10-16 +%% +Type: region +Subtag: GG +Description: Guernsey +Added: 2006-03-29 +%% +Type: region +Subtag: GH +Description: Ghana +Added: 2005-10-16 +%% +Type: region +Subtag: GI +Description: Gibraltar +Added: 2005-10-16 +%% +Type: region +Subtag: GL +Description: Greenland +Added: 2005-10-16 +%% +Type: region +Subtag: GM +Description: Gambia +Added: 2005-10-16 +%% +Type: region +Subtag: GN +Description: Guinea +Added: 2005-10-16 +%% +Type: region +Subtag: GP +Description: Guadeloupe +Added: 2005-10-16 +%% +Type: region +Subtag: GQ +Description: Equatorial Guinea +Added: 2005-10-16 +%% +Type: region +Subtag: GR +Description: Greece +Added: 2005-10-16 +%% +Type: region +Subtag: GS +Description: South Georgia and the South Sandwich Islands +Added: 2005-10-16 +%% +Type: region +Subtag: GT +Description: Guatemala +Added: 2005-10-16 +%% +Type: region +Subtag: GU +Description: Guam +Added: 2005-10-16 +%% +Type: region +Subtag: GW +Description: Guinea-Bissau +Added: 2005-10-16 +%% +Type: region +Subtag: GY +Description: Guyana +Added: 2005-10-16 +%% +Type: region +Subtag: HK +Description: Hong Kong +Added: 2005-10-16 +%% +Type: region +Subtag: HM +Description: Heard Island and McDonald Islands +Added: 2005-10-16 +%% +Type: region +Subtag: HN +Description: Honduras +Added: 2005-10-16 +%% +Type: region +Subtag: HR +Description: Croatia +Added: 2005-10-16 +%% +Type: region +Subtag: HT +Description: Haiti +Added: 2005-10-16 +%% +Type: region +Subtag: HU +Description: Hungary +Added: 2005-10-16 +%% +Type: region +Subtag: IC +Description: Canary Islands +Added: 2009-07-29 +%% +Type: region +Subtag: ID +Description: Indonesia +Added: 2005-10-16 +%% +Type: region +Subtag: IE +Description: Ireland +Added: 2005-10-16 +%% +Type: region +Subtag: IL +Description: Israel +Added: 2005-10-16 +%% +Type: region +Subtag: IM +Description: Isle of Man +Added: 2006-03-29 +%% +Type: region +Subtag: IN +Description: India +Added: 2005-10-16 +%% +Type: region +Subtag: IO +Description: British Indian Ocean Territory +Added: 2005-10-16 +%% +Type: region +Subtag: IQ +Description: Iraq +Added: 2005-10-16 +%% +Type: region +Subtag: IR +Description: Islamic Republic of Iran +Added: 2005-10-16 +%% +Type: region +Subtag: IS +Description: Iceland +Added: 2005-10-16 +%% +Type: region +Subtag: IT +Description: Italy +Added: 2005-10-16 +%% +Type: region +Subtag: JE +Description: Jersey +Added: 2006-03-29 +%% +Type: region +Subtag: JM +Description: Jamaica +Added: 2005-10-16 +%% +Type: region +Subtag: JO +Description: Jordan +Added: 2005-10-16 +%% +Type: region +Subtag: JP +Description: Japan +Added: 2005-10-16 +%% +Type: region +Subtag: KE +Description: Kenya +Added: 2005-10-16 +%% +Type: region +Subtag: KG +Description: Kyrgyzstan +Added: 2005-10-16 +%% +Type: region +Subtag: KH +Description: Cambodia +Added: 2005-10-16 +%% +Type: region +Subtag: KI +Description: Kiribati +Added: 2005-10-16 +%% +Type: region +Subtag: KM +Description: Comoros +Added: 2005-10-16 +%% +Type: region +Subtag: KN +Description: Saint Kitts and Nevis +Added: 2005-10-16 +%% +Type: region +Subtag: KP +Description: Democratic People's Republic of Korea +Added: 2005-10-16 +%% +Type: region +Subtag: KR +Description: Republic of Korea +Added: 2005-10-16 +%% +Type: region +Subtag: KW +Description: Kuwait +Added: 2005-10-16 +%% +Type: region +Subtag: KY +Description: Cayman Islands +Added: 2005-10-16 +%% +Type: region +Subtag: KZ +Description: Kazakhstan +Added: 2005-10-16 +%% +Type: region +Subtag: LA +Description: Lao People's Democratic Republic +Added: 2005-10-16 +%% +Type: region +Subtag: LB +Description: Lebanon +Added: 2005-10-16 +%% +Type: region +Subtag: LC +Description: Saint Lucia +Added: 2005-10-16 +%% +Type: region +Subtag: LI +Description: Liechtenstein +Added: 2005-10-16 +%% +Type: region +Subtag: LK +Description: Sri Lanka +Added: 2005-10-16 +%% +Type: region +Subtag: LR +Description: Liberia +Added: 2005-10-16 +%% +Type: region +Subtag: LS +Description: Lesotho +Added: 2005-10-16 +%% +Type: region +Subtag: LT +Description: Lithuania +Added: 2005-10-16 +%% +Type: region +Subtag: LU +Description: Luxembourg +Added: 2005-10-16 +%% +Type: region +Subtag: LV +Description: Latvia +Added: 2005-10-16 +%% +Type: region +Subtag: LY +Description: Libya +Added: 2005-10-16 +%% +Type: region +Subtag: MA +Description: Morocco +Added: 2005-10-16 +%% +Type: region +Subtag: MC +Description: Monaco +Added: 2005-10-16 +%% +Type: region +Subtag: MD +Description: Moldova +Added: 2005-10-16 +%% +Type: region +Subtag: ME +Description: Montenegro +Added: 2006-10-05 +%% +Type: region +Subtag: MF +Description: Saint Martin (French part) +Added: 2007-11-02 +%% +Type: region +Subtag: MG +Description: Madagascar +Added: 2005-10-16 +%% +Type: region +Subtag: MH +Description: Marshall Islands +Added: 2005-10-16 +%% +Type: region +Subtag: MK +Description: The Former Yugoslav Republic of Macedonia +Added: 2005-10-16 +%% +Type: region +Subtag: ML +Description: Mali +Added: 2005-10-16 +%% +Type: region +Subtag: MM +Description: Myanmar +Added: 2005-10-16 +%% +Type: region +Subtag: MN +Description: Mongolia +Added: 2005-10-16 +%% +Type: region +Subtag: MO +Description: Macao +Added: 2005-10-16 +%% +Type: region +Subtag: MP +Description: Northern Mariana Islands +Added: 2005-10-16 +%% +Type: region +Subtag: MQ +Description: Martinique +Added: 2005-10-16 +%% +Type: region +Subtag: MR +Description: Mauritania +Added: 2005-10-16 +%% +Type: region +Subtag: MS +Description: Montserrat +Added: 2005-10-16 +%% +Type: region +Subtag: MT +Description: Malta +Added: 2005-10-16 +%% +Type: region +Subtag: MU +Description: Mauritius +Added: 2005-10-16 +%% +Type: region +Subtag: MV +Description: Maldives +Added: 2005-10-16 +%% +Type: region +Subtag: MW +Description: Malawi +Added: 2005-10-16 +%% +Type: region +Subtag: MX +Description: Mexico +Added: 2005-10-16 +%% +Type: region +Subtag: MY +Description: Malaysia +Added: 2005-10-16 +%% +Type: region +Subtag: MZ +Description: Mozambique +Added: 2005-10-16 +%% +Type: region +Subtag: NA +Description: Namibia +Added: 2005-10-16 +%% +Type: region +Subtag: NC +Description: New Caledonia +Added: 2005-10-16 +%% +Type: region +Subtag: NE +Description: Niger +Added: 2005-10-16 +%% +Type: region +Subtag: NF +Description: Norfolk Island +Added: 2005-10-16 +%% +Type: region +Subtag: NG +Description: Nigeria +Added: 2005-10-16 +%% +Type: region +Subtag: NI +Description: Nicaragua +Added: 2005-10-16 +%% +Type: region +Subtag: NL +Description: Netherlands +Added: 2005-10-16 +%% +Type: region +Subtag: NO +Description: Norway +Added: 2005-10-16 +%% +Type: region +Subtag: NP +Description: Nepal +Added: 2005-10-16 +%% +Type: region +Subtag: NR +Description: Nauru +Added: 2005-10-16 +%% +Type: region +Subtag: NT +Description: Neutral Zone +Added: 2005-10-16 +Deprecated: 1993-07-12 +%% +Type: region +Subtag: NU +Description: Niue +Added: 2005-10-16 +%% +Type: region +Subtag: NZ +Description: New Zealand +Added: 2005-10-16 +%% +Type: region +Subtag: OM +Description: Oman +Added: 2005-10-16 +%% +Type: region +Subtag: PA +Description: Panama +Added: 2005-10-16 +%% +Type: region +Subtag: PE +Description: Peru +Added: 2005-10-16 +%% +Type: region +Subtag: PF +Description: French Polynesia +Added: 2005-10-16 +%% +Type: region +Subtag: PG +Description: Papua New Guinea +Added: 2005-10-16 +%% +Type: region +Subtag: PH +Description: Philippines +Added: 2005-10-16 +%% +Type: region +Subtag: PK +Description: Pakistan +Added: 2005-10-16 +%% +Type: region +Subtag: PL +Description: Poland +Added: 2005-10-16 +%% +Type: region +Subtag: PM +Description: Saint Pierre and Miquelon +Added: 2005-10-16 +%% +Type: region +Subtag: PN +Description: Pitcairn +Added: 2005-10-16 +%% +Type: region +Subtag: PR +Description: Puerto Rico +Added: 2005-10-16 +%% +Type: region +Subtag: PS +Description: Occupied Palestinian Territory +Added: 2005-10-16 +%% +Type: region +Subtag: PT +Description: Portugal +Added: 2005-10-16 +%% +Type: region +Subtag: PW +Description: Palau +Added: 2005-10-16 +%% +Type: region +Subtag: PY +Description: Paraguay +Added: 2005-10-16 +%% +Type: region +Subtag: QA +Description: Qatar +Added: 2005-10-16 +%% +Type: region +Subtag: QM..QZ +Description: Private use +Added: 2005-10-16 +%% +Type: region +Subtag: RE +Description: Réunion +Added: 2005-10-16 +%% +Type: region +Subtag: RO +Description: Romania +Added: 2005-10-16 +%% +Type: region +Subtag: RS +Description: Serbia +Added: 2006-10-05 +%% +Type: region +Subtag: RU +Description: Russian Federation +Added: 2005-10-16 +%% +Type: region +Subtag: RW +Description: Rwanda +Added: 2005-10-16 +%% +Type: region +Subtag: SA +Description: Saudi Arabia +Added: 2005-10-16 +%% +Type: region +Subtag: SB +Description: Solomon Islands +Added: 2005-10-16 +%% +Type: region +Subtag: SC +Description: Seychelles +Added: 2005-10-16 +%% +Type: region +Subtag: SD +Description: Sudan +Added: 2005-10-16 +%% +Type: region +Subtag: SE +Description: Sweden +Added: 2005-10-16 +%% +Type: region +Subtag: SG +Description: Singapore +Added: 2005-10-16 +%% +Type: region +Subtag: SH +Description: Saint Helena, Ascension and Tristan da Cunha +Added: 2005-10-16 +%% +Type: region +Subtag: SI +Description: Slovenia +Added: 2005-10-16 +%% +Type: region +Subtag: SJ +Description: Svalbard and Jan Mayen +Added: 2005-10-16 +%% +Type: region +Subtag: SK +Description: Slovakia +Added: 2005-10-16 +%% +Type: region +Subtag: SL +Description: Sierra Leone +Added: 2005-10-16 +%% +Type: region +Subtag: SM +Description: San Marino +Added: 2005-10-16 +%% +Type: region +Subtag: SN +Description: Senegal +Added: 2005-10-16 +%% +Type: region +Subtag: SO +Description: Somalia +Added: 2005-10-16 +%% +Type: region +Subtag: SR +Description: Suriname +Added: 2005-10-16 +%% +Type: region +Subtag: SS +Description: South Sudan +Added: 2011-08-25 +%% +Type: region +Subtag: ST +Description: Sao Tome and Principe +Added: 2005-10-16 +%% +Type: region +Subtag: SU +Description: Union of Soviet Socialist Republics +Added: 2005-10-16 +Deprecated: 1992-08-30 +%% +Type: region +Subtag: SV +Description: El Salvador +Added: 2005-10-16 +%% +Type: region +Subtag: SX +Description: Sint Maarten (Dutch part) +Added: 2011-01-07 +%% +Type: region +Subtag: SY +Description: Syrian Arab Republic +Added: 2005-10-16 +%% +Type: region +Subtag: SZ +Description: Swaziland +Added: 2005-10-16 +%% +Type: region +Subtag: TA +Description: Tristan da Cunha +Added: 2009-07-29 +%% +Type: region +Subtag: TC +Description: Turks and Caicos Islands +Added: 2005-10-16 +%% +Type: region +Subtag: TD +Description: Chad +Added: 2005-10-16 +%% +Type: region +Subtag: TF +Description: French Southern Territories +Added: 2005-10-16 +%% +Type: region +Subtag: TG +Description: Togo +Added: 2005-10-16 +%% +Type: region +Subtag: TH +Description: Thailand +Added: 2005-10-16 +%% +Type: region +Subtag: TJ +Description: Tajikistan +Added: 2005-10-16 +%% +Type: region +Subtag: TK +Description: Tokelau +Added: 2005-10-16 +%% +Type: region +Subtag: TL +Description: Timor-Leste +Added: 2005-10-16 +%% +Type: region +Subtag: TM +Description: Turkmenistan +Added: 2005-10-16 +%% +Type: region +Subtag: TN +Description: Tunisia +Added: 2005-10-16 +%% +Type: region +Subtag: TO +Description: Tonga +Added: 2005-10-16 +%% +Type: region +Subtag: TP +Description: East Timor +Added: 2005-10-16 +Deprecated: 2002-05-20 +Preferred-Value: TL +%% +Type: region +Subtag: TR +Description: Turkey +Added: 2005-10-16 +%% +Type: region +Subtag: TT +Description: Trinidad and Tobago +Added: 2005-10-16 +%% +Type: region +Subtag: TV +Description: Tuvalu +Added: 2005-10-16 +%% +Type: region +Subtag: TW +Description: Taiwan, Province of China +Added: 2005-10-16 +%% +Type: region +Subtag: TZ +Description: United Republic of Tanzania +Added: 2005-10-16 +%% +Type: region +Subtag: UA +Description: Ukraine +Added: 2005-10-16 +%% +Type: region +Subtag: UG +Description: Uganda +Added: 2005-10-16 +%% +Type: region +Subtag: UM +Description: United States Minor Outlying Islands +Added: 2005-10-16 +%% +Type: region +Subtag: US +Description: United States +Added: 2005-10-16 +%% +Type: region +Subtag: UY +Description: Uruguay +Added: 2005-10-16 +%% +Type: region +Subtag: UZ +Description: Uzbekistan +Added: 2005-10-16 +%% +Type: region +Subtag: VA +Description: Holy See (Vatican City State) +Added: 2005-10-16 +%% +Type: region +Subtag: VC +Description: Saint Vincent and the Grenadines +Added: 2005-10-16 +%% +Type: region +Subtag: VE +Description: Venezuela +Added: 2005-10-16 +%% +Type: region +Subtag: VG +Description: British Virgin Islands +Added: 2005-10-16 +%% +Type: region +Subtag: VI +Description: U.S. Virgin Islands +Added: 2005-10-16 +%% +Type: region +Subtag: VN +Description: Viet Nam +Added: 2005-10-16 +%% +Type: region +Subtag: VU +Description: Vanuatu +Added: 2005-10-16 +%% +Type: region +Subtag: WF +Description: Wallis and Futuna +Added: 2005-10-16 +%% +Type: region +Subtag: WS +Description: Samoa +Added: 2005-10-16 +%% +Type: region +Subtag: XA..XZ +Description: Private use +Added: 2005-10-16 +%% +Type: region +Subtag: YD +Description: Democratic Yemen +Added: 2005-10-16 +Deprecated: 1990-08-14 +Preferred-Value: YE +%% +Type: region +Subtag: YE +Description: Yemen +Added: 2005-10-16 +%% +Type: region +Subtag: YT +Description: Mayotte +Added: 2005-10-16 +%% +Type: region +Subtag: YU +Description: Yugoslavia +Added: 2005-10-16 +Deprecated: 2003-07-23 +Comments: see BA, HR, ME, MK, RS, or SI +%% +Type: region +Subtag: ZA +Description: South Africa +Added: 2005-10-16 +%% +Type: region +Subtag: ZM +Description: Zambia +Added: 2005-10-16 +%% +Type: region +Subtag: ZR +Description: Zaire +Added: 2005-10-16 +Deprecated: 1997-07-14 +Preferred-Value: CD +%% +Type: region +Subtag: ZW +Description: Zimbabwe +Added: 2005-10-16 +%% +Type: region +Subtag: ZZ +Description: Private use +Added: 2005-10-16 +%% +Type: region +Subtag: 001 +Description: World +Added: 2005-10-16 +%% +Type: region +Subtag: 002 +Description: Africa +Added: 2005-10-16 +%% +Type: region +Subtag: 003 +Description: North America +Added: 2010-08-16 +Comments: Includes Northern America (021), Caribbean (029), and Central + America (013); see also 021 +%% +Type: region +Subtag: 005 +Description: South America +Added: 2005-10-16 +%% +Type: region +Subtag: 009 +Description: Oceania +Added: 2005-10-16 +%% +Type: region +Subtag: 011 +Description: Western Africa +Added: 2005-10-16 +%% +Type: region +Subtag: 013 +Description: Central America +Added: 2005-10-16 +%% +Type: region +Subtag: 014 +Description: Eastern Africa +Added: 2005-10-16 +%% +Type: region +Subtag: 015 +Description: Northern Africa +Added: 2005-10-16 +%% +Type: region +Subtag: 017 +Description: Middle Africa +Added: 2005-10-16 +%% +Type: region +Subtag: 018 +Description: Southern Africa +Added: 2005-10-16 +%% +Type: region +Subtag: 019 +Description: Americas +Added: 2005-10-16 +%% +Type: region +Subtag: 021 +Description: Northern America +Added: 2005-10-16 +Comments: Does not include Caribbean (029) or Central America (013); see + also 003 +%% +Type: region +Subtag: 029 +Description: Caribbean +Added: 2005-10-16 +%% +Type: region +Subtag: 030 +Description: Eastern Asia +Added: 2005-10-16 +%% +Type: region +Subtag: 034 +Description: Southern Asia +Added: 2005-10-16 +%% +Type: region +Subtag: 035 +Description: South-Eastern Asia +Added: 2005-10-16 +%% +Type: region +Subtag: 039 +Description: Southern Europe +Added: 2005-10-16 +%% +Type: region +Subtag: 053 +Description: Australia and New Zealand +Added: 2005-10-16 +%% +Type: region +Subtag: 054 +Description: Melanesia +Added: 2005-10-16 +%% +Type: region +Subtag: 057 +Description: Micronesia +Added: 2005-10-16 +%% +Type: region +Subtag: 061 +Description: Polynesia +Added: 2005-10-16 +%% +Type: region +Subtag: 142 +Description: Asia +Added: 2005-10-16 +%% +Type: region +Subtag: 143 +Description: Central Asia +Added: 2005-10-16 +%% +Type: region +Subtag: 145 +Description: Western Asia +Added: 2005-10-16 +%% +Type: region +Subtag: 150 +Description: Europe +Added: 2005-10-16 +%% +Type: region +Subtag: 151 +Description: Eastern Europe +Added: 2005-10-16 +%% +Type: region +Subtag: 154 +Description: Northern Europe +Added: 2005-10-16 +%% +Type: region +Subtag: 155 +Description: Western Europe +Added: 2005-10-16 +%% +Type: region +Subtag: 419 +Description: Latin America and the Caribbean +Added: 2005-10-16 +%% +Type: variant +Subtag: 1606nict +Description: Late Middle French (to 1606) +Added: 2007-03-20 +Prefix: frm +Comments: 16th century French as in Jean Nicot, "Thresor de la langue + francoyse", 1606, but also including some French similar to that of + Rabelais +%% +Type: variant +Subtag: 1694acad +Description: Early Modern French +Added: 2007-03-20 +Prefix: fr +Comments: 17th century French, as catalogued in the "Dictionnaire de + l'académie françoise", 4eme ed. 1694; frequently includes + elements of Middle French, as this is a transitional period +%% +Type: variant +Subtag: 1901 +Description: Traditional German orthography +Added: 2005-10-16 +Prefix: de +%% +Type: variant +Subtag: 1959acad +Description: "Academic" ("governmental") variant of Belarusian as + codified in 1959 +Added: 2008-09-30 +Prefix: be +%% +Type: variant +Subtag: 1994 +Description: Standardized Resian orthography +Added: 2007-07-28 +Prefix: sl-rozaj +Prefix: sl-rozaj-biske +Prefix: sl-rozaj-njiva +Prefix: sl-rozaj-osojs +Prefix: sl-rozaj-solba +Comments: For standardized Resian an orthography was published in 1994. +%% +Type: variant +Subtag: 1996 +Description: German orthography of 1996 +Added: 2005-10-16 +Prefix: de +%% +Type: variant +Subtag: alalc97 +Description: ALA-LC Romanization, 1997 edition +Added: 2009-12-09 +Comments: Romanizations recommended by the American Library Association + and the Library of Congress, in "ALA-LC Romanization Tables: + Transliteration Schemes for Non-Roman Scripts" (1997), ISBN + 978-0-8444-0940-5. +%% +Type: variant +Subtag: aluku +Description: Aluku dialect +Description: Boni dialect +Added: 2009-09-05 +Prefix: djk +Comments: Aluku dialect of the "Busi Nenge Tongo" English-based Creole + continuum in Eastern Suriname and Western French Guiana +%% +Type: variant +Subtag: arevela +Description: Eastern Armenian +Added: 2006-09-18 +Prefix: hy +%% +Type: variant +Subtag: arevmda +Description: Western Armenian +Added: 2006-09-18 +Prefix: hy +%% +Type: variant +Subtag: baku1926 +Description: Unified Turkic Latin Alphabet (Historical) +Added: 2007-04-18 +Prefix: az +Prefix: ba +Prefix: crh +Prefix: kk +Prefix: krc +Prefix: ky +Prefix: sah +Prefix: tk +Prefix: tt +Prefix: uz +Comments: Denotes alphabet used in Turkic republics/regions of the + former USSR in late 1920s, and throughout 1930s, which aspired to + represent equivalent phonemes in a unified fashion. Also known as: New + Turkic Alphabet; Birlәşdirilmiş Jeni Tyrk + Әlifbasь (Birlesdirilmis Jeni Tyrk Elifbasi); + Jaŋalif (Janalif). +%% +Type: variant +Subtag: bauddha +Description: Buddhist Hybrid Sanskrit +Added: 2010-07-28 +Prefix: sa +%% +Type: variant +Subtag: biscayan +Description: Biscayan dialect of Basque +Added: 2010-04-13 +Prefix: eu +%% +Type: variant +Subtag: biske +Description: The San Giorgio dialect of Resian +Description: The Bila dialect of Resian +Added: 2007-07-05 +Prefix: sl-rozaj +Comments: The dialect of San Giorgio/Bila is one of the four major local + dialects of Resian +%% +Type: variant +Subtag: bohoric +Description: Slovene in Bohorič alphabet +Added: 2012-06-27 +Prefix: sl +Comments: The subtag represents the alphabet codified by Adam Bohorič in + 1584 and used from the first printed Slovene book and up to the mid- + 19th century. +%% +Type: variant +Subtag: boont +Description: Boontling +Added: 2006-09-18 +Prefix: en +Comments: Jargon embedded in American English +%% +Type: variant +Subtag: dajnko +Description: Slovene in Dajnko alphabet +Added: 2012-06-27 +Prefix: sl +Comments: The subtag represents the alphabet codified by Peter Dajnko + and used from 1824 to 1839 mostly in Styria (in what is now Eastern + Slovenia). +%% +Type: variant +Subtag: emodeng +Description: Early Modern English (1500-1700) +Added: 2012-02-05 +Prefix: en +%% +Type: variant +Subtag: fonipa +Description: International Phonetic Alphabet +Added: 2006-12-11 +%% +Type: variant +Subtag: fonupa +Description: Uralic Phonetic Alphabet +Added: 2006-12-11 +%% +Type: variant +Subtag: fonxsamp +Description: X-SAMPA transcription +Added: 2010-10-23 +Comments: Indicates that the content is transcribed according to X-SAMPA +%% +Type: variant +Subtag: hepburn +Description: Hepburn romanization +Added: 2009-10-01 +Prefix: ja-Latn +%% +Type: variant +Subtag: heploc +Description: Hepburn romanization, Library of Congress method +Added: 2009-10-01 +Deprecated: 2010-02-07 +Preferred-Value: alalc97 +Prefix: ja-Latn-hepburn +Comments: Preferred tag is ja-Latn-alalc97 +%% +Type: variant +Subtag: hognorsk +Description: Norwegian in Høgnorsk (High Norwegian) orthography +Added: 2010-01-02 +Prefix: nn +Comments: Norwegian following Ivar Aasen's orthographical principles, + including modern usage. +%% +Type: variant +Subtag: itihasa +Description: Epic Sanskrit +Added: 2010-07-28 +Prefix: sa +%% +Type: variant +Subtag: jauer +Description: Jauer dialect of Romansh +Added: 2010-06-29 +Prefix: rm +Comments: The spoken dialect of the Val Müstair, which has no written + standard. +%% +Type: variant +Subtag: jyutping +Description: Jyutping Cantonese Romanization +Added: 2010-10-23 +Prefix: yue +Comments: Jyutping romanization of Cantonese +%% +Type: variant +Subtag: kkcor +Description: Common Cornish orthography of Revived Cornish +Added: 2008-10-14 +Prefix: kw +%% +Type: variant +Subtag: kscor +Description: Standard Cornish orthography of Revived Cornish +Description: Kernowek Standard +Added: 2012-06-27 +Prefix: kw +%% +Type: variant +Subtag: laukika +Description: Classical Sanskrit +Added: 2010-07-28 +Prefix: sa +%% +Type: variant +Subtag: lipaw +Description: The Lipovaz dialect of Resian +Description: The Lipovec dialect of Resian +Added: 2007-08-11 +Prefix: sl-rozaj +Comments: The dialect of Lipovaz/Lipovec is one of the minor local + dialects of Resian +%% +Type: variant +Subtag: luna1918 +Description: Post-1917 Russian orthography +Added: 2010-10-10 +Prefix: ru +Comments: Russian orthography as established by the 1917/1918 + orthographic reforms +%% +Type: variant +Subtag: metelko +Description: Slovene in Metelko alphabet +Added: 2012-06-27 +Prefix: sl +Comments: The subtag represents the alphabet codified by Franc Serafin + Metelko and used from 1825 to 1833. +%% +Type: variant +Subtag: monoton +Description: Monotonic Greek +Added: 2006-12-11 +Prefix: el +%% +Type: variant +Subtag: ndyuka +Description: Ndyuka dialect +Description: Aukan dialect +Added: 2009-09-05 +Prefix: djk +Comments: Ndyuka dialect of the "Busi Nenge Tongo" English-based + Creole continuum in Eastern Suriname and Western French Guiana +%% +Type: variant +Subtag: nedis +Description: Natisone dialect +Description: Nadiza dialect +Added: 2005-10-16 +Prefix: sl +%% +Type: variant +Subtag: njiva +Description: The Gniva dialect of Resian +Description: The Njiva dialect of Resian +Added: 2007-07-05 +Prefix: sl-rozaj +Comments: The dialect of Gniva/Njiva is one of the four major local + dialects of Resian +%% +Type: variant +Subtag: nulik +Description: Volapük nulik +Description: Volapük perevidöl +Description: Volapük nulädik +Description: de Jong's Volapük +Description: New Volapük +Description: Revised Volapük +Description: Modern Volapük +Added: 2012-01-28 +Prefix: vo +%% +Type: variant +Subtag: osojs +Description: The Oseacco dialect of Resian +Description: The Osojane dialect of Resian +Added: 2007-07-05 +Prefix: sl-rozaj +Comments: The dialect of Oseacco/Osojane is one of the four major local + dialects of Resian +%% +Type: variant +Subtag: pamaka +Description: Pamaka dialect +Added: 2009-09-05 +Prefix: djk +Comments: Pamaka dialect of the "Busi Nenge Tongo" English-based + Creole continuum in Eastern Suriname and Western French Guiana +%% +Type: variant +Subtag: petr1708 +Description: Petrine orthography +Added: 2010-10-10 +Prefix: ru +Comments: Russian orthography from the Petrine orthographic reforms of + 1708 to the 1917 orthographic reform +%% +Type: variant +Subtag: pinyin +Description: Pinyin romanization +Added: 2008-10-14 +Prefix: zh-Latn +Prefix: bo-Latn +%% +Type: variant +Subtag: polyton +Description: Polytonic Greek +Added: 2006-12-11 +Prefix: el +%% +Type: variant +Subtag: puter +Description: Puter idiom of Romansh +Added: 2010-06-29 +Prefix: rm +Comments: Puter is one of the five traditional written standards or + "idioms" of the Romansh language. +%% +Type: variant +Subtag: rigik +Description: Volapük rigik +Description: Schleyer's Volapük +Description: Original Volapük +Description: Classic Volapük +Added: 2012-01-28 +Prefix: vo +%% +Type: variant +Subtag: rozaj +Description: Resian +Description: Resianic +Description: Rezijan +Added: 2005-10-16 +Prefix: sl +%% +Type: variant +Subtag: rumgr +Description: Rumantsch Grischun +Added: 2010-06-29 +Prefix: rm +Comments: Supraregional Romansh written standard +%% +Type: variant +Subtag: scotland +Description: Scottish Standard English +Added: 2007-08-31 +Prefix: en +%% +Type: variant +Subtag: scouse +Description: Scouse +Added: 2006-09-18 +Prefix: en +Comments: English Liverpudlian dialect known as 'Scouse' +%% +Type: variant +Subtag: solba +Description: The Stolvizza dialect of Resian +Description: The Solbica dialect of Resian +Added: 2007-07-05 +Prefix: sl-rozaj +Comments: The dialect of Stolvizza/Solbica is one of the four major + local dialects of Resian +%% +Type: variant +Subtag: surmiran +Description: Surmiran idiom of Romansh +Added: 2010-06-29 +Prefix: rm +Comments: Surmiran is one of the five traditional written standards or + "idioms" of the Romansh language. +%% +Type: variant +Subtag: sursilv +Description: Sursilvan idiom of Romansh +Added: 2010-06-29 +Prefix: rm +Comments: Sursilvan is one of the five traditional written standards or + "idioms" of the Romansh language. +%% +Type: variant +Subtag: sutsilv +Description: Sutsilvan idiom of Romansh +Added: 2010-06-29 +Prefix: rm +Comments: Sutsilvan is one of the five traditional written standards or + "idioms" of the Romansh language. +%% +Type: variant +Subtag: tarask +Description: Belarusian in Taraskievica orthography +Added: 2007-04-27 +Prefix: be +Comments: The subtag represents Branislau Taraskievic's Belarusian + orthography as published in "Bielaruski klasycny pravapis" by Juras + Buslakou, Vincuk Viacorka, Zmicier Sanko, and Zmicier Sauka (Vilnia- + Miensk 2005). +%% +Type: variant +Subtag: uccor +Description: Unified Cornish orthography of Revived Cornish +Added: 2008-10-14 +Prefix: kw +%% +Type: variant +Subtag: ucrcor +Description: Unified Cornish Revised orthography of Revived Cornish +Added: 2008-10-14 +Prefix: kw +%% +Type: variant +Subtag: ulster +Description: Ulster dialect of Scots +Added: 2010-04-10 +Prefix: sco +%% +Type: variant +Subtag: vaidika +Description: Vedic Sanskrit +Added: 2010-07-28 +Prefix: sa +Comments: The most ancient dialect of Sanskrit used in verse and prose + composed until about the 4th century B.C.E. +%% +Type: variant +Subtag: valencia +Description: Valencian +Added: 2007-03-06 +Prefix: ca +Comments: Variety spoken in the "Comunidad Valenciana" region of Spain, + where it is co-official with Spanish. +%% +Type: variant +Subtag: vallader +Description: Vallader idiom of Romansh +Added: 2010-06-29 +Prefix: rm +Comments: Vallader is one of the five traditional written standards or + "idioms" of the Romansh language. +%% +Type: variant +Subtag: wadegile +Description: Wade-Giles romanization +Added: 2008-10-03 +Prefix: zh-Latn +%% +Type: grandfathered +Tag: art-lojban +Description: Lojban +Added: 2001-11-11 +Deprecated: 2003-09-02 +Preferred-Value: jbo +%% +Type: grandfathered +Tag: cel-gaulish +Description: Gaulish +Added: 2001-05-25 +%% +Type: grandfathered +Tag: en-GB-oed +Description: English, Oxford English Dictionary spelling +Added: 2003-07-09 +%% +Type: grandfathered +Tag: i-ami +Description: Amis +Added: 1999-05-25 +Deprecated: 2009-07-29 +Preferred-Value: ami +%% +Type: grandfathered +Tag: i-bnn +Description: Bunun +Added: 1999-05-25 +Deprecated: 2009-07-29 +Preferred-Value: bnn +%% +Type: grandfathered +Tag: i-default +Description: Default Language +Added: 1998-03-10 +%% +Type: grandfathered +Tag: i-enochian +Description: Enochian +Added: 2002-07-03 +%% +Type: grandfathered +Tag: i-hak +Description: Hakka +Added: 1999-01-31 +Deprecated: 2000-01-10 +Preferred-Value: hak +%% +Type: grandfathered +Tag: i-klingon +Description: Klingon +Added: 1999-05-26 +Deprecated: 2004-02-24 +Preferred-Value: tlh +%% +Type: grandfathered +Tag: i-lux +Description: Luxembourgish +Added: 1997-09-19 +Deprecated: 1998-09-09 +Preferred-Value: lb +%% +Type: grandfathered +Tag: i-mingo +Description: Mingo +Added: 1997-09-19 +%% +Type: grandfathered +Tag: i-navajo +Description: Navajo +Added: 1997-09-19 +Deprecated: 2000-02-18 +Preferred-Value: nv +%% +Type: grandfathered +Tag: i-pwn +Description: Paiwan +Added: 1999-05-25 +Deprecated: 2009-07-29 +Preferred-Value: pwn +%% +Type: grandfathered +Tag: i-tao +Description: Tao +Added: 1999-05-25 +Deprecated: 2009-07-29 +Preferred-Value: tao +%% +Type: grandfathered +Tag: i-tay +Description: Tayal +Added: 1999-05-25 +Deprecated: 2009-07-29 +Preferred-Value: tay +%% +Type: grandfathered +Tag: i-tsu +Description: Tsou +Added: 1999-05-25 +Deprecated: 2009-07-29 +Preferred-Value: tsu +%% +Type: grandfathered +Tag: no-bok +Description: Norwegian Bokmal +Added: 1995-08-23 +Deprecated: 2000-02-18 +Preferred-Value: nb +%% +Type: grandfathered +Tag: no-nyn +Description: Norwegian Nynorsk +Added: 1995-08-23 +Deprecated: 2000-02-18 +Preferred-Value: nn +%% +Type: grandfathered +Tag: sgn-BE-FR +Description: Belgian-French Sign Language +Added: 2001-11-11 +Deprecated: 2009-07-29 +Preferred-Value: sfb +%% +Type: grandfathered +Tag: sgn-BE-NL +Description: Belgian-Flemish Sign Language +Added: 2001-11-11 +Deprecated: 2009-07-29 +Preferred-Value: vgt +%% +Type: grandfathered +Tag: sgn-CH-DE +Description: Swiss German Sign Language +Added: 2001-11-11 +Deprecated: 2009-07-29 +Preferred-Value: sgg +%% +Type: grandfathered +Tag: zh-guoyu +Description: Mandarin or Standard Chinese +Added: 1999-12-18 +Deprecated: 2005-07-15 +Preferred-Value: cmn +%% +Type: grandfathered +Tag: zh-hakka +Description: Hakka +Added: 1999-12-18 +Deprecated: 2009-07-29 +Preferred-Value: hak +%% +Type: grandfathered +Tag: zh-min +Description: Min, Fuzhou, Hokkien, Amoy, or Taiwanese +Added: 1999-12-18 +Deprecated: 2009-07-29 +%% +Type: grandfathered +Tag: zh-min-nan +Description: Minnan, Hokkien, Amoy, Taiwanese, Southern Min, Southern + Fujian, Hoklo, Southern Fukien, Ho-lo +Added: 2001-03-26 +Deprecated: 2009-07-29 +Preferred-Value: nan +%% +Type: grandfathered +Tag: zh-xiang +Description: Xiang or Hunanese +Added: 1999-12-18 +Deprecated: 2009-07-29 +Preferred-Value: hsn +%% +Type: redundant +Tag: az-Arab +Description: Azerbaijani in Arabic script +Added: 2003-05-30 +%% +Type: redundant +Tag: az-Cyrl +Description: Azerbaijani in Cyrillic script +Added: 2003-05-30 +%% +Type: redundant +Tag: az-Latn +Description: Azerbaijani in Latin script +Added: 2003-05-30 +%% +Type: redundant +Tag: be-Latn +Description: Belarusian in Latin script +Added: 2005-01-06 +%% +Type: redundant +Tag: bs-Cyrl +Description: Bosnian in Cyrillic script +Added: 2005-02-17 +%% +Type: redundant +Tag: bs-Latn +Description: Bosnian in Latin script +Added: 2005-02-17 +%% +Type: redundant +Tag: de-1901 +Description: German, traditional orthography +Added: 2001-07-17 +%% +Type: redundant +Tag: de-1996 +Description: German, orthography of 1996 +Added: 2001-07-17 +%% +Type: redundant +Tag: de-AT-1901 +Description: German, Austrian variant, traditional orthography +Added: 2001-07-17 +%% +Type: redundant +Tag: de-AT-1996 +Description: German, Austrian variant, orthography of 1996 +Added: 2001-07-17 +%% +Type: redundant +Tag: de-CH-1901 +Description: German, Swiss variant, traditional orthography +Added: 2001-07-17 +%% +Type: redundant +Tag: de-CH-1996 +Description: German, Swiss variant, orthography of 1996 +Added: 2001-07-17 +%% +Type: redundant +Tag: de-DE-1901 +Description: German, German variant, traditional orthography +Added: 2001-07-17 +%% +Type: redundant +Tag: de-DE-1996 +Description: German, German variant, orthography of 1996 +Added: 2001-07-17 +%% +Type: redundant +Tag: en-boont +Description: Boontling +Added: 2003-02-14 +%% +Type: redundant +Tag: en-scouse +Description: Scouse +Added: 2000-05-25 +%% +Type: redundant +Tag: es-419 +Description: Latin American Spanish +Added: 2005-07-15 +%% +Type: redundant +Tag: iu-Cans +Description: Inuktitut in Canadian Aboriginal Syllabic script +Added: 2005-02-17 +%% +Type: redundant +Tag: iu-Latn +Description: Inuktitut in Latin script +Added: 2005-02-17 +%% +Type: redundant +Tag: mn-Cyrl +Description: Mongolian in Cyrillic script +Added: 2005-02-17 +%% +Type: redundant +Tag: mn-Mong +Description: Mongolian in Mongolian script +Added: 2005-02-17 +%% +Type: redundant +Tag: sgn-BR +Description: Brazilian Sign Language +Added: 2001-11-11 +Deprecated: 2009-07-29 +Preferred-Value: bzs +%% +Type: redundant +Tag: sgn-CO +Description: Colombian Sign Language +Added: 2001-11-11 +Deprecated: 2009-07-29 +Preferred-Value: csn +%% +Type: redundant +Tag: sgn-DE +Description: German Sign Language +Added: 2001-11-11 +Deprecated: 2009-07-29 +Preferred-Value: gsg +%% +Type: redundant +Tag: sgn-DK +Description: Danish Sign Language +Added: 2001-11-11 +Deprecated: 2009-07-29 +Preferred-Value: dsl +%% +Type: redundant +Tag: sgn-ES +Description: Spanish Sign Language +Added: 2001-11-11 +Deprecated: 2009-07-29 +Preferred-Value: ssp +%% +Type: redundant +Tag: sgn-FR +Description: French Sign Language +Added: 2001-11-11 +Deprecated: 2009-07-29 +Preferred-Value: fsl +%% +Type: redundant +Tag: sgn-GB +Description: British Sign Language +Added: 2001-03-02 +Deprecated: 2009-07-29 +Preferred-Value: bfi +%% +Type: redundant +Tag: sgn-GR +Description: Greek Sign Language +Added: 2001-11-11 +Deprecated: 2009-07-29 +Preferred-Value: gss +%% +Type: redundant +Tag: sgn-IE +Description: Irish Sign Language +Added: 2001-03-02 +Deprecated: 2009-07-29 +Preferred-Value: isg +%% +Type: redundant +Tag: sgn-IT +Description: Italian Sign Language +Added: 2001-11-11 +Deprecated: 2009-07-29 +Preferred-Value: ise +%% +Type: redundant +Tag: sgn-JP +Description: Japanese Sign Language +Added: 2001-11-11 +Deprecated: 2009-07-29 +Preferred-Value: jsl +%% +Type: redundant +Tag: sgn-MX +Description: Mexican Sign Language +Added: 2001-11-11 +Deprecated: 2009-07-29 +Preferred-Value: mfs +%% +Type: redundant +Tag: sgn-NI +Description: Nicaraguan Sign Language +Added: 2001-03-02 +Deprecated: 2009-07-29 +Preferred-Value: ncs +%% +Type: redundant +Tag: sgn-NL +Description: Dutch Sign Language +Added: 2001-11-11 +Deprecated: 2009-07-29 +Preferred-Value: dse +%% +Type: redundant +Tag: sgn-NO +Description: Norwegian Sign Language +Added: 2001-11-11 +Deprecated: 2009-07-29 +Preferred-Value: nsl +%% +Type: redundant +Tag: sgn-PT +Description: Portuguese Sign Language +Added: 2001-11-11 +Deprecated: 2009-07-29 +Preferred-Value: psr +%% +Type: redundant +Tag: sgn-SE +Description: Swedish Sign Language +Added: 2001-11-11 +Deprecated: 2009-07-29 +Preferred-Value: swl +%% +Type: redundant +Tag: sgn-US +Description: American Sign Language +Added: 2001-03-02 +Deprecated: 2009-07-29 +Preferred-Value: ase +%% +Type: redundant +Tag: sgn-ZA +Description: South African Sign Language +Added: 2001-11-11 +Deprecated: 2009-07-29 +Preferred-Value: sfs +%% +Type: redundant +Tag: sl-nedis +Description: Natisone dialect, Nadiza dialect +Added: 2004-06-01 +%% +Type: redundant +Tag: sl-rozaj +Description: Resian, Resianic, Rezijan +Added: 2003-10-09 +%% +Type: redundant +Tag: sr-Cyrl +Description: Serbian in Cyrillic script +Added: 2003-05-30 +%% +Type: redundant +Tag: sr-Latn +Description: Serbian in Latin script +Added: 2003-05-30 +%% +Type: redundant +Tag: tg-Arab +Description: Tajik in Arabic script +Added: 2005-02-17 +%% +Type: redundant +Tag: tg-Cyrl +Description: Tajik in Cyrillic script +Added: 2005-02-17 +%% +Type: redundant +Tag: uz-Cyrl +Description: Uzbek in Cyrillic script +Added: 2003-05-30 +%% +Type: redundant +Tag: uz-Latn +Description: Uzbek in Latin script +Added: 2003-05-30 +%% +Type: redundant +Tag: yi-Latn +Description: Yiddish, in Latin script +Added: 2003-01-07 +%% +Type: redundant +Tag: zh-cmn +Description: Mandarin Chinese +Added: 2005-07-15 +Deprecated: 2009-07-29 +Preferred-Value: cmn +%% +Type: redundant +Tag: zh-cmn-Hans +Description: Mandarin Chinese (Simplified) +Added: 2005-07-15 +Deprecated: 2009-07-29 +Preferred-Value: cmn-Hans +%% +Type: redundant +Tag: zh-cmn-Hant +Description: Mandarin Chinese (Traditional) +Added: 2005-07-15 +Deprecated: 2009-07-29 +Preferred-Value: cmn-Hant +%% +Type: redundant +Tag: zh-gan +Description: Kan or Gan +Added: 1999-12-18 +Deprecated: 2009-07-29 +Preferred-Value: gan +%% +Type: redundant +Tag: zh-Hans +Description: simplified Chinese +Added: 2003-05-30 +%% +Type: redundant +Tag: zh-Hans-CN +Description: PRC Mainland Chinese in simplified script +Added: 2005-04-13 +%% +Type: redundant +Tag: zh-Hans-HK +Description: Hong Kong Chinese in simplified script +Added: 2005-04-11 +%% +Type: redundant +Tag: zh-Hans-MO +Description: Macao Chinese in simplified script +Added: 2005-04-11 +%% +Type: redundant +Tag: zh-Hans-SG +Description: Singapore Chinese in simplified script +Added: 2005-04-11 +%% +Type: redundant +Tag: zh-Hans-TW +Description: Taiwan Chinese in simplified script +Added: 2005-04-11 +%% +Type: redundant +Tag: zh-Hant +Description: traditional Chinese +Added: 2003-05-30 +%% +Type: redundant +Tag: zh-Hant-CN +Description: PRC Mainland Chinese in traditional script +Added: 2005-04-13 +%% +Type: redundant +Tag: zh-Hant-HK +Description: Hong Kong Chinese in traditional script +Added: 2005-04-11 +%% +Type: redundant +Tag: zh-Hant-MO +Description: Macao Chinese in traditional script +Added: 2005-04-11 +%% +Type: redundant +Tag: zh-Hant-SG +Description: Singapore Chinese in traditional script +Added: 2005-04-11 +%% +Type: redundant +Tag: zh-Hant-TW +Description: Taiwan Chinese in traditional script +Added: 2005-04-11 +%% +Type: redundant +Tag: zh-wuu +Description: Shanghaiese or Wu +Added: 1999-12-18 +Deprecated: 2009-07-29 +Preferred-Value: wuu +%% +Type: redundant +Tag: zh-yue +Description: Cantonese +Added: 1999-12-18 +Deprecated: 2009-07-29 +Preferred-Value: yue
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/util/Properties/CustomProvider.java Thu Oct 11 16:59:50 2012 -0700 @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +/* + * @test + * @bug 8000354 + * @summary Test + * @compile -XDignore.symbol.file CustomProvider.java MyXmlPropertiesProvider.java + * @run main/othervm -Dsun.util.spi.XmlPropertiesProvider=MyXmlPropertiesProvider CustomProvider + */ + +import java.util.*; +import java.io.*; + +/** + * Sanity test to verify that the property sun.util.spi.XmlPropertiesProvider + * can be used to specify a custom provider for loading/storing properties + * in XML format. + */ +public class CustomProvider { + + public static void main(String[] args) throws IOException { + String provider = System.getProperty("sun.util.spi.XmlPropertiesProvider"); + assertTrue(provider != null, "sun.util.spi.XmlPropertiesProvider not set"); + + OutputStream out = new ByteArrayOutputStream(); + InputStream in = new ByteArrayInputStream(new byte[100]); + + Properties props; + + props = new Properties(); + props.loadFromXML(in); + + props = System.getProperties(); + props.storeToXML(out, "comment"); + props.storeToXML(out, "comment", "UTF-8"); + + // check that the provider's load and store methods have been invoked + + assertTrue(MyXmlPropertiesProvider.createCount() == 1, + "Provider should only be created once"); + assertTrue(MyXmlPropertiesProvider.loadCount() == 1, + "load method expected to be called once"); + assertTrue(MyXmlPropertiesProvider.storeCount() == 2, + "store method expected to be called twice"); + } + + static void assertTrue(boolean b, String msg) { + if (!b) throw new RuntimeException(msg); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/util/Properties/LoadAndStoreXML.java Thu Oct 11 16:59:50 2012 -0700 @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8000354 + * @summary Basic test of storeToXML and loadToXML + */ + +import java.io.*; +import java.util.*; +import java.security.*; + +public class LoadAndStoreXML { + + /** + * Simple policy implementation that grants a set of permissions to + * all code sources and protection domains. + */ + static class SimplePolicy extends Policy { + private final Permissions perms; + + public SimplePolicy(Permission...permissions) { + perms = new Permissions(); + for (Permission permission : permissions) + perms.add(permission); + } + + @Override + public PermissionCollection getPermissions(CodeSource cs) { + return perms; + } + + @Override + public PermissionCollection getPermissions(ProtectionDomain pd) { + return perms; + } + + @Override + public boolean implies(ProtectionDomain pd, Permission p) { + return perms.implies(p); + } + } + + /** + * Sanity test that properties saved with Properties#storeToXML can be + * read with Properties#loadFromXML. + */ + static void test() throws IOException { + Properties props = new Properties(); + props.put("k1", "foo"); + props.put("k2", "bar"); + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + props.storeToXML(out, "no comment"); + + Properties p = new Properties(); + ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); + p.loadFromXML(in); + + if (!p.equals(props)) { + System.err.println("stored: " + props); + System.err.println("loaded: " + p); + throw new RuntimeException("Test failed"); + } + } + + public static void main(String[] args) throws IOException { + + // run test without security manager + test(); + + // re-run test with security manager + Policy orig = Policy.getPolicy(); + Policy p = new SimplePolicy(new RuntimePermission("setSecurityManager"), + new PropertyPermission("line.separator", "read")); + Policy.setPolicy(p); + System.setSecurityManager(new SecurityManager()); + try { + test(); + } finally { + // turn off security manager and restore policy + System.setSecurityManager(null); + Policy.setPolicy(orig); + } + + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/util/Properties/MyXmlPropertiesProvider.java Thu Oct 11 16:59:50 2012 -0700 @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.util.*; +import java.io.*; + +public class MyXmlPropertiesProvider + extends sun.util.spi.XmlPropertiesProvider +{ + private static int createCount; + private static int loadCount; + private static int storeCount; + + static int createCount() { return createCount; } + static int loadCount() { return loadCount; } + static int storeCount() { return storeCount; } + + public MyXmlPropertiesProvider() { + createCount++; + } + + @Override + public void load(Properties props, InputStream in) + throws IOException, InvalidPropertiesFormatException + { + loadCount++; + } + + @Override + public void store(Properties props, OutputStream out, + String comment, String encoding) + throws IOException + { + storeCount++; + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/util/ServiceLoader/NPE.java Thu Oct 11 16:59:50 2012 -0700 @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @bug 7197642 + * @summary test ServiceLoader.load methods for NullPointerException. + */ +import java.util.ServiceLoader; +import java.util.Arrays; + +public final class NPE { + static abstract class Test { + String name; + + Test(String name) { this.name = name; } + + abstract void run(); + } + + static Test load = new Test("ServiceLoader.load(null)") { + void run() { ServiceLoader.load(null); } + }; + + static Test loadWithClassLoader = new Test("ServiceLoader.load(null, loader)") { + void run() { ServiceLoader.load(null, NPE.class.getClassLoader()); } + }; + + static Test loadInstalled = new Test("ServiceLoader.loadInstalled(null)") { + void run() { ServiceLoader.loadInstalled(null); } + }; + + public static void main(String[] args) throws Exception { + for (Test t : Arrays.asList(load, loadWithClassLoader, loadInstalled)) { + NullPointerException caught = null; + try { + t.run(); + } catch (NullPointerException e) { + caught = e; + } + if (caught == null) { + throw new RuntimeException("NullPointerException expected for method invocation of " + t.name); + } + } + } +} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/javax/swing/JColorChooser/Test7194184.java Thu Oct 11 16:59:50 2012 -0700 @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * Portions Copyright (c) 2012 IBM Corporation + */ + +/* + * @test + * @bug 7194184 + * @summary Tests JColorChooser Swatch keyboard accessibility. + * @author Sean Chou + * @library ../regtesthelpers + * @build Util + * @run main Test7194184 + */ + +import java.awt.Component; +import java.awt.AWTException; +import java.awt.Color; +import java.awt.Robot; +import java.awt.Toolkit; +import java.awt.event.KeyEvent; + +import javax.swing.JColorChooser; +import javax.swing.JFrame; +import javax.swing.SwingUtilities; + +import java.util.concurrent.Callable; +import sun.awt.SunToolkit; + +public class Test7194184 implements Runnable { + private static JFrame frame; + private static JColorChooser colorChooser; + private static Color selectedColor; + + public static void main(String[] args) throws Exception { + testKeyBoardAccess(); + } + + private static void testKeyBoardAccess() throws Exception { + Robot robot = new Robot(); + SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); + + SwingUtilities.invokeLater(new Test7194184()); + toolkit.realSync(); + + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + selectedColor = colorChooser.getColor(); + + Component recentSwatchPanel = Util.findSubComponent(colorChooser, "RecentSwatchPanel"); + if (recentSwatchPanel == null) { + throw new RuntimeException("RecentSwatchPanel not found"); + } + recentSwatchPanel.requestFocusInWindow(); + } + }); + + toolkit.realSync(); + + // Tab to move the focus to MainSwatch + Util.hitKeys(robot, KeyEvent.VK_SHIFT, KeyEvent.VK_TAB); + + // Select the color on right + Util.hitKeys(robot, KeyEvent.VK_RIGHT); + Util.hitKeys(robot, KeyEvent.VK_RIGHT); + Util.hitKeys(robot, KeyEvent.VK_SPACE); + toolkit.realSync(); + + SwingUtilities.invokeAndWait(new Runnable() { + @Override + public void run() { + frame.dispose(); + if (selectedColor == colorChooser.getColor()) { + throw new RuntimeException("JColorChooser misses keyboard accessibility"); + } + } + }); + } + + public void run() { + String title = getClass().getName(); + frame = new JFrame(title); + colorChooser = new JColorChooser(); + + frame.add(colorChooser); + frame.pack(); + frame.setVisible(true); + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/javax/swing/ToolTipManager/7123767/bug7123767.java Thu Oct 11 16:59:50 2012 -0700 @@ -0,0 +1,220 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + @bug 7123767 + @summary Wrong tooltip location in Multi-Monitor configurations + @author Vladislav Karnaukhov + @run main bug7123767 +*/ + +import sun.awt.SunToolkit; + +import javax.swing.*; +import javax.swing.plaf.metal.MetalLookAndFeel; +import java.awt.*; +import java.awt.event.MouseEvent; +import java.lang.reflect.InvocationTargetException; + +public class bug7123767 extends JFrame { + + private static class TestFactory extends PopupFactory { + + private static TestFactory newFactory = new TestFactory(); + private static PopupFactory oldFactory; + + private TestFactory() { + super(); + } + + public static void install() { + if (oldFactory == null) { + oldFactory = getSharedInstance(); + setSharedInstance(newFactory); + } + } + + public static void uninstall() { + if (oldFactory != null) { + setSharedInstance(oldFactory); + } + } + + // Actual test happens here + public Popup getPopup(Component owner, Component contents, int x, int y) { + GraphicsConfiguration mouseGC = testGC(MouseInfo.getPointerInfo().getLocation()); + if (mouseGC == null) { + throw new RuntimeException("Can't find GraphicsConfiguration that mouse pointer belongs to"); + } + + GraphicsConfiguration tipGC = testGC(new Point(x, y)); + if (tipGC == null) { + throw new RuntimeException("Can't find GraphicsConfiguration that tip belongs to"); + } + + if (!mouseGC.equals(tipGC)) { + throw new RuntimeException("Mouse and tip GCs are not equal"); + } + + return super.getPopup(owner, contents, x, y); + } + + private static GraphicsConfiguration testGC(Point pt) { + GraphicsEnvironment environment = GraphicsEnvironment.getLocalGraphicsEnvironment(); + GraphicsDevice[] devices = environment.getScreenDevices(); + for (GraphicsDevice device : devices) { + GraphicsConfiguration[] configs = device.getConfigurations(); + for (GraphicsConfiguration config : configs) { + Rectangle rect = config.getBounds(); + Insets insets = Toolkit.getDefaultToolkit().getScreenInsets(config); + adjustInsets(rect, insets); + if (rect.contains(pt)) + return config; + } + } + + return null; + } + } + + private static final int MARGIN = 10; + private static bug7123767 frame; + private static Robot robot; + + public static void main(String[] args) throws Exception { + UIManager.setLookAndFeel(new MetalLookAndFeel()); + setUp(); + testToolTip(); + TestFactory.uninstall(); + } + + // Creates a window that is stretched across all available monitors + // and adds itself as ContainerListener to track tooltips drawing + private bug7123767() { + super(); + + ToolTipManager.sharedInstance().setInitialDelay(0); + setDefaultCloseOperation(DISPOSE_ON_CLOSE); + TestFactory.install(); + + JLabel label1 = new JLabel("no preferred location"); + label1.setToolTipText("tip"); + add(label1, BorderLayout.WEST); + + JLabel label2 = new JLabel("preferred location (20000, 20000)") { + public Point getToolTipLocation(MouseEvent event) { + return new Point(20000, 20000); + } + }; + + label2.setToolTipText("tip"); + add(label2, BorderLayout.EAST); + + setUndecorated(true); + pack(); + + Rectangle rect = new Rectangle(); + GraphicsEnvironment environment = GraphicsEnvironment.getLocalGraphicsEnvironment(); + GraphicsDevice[] devices = environment.getScreenDevices(); + for (GraphicsDevice device : devices) { + GraphicsConfiguration[] configs = device.getConfigurations(); + for (GraphicsConfiguration config : configs) { + Insets localInsets = Toolkit.getDefaultToolkit().getScreenInsets(config); + Rectangle localRect = config.getBounds(); + adjustInsets(localRect, localInsets); + rect.add(localRect); + } + } + setBounds(rect); + } + + private static void setUp() throws InterruptedException, InvocationTargetException { + SwingUtilities.invokeAndWait(new Runnable() { + @Override + public void run() { + frame = new bug7123767(); + frame.setVisible(true); + } + }); + } + + // Moves mouse pointer to the corners of every GraphicsConfiguration + private static void testToolTip() throws AWTException { + SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); + toolkit.realSync(); + + GraphicsEnvironment environment = GraphicsEnvironment.getLocalGraphicsEnvironment(); + GraphicsDevice[] devices = environment.getScreenDevices(); + for (GraphicsDevice device : devices) { + GraphicsConfiguration[] configs = device.getConfigurations(); + for (GraphicsConfiguration config : configs) { + Rectangle rect = config.getBounds(); + Insets insets = toolkit.getScreenInsets(config); + adjustInsets(rect, insets); + + // Upper left + glide(rect.x + rect.width / 2, rect.y + rect.height / 2, + rect.x + MARGIN, rect.y + MARGIN); + toolkit.realSync(); + + // Lower left + glide(rect.x + rect.width / 2, rect.y + rect.height / 2, + rect.x + MARGIN, rect.y + rect.height - MARGIN); + toolkit.realSync(); + + // Upper right + glide(rect.x + rect.width / 2, rect.y + rect.height / 2, + rect.x + rect.width - MARGIN, rect.y + MARGIN); + toolkit.realSync(); + + // Lower right + glide(rect.x + rect.width / 2, rect.y + rect.height / 2, + rect.x + rect.width - MARGIN, rect.y + rect.height - MARGIN); + toolkit.realSync(); + } + } + } + + private static void glide(int x0, int y0, int x1, int y1) throws AWTException { + if (robot == null) { + robot = new Robot(); + robot.setAutoDelay(20); + } + + float dmax = (float) Math.max(Math.abs(x1 - x0), Math.abs(y1 - y0)); + float dx = (x1 - x0) / dmax; + float dy = (y1 - y0) / dmax; + + robot.mouseMove(x0, y0); + for (int i = 1; i <= dmax; i += 10) { + robot.mouseMove((int) (x0 + dx * i), (int) (y0 + dy * i)); + } + } + + private static void adjustInsets(Rectangle rect, final Insets insets) { + rect.x += insets.left; + rect.y += insets.top; + rect.width -= (insets.left + insets.right); + rect.height -= (insets.top + insets.bottom); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/java2d/pipe/InterpolationQualityTest.java Thu Oct 11 16:59:50 2012 -0700 @@ -0,0 +1,192 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 7188093 8000176 + * @summary Tests each of the 3 possible methods for rendering an upscaled + * image via rendering hints for default, xrender and opengl pipelines. + * + * @author Vadim.Pakhnushev@oracle.com + * @run main/othervm -Dsun.java2d.xrender=false InterpolationQualityTest + * @run main/othervm -Dsun.java2d.xrender=True InterpolationQualityTest + * @run main/othervm -Dsun.java2d.opengl=True InterpolationQualityTest + * @run main/othervm -Dsun.java2d.d3d=false InterpolationQualityTest + * @run main/othervm -Dsun.java2d.d3d=True InterpolationQualityTest + */ + +import java.awt.*; +import java.awt.image.*; +import java.io.File; +import java.io.IOException; +import javax.imageio.ImageIO; + +public class InterpolationQualityTest { + + private static final int testSize = 4, scaleFactor = 20, tolerance = 3; + private static final int sw = testSize * scaleFactor; + private static final int sh = testSize * scaleFactor; + + private Image testImage; + private VolatileImage vImg; + + public InterpolationQualityTest() { + testImage = createTestImage(); + } + + private Image createTestImage() { + BufferedImage bi = new BufferedImage(testSize, testSize, BufferedImage.TYPE_INT_ARGB); + Graphics2D g = bi.createGraphics(); + g.setColor(Color.BLACK); + g.fillRect(0, 0, testSize, testSize); + for (int i = 0; i < testSize; i++) { + bi.setRGB(i, i, Color.WHITE.getRGB()); + } + return bi; + } + + private BufferedImage createReferenceImage(Object hint) { + BufferedImage bi = new BufferedImage(sw, sh, BufferedImage.TYPE_INT_ARGB); + Graphics2D g2d = bi.createGraphics(); + drawImage(g2d, hint); + return bi; + } + + private void drawImage(Graphics2D g2d, Object hint) { + g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, hint); + g2d.drawImage(testImage, 0, 0, sw, sh, null); + } + + private GraphicsConfiguration getDefaultGC() { + return GraphicsEnvironment.getLocalGraphicsEnvironment(). + getDefaultScreenDevice().getDefaultConfiguration(); + } + + private void createVImg() { + vImg = getDefaultGC().createCompatibleVolatileImage(sw, sh); + } + + private void renderOffscreen(Object hint) { + Graphics2D g = vImg.createGraphics(); + drawImage(g, hint); + g.dispose(); + } + + private BufferedImage renderImage(Object hint) { + BufferedImage snapshot; + createVImg(); + renderOffscreen(hint); + + do { + int status = vImg.validate(getDefaultGC()); + if (status != VolatileImage.IMAGE_OK) { + if (status == VolatileImage.IMAGE_INCOMPATIBLE) { + createVImg(); + } + renderOffscreen(hint); + } + snapshot = vImg.getSnapshot(); + } while (vImg.contentsLost()); + vImg.flush(); + return snapshot; + } + + private boolean compareComponent(int comp1, int comp2) { + return Math.abs(comp1 - comp2) <= tolerance; + } + + private boolean compareRGB(int rgb1, int rgb2) { + Color col1 = new Color(rgb1); + Color col2 = new Color(rgb2); + return compareComponent(col1.getRed(), col2.getRed()) && + compareComponent(col1.getBlue(), col2.getBlue()) && + compareComponent(col1.getGreen(), col2.getGreen()) && + compareComponent(col1.getAlpha(), col2.getAlpha()); + } + + private boolean compareImages(BufferedImage img, BufferedImage ref, String imgName) { + for (int y = 0; y < ref.getHeight(); y++) { + for (int x = 0; x < ref.getWidth(); x++) { + if (!compareRGB(ref.getRGB(x, y), img.getRGB(x, y))) { + System.out.println(imgName + ".getRGB(" + x + ", " + y + ") = " + + new Color(img.getRGB(x, y)) + " != " + + new Color(ref.getRGB(x, y))); + return false; + } + } + } + return true; + } + + private boolean test(Object hint) { + BufferedImage refImage = createReferenceImage(hint); + BufferedImage resImage = renderImage(hint); + + boolean passed = compareImages(resImage, refImage, "resImage"); + System.out.println(getHintName(hint) + (passed ? " passed." : " failed.")); + if (!passed) { + dumpImage(refImage, "out_" + getHintName(hint) + "_ref.png"); + dumpImage(resImage, "out_" + getHintName(hint) + ".png"); + } + return passed; + } + + public void test() { + boolean passed = true; + passed &= test(RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR); + passed &= test(RenderingHints.VALUE_INTERPOLATION_BILINEAR); + passed &= test(RenderingHints.VALUE_INTERPOLATION_BICUBIC); + if (passed) { + System.out.println("Test PASSED."); + } else { + throw new RuntimeException("Test FAILED."); + } + } + + private String getHintName(Object hint) { + if (hint == RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR) { + return "nearest"; + } + else if (hint == RenderingHints.VALUE_INTERPOLATION_BILINEAR) { + return "bilinear"; + } + else if (hint == RenderingHints.VALUE_INTERPOLATION_BICUBIC) { + return "bicubic"; + } + else { + return "null"; + } + } + + private void dumpImage(BufferedImage bi, String name) { + try { + ImageIO.write(bi, "PNG", new File(name)); + } catch (IOException ex) { + } + } + + public static void main(String[] argv) { + InterpolationQualityTest test = new InterpolationQualityTest(); + test.test(); + } +}
--- a/jdk/test/sun/management/jmxremote/startstop/JMXStartStopDoSomething.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/test/sun/management/jmxremote/startstop/JMXStartStopDoSomething.java Thu Oct 11 16:59:50 2012 -0700 @@ -21,17 +21,27 @@ * questions. */ -import java.io.RandomAccessFile; +import java.io.File; public class JMXStartStopDoSomething { + private static final String lockFileName = "JMXStartStop.lck"; - public void doSomething(){ + public static void doSomething() { try { - for (int i=0; i < 10; ++i) { - RandomAccessFile f = new RandomAccessFile("/dev/null","r"); - int n = f.read(); - f.close(); + File lockFile = new File(lockFileName); + lockFile.createNewFile(); + + while(lockFile.exists()) { + long datetime = lockFile.lastModified(); + long epoch = System.currentTimeMillis()/1000; + + // Don't allow test app to run more than an hour + if (epoch - datetime > 3600) { + System.err.println("Lock is too old. Aborting"); + return; + } + Thread.sleep(1); } } catch (Throwable e) { @@ -41,12 +51,7 @@ public static void main(String args[]) throws Exception { System.err.println("main enter"); - int count = 1; - while(count > 0) { - JMXStartStopDoSomething p = new JMXStartStopDoSomething(); - p.doSomething(); - Thread.sleep(1); - } - // System.err.println("main exit"); + doSomething(); + System.err.println("main exit"); } }
--- a/jdk/test/sun/management/jmxremote/startstop/JMXStartStopTest.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/test/sun/management/jmxremote/startstop/JMXStartStopTest.java Thu Oct 11 16:59:50 2012 -0700 @@ -167,14 +167,14 @@ } } catch (RuntimeException r) { dbg_print("No connection: ", r); - System.out.println("NO_CONN"); + System.out.print("NO_CONN"); System.exit(1); } catch (Throwable t) { dbg_print("No connection: ", t); - System.out.println("NO_CONN"); + System.out.print("NO_CONN"); System.exit(2); } - System.out.println("OK_CONN"); + System.out.print("OK_CONN"); System.exit(0); }
--- a/jdk/test/sun/management/jmxremote/startstop/JMXStartStopTest.sh Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/test/sun/management/jmxremote/startstop/JMXStartStopTest.sh Thu Oct 11 16:59:50 2012 -0700 @@ -27,7 +27,6 @@ # @run shell JMXStartStopTest.sh --jtreg --no-compile # @summary No word Failed expected in the test output -_verbose=no _server=no _jtreg=no _compile=yes @@ -39,14 +38,14 @@ _testclasses=".classes" _testsrc=`pwd` -_logname=".classes/JMXStartStopTest_output.txt" - +_logname=".classes/output.txt" +_lockFileName="JMXStartStop.lck" _compile(){ if [ ! -e ${_testclasses} ] then - mkdir -p ${_testclasses} + mkdir -p ${_testclasses} fi rm -f ${_testclasses}/JMXStartStopTest.class @@ -62,21 +61,17 @@ } _app_start(){ + ${TESTJAVA}/bin/java -server $* -cp ${_testclasses} JMXStartStopDoSomething >> ${_logname} 2>&1 & - if [ "${_verbose}" = "yes" ] - then - echo "RUN: ${TESTJAVA}/bin/java -server $* -cp ${_testclasses} JMXStartStopDoSomething " - fi - ${TESTJAVA}/bin/java -server $* -cp ${_testclasses} JMXStartStopDoSomething >> ${_logname} 2>&1 & - sleep 1 - - pid=`_get_pid` - if [ "x${pid}" = "x" ] + npid=`_get_pid` + if [ "${npid}" = "" ] then echo "ERROR: Test app not started" - exit -1 + if [ "${_jtreg}" = "yes" ] + then + exit -1 + fi fi - } _get_pid(){ @@ -84,32 +79,36 @@ } _app_stop(){ - pid=`_get_pid` - if [ "x${pid}" != "x" ] - then - kill $pid - fi + rm ${_lockFileName} - # Stop on first failed test under jtreg - if [ "x$1" = "xFailed" -a "${_jtreg}" = "yes" ] + # wait until VM is actually shuts down + while true + do + npid=`_get_pid` + if [ "${npid}" = "" ] then - exit -1 + break fi + sleep 1 + done } - -testme(){ - ${TESTJAVA}/bin/java -cp ${_testclasses} JMXStartStopTest $* + +_exit_on_jtreg(){ + # Stop on first failed test under jtreg + if [ "${_jtreg}" = "yes" ] + then + _app_stop + exit -1 + fi +} + +_testme(){ + ${TESTJAVA}/bin/java -cp ${_testclasses} JMXStartStopTest $* } _jcmd(){ - if [ "${_verbose}" = "yes" ] - then - echo "RUN: ${TESTJAVA}/bin/jcmd JMXStartStopDoSomething $*" - ${TESTJAVA}/bin/jcmd JMXStartStopDoSomething $* - else - ${TESTJAVA}/bin/jcmd JMXStartStopDoSomething $* > /dev/null 2>/dev/null - fi + ${TESTJAVA}/bin/jcmd JMXStartStopDoSomething $* > /dev/null 2>/dev/null } _echo(){ @@ -122,139 +121,136 @@ test_01(){ # Run an app with JMX enabled stop it and # restart on other port - - _echo "**** Test one ****" + + _echo "**** Test one ****" _app_start -Dcom.sun.management.jmxremote.port=$1 \ -Dcom.sun.management.jmxremote.authenticate=false \ - -Dcom.sun.management.jmxremote.ssl=false + -Dcom.sun.management.jmxremote.ssl=false - res1=`testme $1` + res1=`_testme $1` _jcmd ManagementAgent.stop - res2=`testme $1` + res2=`_testme $1` _jcmd ManagementAgent.start jmxremote.port=$2 - res3=`testme $2` - + res3=`_testme $2` if [ "${res1}" = "OK_CONN" -a "${res2}" = "NO_CONN" -a "${res3}" = "OK_CONN" ] then - _echo "Passed" + _echo "Passed" else - _echo "Failed r1(OK):${res1} r2(NO):${res2} r3(OK):${res3}" - _app_stop "Failed" + _echo "Failed r1(OK):${res1} r2(NO):${res2} r3(OK):${res3}" + _exit_on_jtreg fi _app_stop - } test_02(){ # Run an app without JMX enabled # start JMX by jcmd -_echo "**** Test two ****" -_app_start + _echo "**** Test two ****" + _app_start -_jcmd ManagementAgent.start jmxremote.port=$1 jmxremote.authenticate=false jmxremote.ssl=false + _jcmd ManagementAgent.start jmxremote.port=$1 jmxremote.authenticate=false jmxremote.ssl=false -res1=`testme $1` + res1=`_testme $1` -if [ "${res1}" = "OK_CONN" ] -then - _echo "Passed" -else - _echo "Failed r1(OK):${res1}" - _app_stop "Failed" -fi - -_app_stop - + if [ "${res1}" = "OK_CONN" ] + then + _echo "Passed" + else + _echo "Failed r1(OK):${res1}" + _exit_on_jtreg + fi + _app_stop } test_03(){ # Run an app without JMX enabled # start JMX by jcmd on one port than on other one -_echo "**** Test three ****" -_app_start + _echo "**** Test three ****" + _app_start -_jcmd ManagementAgent.start jmxremote.port=$1 jmxremote.authenticate=false jmxremote.ssl=false + _jcmd ManagementAgent.start jmxremote.port=$1 jmxremote.authenticate=false jmxremote.ssl=false # Second agent shouldn't start -_jcmd ManagementAgent.start jmxremote.port=$2 jmxremote.authenticate=false jmxremote.ssl=false + _jcmd ManagementAgent.start jmxremote.port=$2 jmxremote.authenticate=false jmxremote.ssl=false # First agent should connect -res1=`testme $1` + res1=`_testme $1` -if [ "${res1}" = "OK_CONN" ] -then - _echo "Passed $1" -else - _echo "Failed r1(NO):${res1}" - _app_stop "Failed" -fi + if [ "${res1}" = "OK_CONN" ] + then + _echo "Passed $1" + else + _echo "Failed r1(NO):${res1}" + _exit_on_jtreg + fi #Second agent shouldn't connect -res1=`testme $2` + res1=`_testme $2` -if [ "${res1}" = "NO_CONN" ] -then - _echo "Passed $2" -else - _echo "Failed r1(OK):${res1}" -fi + if [ "${res1}" = "NO_CONN" ] + then + _echo "Passed $2" + else + _echo "Failed r1(OK):${res1}" + _exit_on_jtreg + fi -_app_stop + _app_stop } test_04(){ # Run an app without JMX enabled # start JMX by jcmd on one port, specify rmi port explicitly -_echo "**** Test four ****" -_app_start + _echo "**** Test four ****" + _app_start -_jcmd ManagementAgent.start jmxremote.port=$1 jmxremote.rmi.port=$2 jmxremote.authenticate=false jmxremote.ssl=false + _jcmd ManagementAgent.start jmxremote.port=$1 jmxremote.rmi.port=$2 jmxremote.authenticate=false jmxremote.ssl=false # First agent should connect -res1=`testme $1 $2` + res1=`_testme $1 $2` -if [ "${res1}" = "OK_CONN" ] -then - _echo "Passed $1 $2" -else - _echo "Failed r1(NO):${res1}" - _app_stop "Failed" -fi + if [ "${res1}" = "OK_CONN" ] + then + _echo "Passed $1 $2" + else + _echo "Failed r1(NO):${res1}" + _exit_on_jtreg + fi -_app_stop + _app_stop } test_05(){ # Run an app without JMX enabled, it will enable local server # but should leave remote server disabled -_echo "**** Test five ****" -_app_start + _echo "**** Test five ****" + _app_start -_jcmd ManagementAgent.start jmxremote=1 + _jcmd ManagementAgent.start jmxremote=1 -# First agent should connect -res1=`testme $1` + # First agent should connect + res1=`_testme $1` -if [ "${res1}" = "NO_CONN" ] -then - _echo "Passed $1 $2" -else - _echo "Failed r1(OK):${res1}" - _app_stop "Failed" -fi + if [ "${res1}" = "NO_CONN" ] + then + _echo "Passed $1 $2" + else + _echo "Failed r1(OK):${res1}" + _exit_on_jtreg + fi -_app_stop + _app_stop } test_06(){ @@ -264,35 +260,35 @@ # 1) with the same port # 2) with other port # 3) attempt to stop it twice -# Check for valid messages in the output +# Check for valid messages in the output -_echo "**** Test six ****" -_app_start + _echo "**** Test six ****" + _app_start -_jcmd ManagementAgent.start jmxremote.port=$1 jmxremote.authenticate=false jmxremote.ssl=false + _jcmd ManagementAgent.start jmxremote.port=$1 jmxremote.authenticate=false jmxremote.ssl=false -# First agent should connect -res1=`testme $1 $2` + # First agent should connect + res1=`_testme $1 $2` -if [ "${res1}" = "OK_CONN" ] -then - _echo "Passed $1 $2" -else - _echo "Failed r1(NO):${res1}" - _app_stop "Failed" -fi + if [ "${res1}" = "OK_CONN" ] + then + _echo "Passed $1 $2" + else + _echo "Failed r1(NO):${res1}" + _exit_on_jtreg + fi -_jcmd ManagementAgent.start jmxremote.port=$1 jmxremote.authenticate=false jmxremote.ssl=false + _jcmd ManagementAgent.start jmxremote.port=$1 jmxremote.authenticate=false jmxremote.ssl=false -_jcmd ManagementAgent.start jmxremote.port=$2 jmxremote.authenticate=false jmxremote.ssl=false + _jcmd ManagementAgent.start jmxremote.port=$2 jmxremote.authenticate=false jmxremote.ssl=false -_jcmd ManagementAgent.stop + _jcmd ManagementAgent.stop -_jcmd ManagementAgent.stop + _jcmd ManagementAgent.stop -_jcmd ManagementAgent.start jmxremote.port=22 jmxremote.rmi.port=$2 jmxremote.authenticate=false jmxremote.ssl=false + _jcmd ManagementAgent.start jmxremote.port=22 jmxremote.rmi.port=$2 jmxremote.authenticate=false jmxremote.ssl=false -_app_stop + _app_stop } test_07(){ @@ -300,27 +296,26 @@ # in command line. # make sure these properties overriden corectly -_echo "**** Test seven ****" - -_app_start -Dcom.sun.management.jmxremote.authenticate=false \ - -Dcom.sun.management.jmxremote.ssl=true + _echo "**** Test seven ****" -res1=`testme $1` + _app_start -Dcom.sun.management.jmxremote.authenticate=false \ + -Dcom.sun.management.jmxremote.ssl=true -_jcmd ManagementAgent.start jmxremote.port=$2 jmxremote.authenticate=false jmxremote.ssl=false + res1=`_testme $1` -res2=`testme $2` + _jcmd ManagementAgent.start jmxremote.port=$2 jmxremote.authenticate=false jmxremote.ssl=false + res2=`_testme $2` -if [ "${res1}" = "NO_CONN" -a "${res2}" = "OK_CONN" ] -then - echo "Passed" -else - _echo "Failed r1(NO):${res1} r2(OK):${res2}" - _app_stop "Failed" -fi + if [ "${res1}" = "NO_CONN" -a "${res2}" = "OK_CONN" ] + then + echo "Passed" + else + _echo "Failed r1(NO):${res1} r2(OK):${res2}" + _exit_on_jtreg + fi -_app_stop + _app_stop } test_08(){ @@ -329,32 +324,31 @@ # stop JMX agent and then start it again with different property values # make sure these properties overriden corectly -_echo "**** Test eight ****" + _echo "**** Test eight ****" -_app_start -Dcom.sun.management.jmxremote.port=$1 \ - -Dcom.sun.management.jmxremote.authenticate=false \ - -Dcom.sun.management.jmxremote.ssl=true + _app_start -Dcom.sun.management.jmxremote.port=$1 \ + -Dcom.sun.management.jmxremote.authenticate=false \ + -Dcom.sun.management.jmxremote.ssl=true -res1=`testme $1` + res1=`_testme $1` -_jcmd ManagementAgent.stop + _jcmd ManagementAgent.stop -res2=`testme $1` + res2=`_testme $1` -_jcmd ManagementAgent.start jmxremote.port=$2 jmxremote.authenticate=false jmxremote.ssl=false + _jcmd ManagementAgent.start jmxremote.port=$2 jmxremote.authenticate=false jmxremote.ssl=false -res3=`testme $2` - + res3=`_testme $2` -if [ "${res1}" = "NO_CONN" -a "${res2}" = "NO_CONN" -a "${res3}" = "OK_CONN" ] -then - _echo "Passed" -else - _echo "Failed r1(NO):${res1} r2(NO):${res2} r3(OK):${res3}" - _app_stop "Failed" -fi + if [ "${res1}" = "NO_CONN" -a "${res2}" = "NO_CONN" -a "${res3}" = "OK_CONN" ] + then + _echo "Passed" + else + _echo "Failed r1(NO):${res1} r2(NO):${res2} r3(OK):${res3}" + _exit_on_jtreg + fi -_app_stop + _app_stop } test_09(){ @@ -365,31 +359,31 @@ # in command line # make sure these properties overriden corectly -_echo "**** Test nine ****" + _echo "**** Test nine ****" -_app_start -Dcom.sun.management.config.file=${_testsrc}/management_cl.properties \ - -Dcom.sun.management.jmxremote.authenticate=false + _app_start -Dcom.sun.management.config.file=${_testsrc}/management_cl.properties \ + -Dcom.sun.management.jmxremote.authenticate=false -res1=`testme $1` + res1=`_testme $1` -_jcmd ManagementAgent.stop + _jcmd ManagementAgent.stop -res2=`testme $1` + res2=`_testme $1` -_jcmd ManagementAgent.start config.file=${_testsrc}/management_jcmd.properties \ - jmxremote.authenticate=false jmxremote.port=$2 + _jcmd ManagementAgent.start config.file=${_testsrc}/management_jcmd.properties \ + jmxremote.authenticate=false jmxremote.port=$2 -res3=`testme $2` + res3=`_testme $2` -if [ "${res1}" = "NO_CONN" -a "${res2}" = "NO_CONN" -a "${res3}" = "OK_CONN" ] -then - _echo "Passed" -else - _echo "Failed r1(NO):${res1} r2(NO):${res2} r3(OK):${res3}" - _app_stop "Failed" -fi + if [ "${res1}" = "NO_CONN" -a "${res2}" = "NO_CONN" -a "${res3}" = "OK_CONN" ] + then + _echo "Passed" + else + _echo "Failed r1(NO):${res1} r2(NO):${res2} r3(OK):${res3}" + _exit_on_jtreg + fi -_app_stop + _app_stop } test_10(){ @@ -399,34 +393,34 @@ # stop JMX agent again and then start it without property value # make sure these properties overriden corectly -_echo "**** Test ten ****" + _echo "**** Test ten ****" -_app_start -Dcom.sun.management.jmxremote.port=$1 \ - -Dcom.sun.management.jmxremote.authenticate=false \ - -Dcom.sun.management.jmxremote.ssl=true + _app_start -Dcom.sun.management.jmxremote.port=$1 \ + -Dcom.sun.management.jmxremote.authenticate=false \ + -Dcom.sun.management.jmxremote.ssl=true -res1=`testme $1` + res1=`_testme $1` -_jcmd ManagementAgent.stop -_jcmd ManagementAgent.start jmxremote.ssl=false jmxremote.port=$1 + _jcmd ManagementAgent.stop + _jcmd ManagementAgent.start jmxremote.ssl=false jmxremote.port=$1 -res2=`testme $1` + res2=`_testme $1` -_jcmd ManagementAgent.stop -_jcmd ManagementAgent.start jmxremote.port=$1 + _jcmd ManagementAgent.stop + _jcmd ManagementAgent.start jmxremote.port=$1 -res3=`testme $1` + res3=`_testme $1` -if [ "${res1}" = "NO_CONN" -a "${res2}" = "OK_CONN" -a "${res3}" = "NO_CONN" ] -then - _echo "Passed" -else - _echo "Failed r1(NO):${res1} r2(OK):${res2} r3(NO):${res3}" - _app_stop "Failed" -fi + if [ "${res1}" = "NO_CONN" -a "${res2}" = "OK_CONN" -a "${res3}" = "NO_CONN" ] + then + _echo "Passed" + else + _echo "Failed r1(NO):${res1} r2(OK):${res2} r3(NO):${res3}" + _exit_on_jtreg + fi -_app_stop + _app_stop } test_11(){ @@ -434,102 +428,87 @@ # stop remote agent # make sure local agent is not affected -_echo "**** Test eleven ****" + _echo "**** Test eleven ****" -_app_start -Dcom.sun.management.jmxremote.port=$2 \ - -Dcom.sun.management.jmxremote.authenticate=false \ - -Dcom.sun.management.jmxremote.ssl=false - -res1=`testme $2` + _app_start -Dcom.sun.management.jmxremote.port=$2 \ + -Dcom.sun.management.jmxremote.authenticate=false \ + -Dcom.sun.management.jmxremote.ssl=false + + res1=`_testme $2` -_jcmd ManagementAgent.stop + _jcmd ManagementAgent.stop -pid=`${TESTJAVA}/bin/jps | sed -n "/JMXStartStopDoSomething/s/ .*//p"` -res2=`testme local ${pid}` + pid=`${TESTJAVA}/bin/jps | sed -n "/JMXStartStopDoSomething/s/ .*//p"` + res2=`_testme local ${pid}` -if [ "${res1}" = "OK_CONN" -a "${res2}" = "OK_CONN" ] -then - _echo "Passed" -else - _echo "Failed r1(OK):${res1} r2(OK):${res2}" - _app_stop "Failed" -fi + if [ "${res1}" = "OK_CONN" -a "${res2}" = "OK_CONN" ] + then + _echo "Passed" + else + _echo "Failed r1(OK):${res1} r2(OK):${res2}" + _exit_on_jtreg + fi -_app_stop + _app_stop } test_12(){ # Run an app with JMX disabled # start local agent only -_echo "**** Test twelve ****" + _echo "**** Test twelve ****" -_app_start - -res1=`testme $1` + _app_start + + res1=`_testme $1` -_jcmd ManagementAgent.start_local + _jcmd ManagementAgent.start_local -pid=`_get_pid` -if [ "x${pid}" = "x" ] -then - res2="NO_CONN" -else - res2=`testme local ${pid}` -fi + pid=`_get_pid` + if [ "x${pid}" = "x" ] + then + res2="NO_CONN" + else + res2=`_testme local ${pid}` + fi -if [ "${res1}" = "NO_CONN" -a "${res2}" = "OK_CONN" ] -then - _echo "Passed" -else - _echo "Failed r1(NO):${res1} r2(OK):${res2}" - _app_stop "Failed" -fi + if [ "${res1}" = "NO_CONN" -a "${res2}" = "OK_CONN" ] + then + _echo "Passed" + else + _echo "Failed r1(NO):${res1} r2(OK):${res2}" + _exit_on_jtreg + fi -_app_stop + _app_stop } test_13(){ # Run an app with -javaagent make sure it works as expected - system properties are ignored -_echo "**** Test 13 ****" - -AGENT="${TESTJAVA}/jre/lib/management-agent.jar" -if [ ! -f ${AGENT} ] - then - AGENT="${TESTJAVA}/lib/management-agent.jar" -fi + _echo "**** Test thirteen ****" + + AGENT="${TESTJAVA}/jre/lib/management-agent.jar" + if [ ! -f ${AGENT} ] + then + AGENT="${TESTJAVA}/lib/management-agent.jar" + fi -_app_start -javaagent:${AGENT}=com.sun.management.jmxremote.port=$1,com.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false - -res1=`testme $1` + _app_start -javaagent:${AGENT}=com.sun.management.jmxremote.port=$1,com.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false + + res1=`_testme $1` -if [ "${res1}" = "NO_CONN" ] -then - _echo "Passed" -else - _echo "Failed r1(NO):${res1}" - _app_stop "Failed" -fi + if [ "${res1}" = "NO_CONN" ] + then + _echo "Passed" + else + _echo "Failed r1(NO):${res1}" + _exit_on_jtreg + fi -_app_stop + _app_stop } - -#============== Server tests ======================= - -server_test_01(){ - - _echo "**** Server test one ****" - - _app_start -Dcom.sun.management.jmxremote.port=$1 \ - -Dcom.sun.management.jmxremote.rmi.port=$2 \ - -Dcom.sun.management.jmxremote.authenticate=false \ - -Dcom.sun.management.jmxremote.ssl=false - -} - - # ============= MAIN ======================================= if [ "x${TESTJAVA}" = "x" ] @@ -542,11 +521,6 @@ then echo "${TESTJAVA}/bin/jcmd" echo "Doesn't exist or not an executable" - - if [ "${_verbose}" != "yes" ] - then - exit - fi fi @@ -556,8 +530,6 @@ for parm in "$@" do case $parm in - --verbose) _verbose=yes ;; - --server) _server=yes ;; --jtreg) _jtreg=yes ;; --no-compile) _compile=no ;; --testsuite=*) _testsuite=`_echo $parm | sed "s,^--.*=\(.*\),\1,"` ;; @@ -584,20 +556,10 @@ rm -f ${_logname} -# Start server mode tests -# All of them require manual cleanup -if [ "x${_server}" = "xyes" ] -then - - server_test_01 ${_port_one} ${_port_two} - -else +# Local mode tests +for i in `echo ${_testsuite} | sed -e "s/,/ /g"` +do + test_${i} ${_port_one} ${_port_two} +done - # Local mode tests - for i in `echo ${_testsuite} | sed -e "s/,/ /g"` - do - test_${i} ${_port_one} ${_port_two} - done -fi -
--- a/jdk/test/sun/management/jmxremote/startstop/REMOTE_TESTING.txt Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/test/sun/management/jmxremote/startstop/REMOTE_TESTING.txt Thu Oct 11 16:59:50 2012 -0700 @@ -2,7 +2,15 @@ 2. Make sure tcp connection between them works 3. run tcpdump -i <interface> host <host2_name> and 'tcp[13] & 2!=0' on host 1 -4. run JMXStartStopTest.sh --server on host2 +4. run + + ${TESTJAVA}/bin/java -server JMXStartStopDoSomething \ + -Dcom.sun.management.jmxremote.port=50234 \ + -Dcom.sun.management.jmxremote.rmi.port=50235 \ + -Dcom.sun.management.jmxremote.authenticate=false \ + -Dcom.sun.management.jmxremote.ssl=false + + on host2 5. run jconsole on host1 6. connect jconsole to host2:50234 Make sure jconsole works
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/security/krb5/auto/UseCacheAndStoreKey.java Thu Oct 11 16:59:50 2012 -0700 @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 7201053 + * @summary Krb5LoginModule shows NPE when both useTicketCache and storeKey + * are set to true + * @compile -XDignore.symbol.file UseCacheAndStoreKey.java + * @run main/othervm UseCacheAndStoreKey + */ + +import java.io.FileOutputStream; +import javax.security.auth.login.LoginException; + +// The basic krb5 test skeleton you can copy from +public class UseCacheAndStoreKey { + + public static void main(String[] args) throws Exception { + + new OneKDC(null).writeJAASConf(); + + // KDC would save ccache for client + System.setProperty("test.kdc.save.ccache", "cache.here"); + try (FileOutputStream fos = new FileOutputStream(OneKDC.JAAS_CONF)) { + fos.write(( + "me {\n" + + " com.sun.security.auth.module.Krb5LoginModule required\n" + + " principal=\"" + OneKDC.USER + "\"\n" + + " useTicketCache=true\n" + + " ticketCache=cache.here\n" + + " isInitiator=true\n" + + " storeKey=true;\n};\n" + ).getBytes()); + } + + // The first login will use default callback and succeed + Context.fromJAAS("me"); + + // The second login uses ccache and won't be able to store the keys + try { + Context.fromJAAS("me"); + throw new Exception("Should fail"); + } catch (LoginException le) { + if (le.getMessage().indexOf("NullPointerException") >= 0 + || le.getCause() instanceof NullPointerException) { + throw new Exception("NPE"); + } + } + } +}
--- a/jdk/test/sun/security/provider/X509Factory/BigCRL.java Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/test/sun/security/provider/X509Factory/BigCRL.java Thu Oct 11 16:59:50 2012 -0700 @@ -25,7 +25,7 @@ * @test * @bug 7099399 * @summary cannot deal with CRL file larger than 16MB - * @run main/othervm -Xmx1024m BigCRL + * @run main/othervm -Xshare:off -Xmx1024m BigCRL */ import java.io.FileInputStream;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/CertRequestOverflow.java Thu Oct 11 16:59:50 2012 -0700 @@ -0,0 +1,402 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +// +// SunJSSE does not support dynamic system properties, no way to re-use +// system properties in samevm/agentvm mode. +// + +/* + * @test + * @bug 7200295 + * @summary CertificateRequest message is wrapping when using large + * numbers of Certs + * @run main/othervm CertRequestOverflow + */ + +import java.io.*; +import java.net.*; +import java.util.*; +import javax.net.ssl.*; +import java.security.cert.*; +import java.security.*; + +public class CertRequestOverflow { + + /* + * ============================================================= + * Set the various variables needed for the tests, then + * specify what tests to run on each side. + */ + + /* + * Should we run the client or server in a separate thread? + * Both sides can throw exceptions, but do you have a preference + * as to which side should be the main thread. + */ + static boolean separateServerThread = false; + + /* + * Where do we find the keystores? + */ + static String pathToStores = "../../../../../../../etc"; + static String keyStoreFile = "keystore"; + static String trustStoreFile = "truststore"; + static String passwd = "passphrase"; + private final static char[] cpasswd = "passphrase".toCharArray(); + + /* + * Is the server ready to serve? + */ + volatile static boolean serverReady = false; + + /* + * Turn on SSL debugging? + */ + static boolean debug = false; + + /* + * If the client or server is doing some kind of object creation + * that the other side depends on, and that thread prematurely + * exits, you may experience a hang. The test harness will + * terminate all hung threads after its timeout has expired, + * currently 3 minutes by default, but you might try to be + * smart about it.... + */ + + /* + * Define the server side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doServerSide() throws Exception { + SSLServerSocketFactory sslssf = + getContext(true).getServerSocketFactory(); + SSLServerSocket sslServerSocket = + (SSLServerSocket) sslssf.createServerSocket(serverPort); + serverPort = sslServerSocket.getLocalPort(); + + // enable endpoint identification + // ignore, we may test the feature when known how to parse client + // hostname + //SSLParameters params = sslServerSocket.getSSLParameters(); + //params.setEndpointIdentificationAlgorithm("HTTPS"); + //sslServerSocket.setSSLParameters(params); + + /* + * Signal Client, we're ready for his connect. + */ + serverReady = true; + + SSLSocket sslSocket = (SSLSocket) sslServerSocket.accept(); + sslSocket.setNeedClientAuth(true); + InputStream sslIS = sslSocket.getInputStream(); + OutputStream sslOS = sslSocket.getOutputStream(); + + try { + sslIS.read(); + sslOS.write(85); + sslOS.flush(); + + throw new Exception("SERVER TEST FAILED! " + + "It is expected to fail with field length overflow"); + } catch (SSLException ssle) { + Throwable cause = ssle.getCause(); + if (!(cause instanceof RuntimeException)) { + System.out.println("We are expecting a RuntimeException!"); + throw ssle; + } + System.out.println("The expected exception! " + ssle); + } finally { + sslSocket.close(); + } + + System.out.println("SERVER TEST PASSED!"); + } + + /* + * Define the client side of the test. + * + * If the server prematurely exits, serverReady will be set to true + * to avoid infinite hangs. + */ + void doClientSide() throws Exception { + + /* + * Wait for server to get started. + */ + while (!serverReady) { + Thread.sleep(50); + } + + SSLSocketFactory sslsf = getContext(false).getSocketFactory(); + SSLSocket sslSocket = (SSLSocket) + sslsf.createSocket("localhost", serverPort); + + // enable endpoint identification + SSLParameters params = sslSocket.getSSLParameters(); + params.setEndpointIdentificationAlgorithm("HTTPS"); + sslSocket.setSSLParameters(params); + + InputStream sslIS = sslSocket.getInputStream(); + OutputStream sslOS = sslSocket.getOutputStream(); + + try { + sslOS.write(280); + sslOS.flush(); + sslIS.read(); + } catch (SSLException ssle) { + System.out.println("An expected exception!"); + } finally { + sslSocket.close(); + } + } + + MyExtendedX509TM serverTM; + MyExtendedX509TM clientTM; + + private SSLContext getContext(boolean server) throws Exception { + String keyFilename = + System.getProperty("test.src", "./") + "/" + pathToStores + + "/" + keyStoreFile; + String trustFilename = + System.getProperty("test.src", "./") + "/" + pathToStores + + "/" + trustStoreFile; + + KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509"); + KeyStore ks = KeyStore.getInstance("JKS"); + ks.load(new FileInputStream(keyFilename), cpasswd); + kmf.init(ks, cpasswd); + + TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509"); + KeyStore ts = KeyStore.getInstance("JKS"); + ts.load(new FileInputStream(trustFilename), cpasswd); + tmf.init(ts); + + TrustManager tms[] = tmf.getTrustManagers(); + if (tms == null || tms.length == 0) { + throw new Exception("unexpected trust manager implementation"); + } else { + if (!(tms[0] instanceof X509TrustManager)) { + throw new Exception("unexpected trust manager implementation: " + + tms[0].getClass().getCanonicalName()); + } + } + + if (server) { + serverTM = new MyExtendedX509TM((X509TrustManager)tms[0]); + + tms = new TrustManager[] {serverTM}; + } else { + clientTM = new MyExtendedX509TM((X509TrustManager)tms[0]); + + tms = new TrustManager[] {clientTM}; + } + + SSLContext ctx = SSLContext.getInstance("TLS"); + ctx.init(kmf.getKeyManagers(), tms, null); + + return ctx; + } + + static class MyExtendedX509TM extends X509ExtendedTrustManager + implements X509TrustManager { + + X509TrustManager tm; + + boolean clientChecked; + boolean serverChecked; + + MyExtendedX509TM(X509TrustManager tm) { + clientChecked = false; + serverChecked = false; + + this.tm = tm; + } + + public boolean wasClientChecked() { + return clientChecked; + } + + public boolean wasServerChecked() { + return serverChecked; + } + + + public void checkClientTrusted(X509Certificate chain[], String authType) + throws CertificateException { + tm.checkClientTrusted(chain, authType); + } + + public void checkServerTrusted(X509Certificate chain[], String authType) + throws CertificateException { + tm.checkServerTrusted(chain, authType); + } + + public X509Certificate[] getAcceptedIssuers() { + // (hack code) increase the size of the returned array to make a + // overflow CertificateRequest. + List<X509Certificate> issuersList = new LinkedList<>(); + X509Certificate[] issuers = tm.getAcceptedIssuers(); + for (int i = 0; i < 800; i += issuers.length) { + for (X509Certificate issuer : issuers) { + issuersList.add(issuer); + } + } + + return issuersList.toArray(issuers); + } + + public void checkClientTrusted(X509Certificate[] chain, String authType, + Socket socket) throws CertificateException { + clientChecked = true; + tm.checkClientTrusted(chain, authType); + } + + public void checkServerTrusted(X509Certificate[] chain, String authType, + Socket socket) throws CertificateException { + serverChecked = true; + tm.checkServerTrusted(chain, authType); + } + + public void checkClientTrusted(X509Certificate[] chain, String authType, + SSLEngine engine) throws CertificateException { + clientChecked = true; + tm.checkClientTrusted(chain, authType); + } + + public void checkServerTrusted(X509Certificate[] chain, String authType, + SSLEngine engine) throws CertificateException { + serverChecked = true; + tm.checkServerTrusted(chain, authType); + } + } + + /* + * ============================================================= + * The remainder is just support stuff + */ + + // use any free port by default + volatile int serverPort = 0; + + volatile Exception serverException = null; + volatile Exception clientException = null; + + public static void main(String[] args) throws Exception { + + if (debug) + System.setProperty("javax.net.debug", "all"); + + /* + * Start the tests. + */ + new CertRequestOverflow(); + } + + Thread clientThread = null; + Thread serverThread = null; + + /* + * Primary constructor, used to drive remainder of the test. + * + * Fork off the other side, then do your work. + */ + CertRequestOverflow() throws Exception { + if (separateServerThread) { + startServer(true); + startClient(false); + } else { + startClient(true); + startServer(false); + } + + /* + * Wait for other side to close down. + */ + if (separateServerThread) { + serverThread.join(); + } else { + clientThread.join(); + } + + /* + * When we get here, the test is pretty much over. + * + * If the main thread excepted, that propagates back + * immediately. If the other thread threw an exception, we + * should report back. + */ + if (serverException != null) + throw serverException; + if (clientException != null) + throw clientException; + } + + void startServer(boolean newThread) throws Exception { + if (newThread) { + serverThread = new Thread() { + public void run() { + try { + doServerSide(); + } catch (Exception e) { + /* + * Our server thread just died. + * + * Release the client, if not active already... + */ + System.err.println("Server died..."); + serverReady = true; + serverException = e; + } + } + }; + serverThread.start(); + } else { + doServerSide(); + } + } + + void startClient(boolean newThread) throws Exception { + if (newThread) { + clientThread = new Thread() { + public void run() { + try { + doClientSide(); + } catch (Exception e) { + /* + * Our client thread just died. + */ + System.err.println("Client died..."); + clientException = e; + } + } + }; + clientThread.start(); + } else { + doClientSide(); + } + } +} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/security/tools/keytool/ListKeychainStore.sh Thu Oct 11 16:59:50 2012 -0700 @@ -0,0 +1,142 @@ +# +# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +# @test +# @bug 7133495 +# @summary [macosx] KeyChain KeyStore implementation retrieves only one private key entry + +if [ "${TESTJAVA}" = "" ] ; then + JAVAC_CMD=`which javac` + TESTJAVA=`dirname $JAVAC_CMD`/.. +fi + +if [ "${TESTCLASSES}" = "" ] ; then + TESTCLASSES=`pwd` +fi + +# Only run on MacOS +OS=`uname -s` +case "$OS" in + Darwin ) + ;; + * ) + echo "Will not run test on: ${OS}" + exit 0; + ;; +esac + +PWD="xxxxxx" +KEYTOOL="${TESTJAVA}/bin/keytool -storetype KeychainStore -keystore NONE -storepass $PWD" +TEMPORARY_P12="$TESTCLASSES/7133495.p12" +TEMPORARY_KC="$TESTCLASSES/7133495.keychain" +CLEANUP_P12="rm -f $TEMPORARY_P12" +CLEANUP_KC="security delete-keychain $TEMPORARY_KC" + +# Count the number of private key entries in the Keychain keystores + +COUNT=`$KEYTOOL -list | grep PrivateKeyEntry | wc -l` +echo "Found $COUNT private key entries in the Keychain keystores" + +if [ $COUNT -gt 1 ]; then + exit 0 +fi + +# Create a temporary PKCS12 keystore containing 3 public/private keypairs + +RESULT=`$CLEANUP_P12` + +for i in X Y Z +do + ${TESTJAVA}/bin/keytool -genkeypair \ + -storetype PKCS12 \ + -keystore $TEMPORARY_P12 \ + -storepass $PWD \ + -dname "CN=$i,OU=$i,O=$i,ST=$i,C=US" \ + -alias 7133495-$i + + if [ $? -ne 0 ]; then + echo "Error: cannot create keypair $i in the temporary PKCS12 keystore" + RESULT=`$CLEANUP_P12` + exit 1 + fi +done +echo "Created a temporary PKCS12 keystore: $TEMPORARY_P12" + +# Create a temporary keychain + +security create-keychain -p $PWD $TEMPORARY_KC +if [ $? -ne 0 ]; then + echo "Error: cannot create the temporary keychain" + RESULT=`$CLEANUP_P12` + exit 2 +fi +echo "Created a temporary keychain: $TEMPORARY_KC" + +# Unlock the temporary keychain + +security unlock-keychain -p $PWD $TEMPORARY_KC +if [ $? -ne 0 ]; then + echo "Error: cannot unlock the temporary keychain" + RESULT=`$CLEANUP_P12` + RESULT=`$CLEANUP_KC` + exit 3 +fi +echo "Unlocked the temporary keychain" + +# Import the keypairs from the PKCS12 keystore into the keychain + +security import $TEMPORARY_P12 -k $TEMPORARY_KC -f pkcs12 -P $PWD +if [ $? -ne 0 ]; then + echo "Error: cannot import keypairs from PKCS12 keystore into the keychain" + RESULT=`$CLEANUP_P12` + RESULT=`$CLEANUP_KC` + exit 4 +fi +echo "Imported keypairs from PKCS12 keystore into the keychain" + +# Recount the number of private key entries in the Keychain keystores + +COUNT=`$KEYTOOL -list | grep PrivateKeyEntry | wc -l` +echo "Found $COUNT private key entries in the Keychain keystore" +if [ $COUNT -lt 3 ]; then + echo "Error: expected >2 private key entries in the Keychain keystores" + RESULT=`$CLEANUP_P12` + RESULT=`$CLEANUP_KC` + exit 5 +fi + +RESULT=`$CLEANUP_P12` +if [ $? -ne 0 ]; then + echo "Error: cannot remove the temporary PKCS12 keystore" + exit 6 +fi +echo "Removed the temporary PKCS12 keystore" + +RESULT=`$CLEANUP_KC` +if [ $? -ne 0 ]; then + echo "Error: cannot remove the temporary keychain" + exit 7 +fi +echo "Removed the temporary keychain" + +exit 0
--- a/jdk/test/sun/security/tools/keytool/autotest.sh Thu Oct 11 09:50:14 2012 -0700 +++ b/jdk/test/sun/security/tools/keytool/autotest.sh Thu Oct 11 16:59:50 2012 -0700 @@ -58,24 +58,18 @@ LIBNAME="/usr/lib/mps/libsoftokn3.so" ;; Linux ) - ARCH=`uname -m` FS="/" - case "$ARCH" in - i[3-6]86 ) + ${TESTJAVA}${FS}bin${FS}java -XshowSettings:properties -version 2> allprop + cat allprop | grep os.arch | grep 64 + if [ "$?" != "0" ]; then LIBNAME=`find_one \ "/usr/lib/libsoftokn3.so" \ "/usr/lib/i386-linux-gnu/nss/libsoftokn3.so"` - ;; - x86_64 ) + else LIBNAME=`find_one \ "/usr/lib64/libsoftokn3.so" \ "/usr/lib/x86_64-linux-gnu/nss/libsoftokn3.so"` - ;; - * ) - echo "Will not run test on: Linux ${ARCH}" - exit 0; - ;; - esac + fi ;; * ) echo "Will not run test on: ${OS}"