Index: /applications/editors/josm/plugins/jna/.settings/org.eclipse.jdt.ui.prefs
===================================================================
--- /applications/editors/josm/plugins/jna/.settings/org.eclipse.jdt.ui.prefs	(revision 35659)
+++ /applications/editors/josm/plugins/jna/.settings/org.eclipse.jdt.ui.prefs	(revision 35659)
@@ -0,0 +1,74 @@
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_functional_interfaces=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.convert_to_enhanced_for_loop_if_loop_var_used=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=true
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.lazy_logical_operator=false
+sp_cleanup.make_local_variable_final=true
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.merge_conditional_blocks=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.number_suffix=false
+sp_cleanup.objects_equals=false
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.precompile_regex=false
+sp_cleanup.push_down_negation=false
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_modifiers=false
+sp_cleanup.remove_redundant_semicolons=false
+sp_cleanup.remove_redundant_type_arguments=false
+sp_cleanup.remove_trailing_whitespaces=false
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_array_creation=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=false
+sp_cleanup.remove_unused_imports=false
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.simplify_lambda_expression_and_method_ref=false
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_anonymous_class_creation=false
+sp_cleanup.use_autoboxing=false
+sp_cleanup.use_blocks=false
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_directly_map_method=false
+sp_cleanup.use_lambda=true
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+sp_cleanup.use_unboxing=false
+sp_cleanup.use_var=false
Index: /applications/editors/josm/plugins/jna/src/org/openstreetmap/josm/plugins/jna/JNAPlugin.java
===================================================================
--- /applications/editors/josm/plugins/jna/src/org/openstreetmap/josm/plugins/jna/JNAPlugin.java	(revision 35658)
+++ /applications/editors/josm/plugins/jna/src/org/openstreetmap/josm/plugins/jna/JNAPlugin.java	(revision 35659)
@@ -4,4 +4,7 @@
 import org.openstreetmap.josm.plugins.Plugin;
 import org.openstreetmap.josm.plugins.PluginInformation;
+import org.openstreetmap.josm.plugins.jna.mac.JosmMacNativeLogHandler;
+import org.openstreetmap.josm.tools.Logging;
+import org.openstreetmap.josm.tools.PlatformManager;
 
 /**
@@ -15,4 +18,7 @@
     public JNAPlugin(PluginInformation info) {
         super(info);
+        if (PlatformManager.isPlatformOsx()) {
+            Logging.getLogger().addHandler(new JosmMacNativeLogHandler());
+        }
     }
 }
Index: /applications/editors/josm/plugins/jna/src/org/openstreetmap/josm/plugins/jna/JosmNativeLogHandler.java
===================================================================
--- /applications/editors/josm/plugins/jna/src/org/openstreetmap/josm/plugins/jna/JosmNativeLogHandler.java	(revision 35659)
+++ /applications/editors/josm/plugins/jna/src/org/openstreetmap/josm/plugins/jna/JosmNativeLogHandler.java	(revision 35659)
@@ -0,0 +1,54 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.plugins.jna;
+
+import java.util.logging.Handler;
+import java.util.logging.Level;
+import java.util.logging.LogRecord;
+import java.util.logging.SimpleFormatter;
+
+import org.openstreetmap.josm.data.preferences.BooleanProperty;
+import org.openstreetmap.josm.tools.Logging;
+
+/**
+ * Customized log handler that redirects JOSM logs to native log system.
+ */
+public abstract class JosmNativeLogHandler extends Handler {
+
+    protected JosmNativeLogHandler() {
+        setFormatter(new SimpleFormatter());
+    }
+
+    // CHECKSTYLE.OFF: SingleSpaceSeparator
+
+    private static final BooleanProperty PROP_ERROR = new BooleanProperty("native.log.redirect.error", Boolean.TRUE);
+    private static final BooleanProperty PROP_WARN  = new BooleanProperty("native.log.redirect.warn",  Boolean.TRUE);
+    private static final BooleanProperty PROP_INFO  = new BooleanProperty("native.log.redirect.info",  Boolean.FALSE);
+    private static final BooleanProperty PROP_DEBUG = new BooleanProperty("native.log.redirect.debug", Boolean.FALSE);
+    private static final BooleanProperty PROP_TRACE = new BooleanProperty("native.log.redirect.trace", Boolean.FALSE);
+
+    @Override
+    public final boolean isLoggable(LogRecord record) {
+        return record != null && 
+                  (isLoggable(record, Logging.LEVEL_ERROR, PROP_ERROR)
+                || isLoggable(record, Logging.LEVEL_WARN,  PROP_WARN)
+                || isLoggable(record, Logging.LEVEL_INFO,  PROP_INFO)
+                || isLoggable(record, Logging.LEVEL_DEBUG, PROP_DEBUG)
+                || isLoggable(record, Logging.LEVEL_TRACE, PROP_TRACE));
+    }
+
+    private static boolean isLoggable(LogRecord record, Level level, BooleanProperty prop) {
+        return level.equals(record.getLevel()) && prop.isSet();
+    }
+
+    // CHECKSTYLE.ON: SingleSpaceSeparator
+
+    @Override
+    public final void flush() {
+        // Do nothing
+    }
+
+    @Override
+    public final void close() {
+        // Do nothing
+    }
+}
Index: /applications/editors/josm/plugins/jna/src/org/openstreetmap/josm/plugins/jna/mac/Foundation.java
===================================================================
--- /applications/editors/josm/plugins/jna/src/org/openstreetmap/josm/plugins/jna/mac/Foundation.java	(revision 35659)
+++ /applications/editors/josm/plugins/jna/src/org/openstreetmap/josm/plugins/jna/mac/Foundation.java	(revision 35659)
@@ -0,0 +1,70 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.plugins.jna.mac;
+
+import java.nio.charset.StandardCharsets;
+
+import com.sun.jna.Native; // NOSONAR
+
+/**
+ * The core of Rococoa - statics to handle selectors and messaging at a function call level.
+ *
+ * Marshalling of Java types to C types is handled by JNA. Marshalling of Java
+ * type to Objective-C types is handled by RococoaTypeMapper.
+ *
+ * Not to be confused with the Mac Foundation or Core Foundation frameworks, most
+ * users shouldn't need to access this class directly.
+ *
+ * Adapted from https://github.com/iterate-ch/rococoa/
+ */
+abstract class Foundation {
+
+    private static final FoundationLibrary foundationLibrary;
+
+    static {
+        foundationLibrary = Native.load("Foundation", FoundationLibrary.class);
+    }
+
+    private Foundation() {
+        // Hide public constructor
+    }
+
+    /**
+     * Logs an error message to the Apple System Log facility.
+     * @param format format string.
+     *   The format specification allowed by these functions is that which is understood by NSStrings formatting capabilities
+     *   (which is not necessarily the set of format escapes and flags understood by printf).
+     *   The supported format specifiers are described in
+     *   <a href="https://developer.apple.com/library/archive/documentation/CoreFoundation/Conceptual/CFStrings/formatSpecifiers.html">
+     *   String Format Specifiers</a>.
+     *   A final hard return is added to the error message if one is not present in the format.
+     * @param args arguments to be inserted into the string
+     */
+    public static void nsLog(String format, Object args) {
+        ID formatAsCFString = cfString(format);
+        try {
+            foundationLibrary.NSLog(formatAsCFString, args);
+        } finally {
+            cfRelease(formatAsCFString);
+        }
+    }
+
+    /**
+     * Return a CFString as an ID, toll-free bridged to NSString.
+     *
+     * Note that the returned string must be freed with {@link #cfRelease(ID)}.
+     */
+    static ID cfString(String s) {
+        // Use a byte[] rather than letting jna do the String -> char* marshalling itself.
+        // Turns out about 10% quicker for long strings.
+        byte[] utf16Bytes = s.getBytes(StandardCharsets.UTF_16LE);
+        return foundationLibrary.CFStringCreateWithBytes(null, utf16Bytes, utf16Bytes.length,
+                StringEncoding.kCFStringEncodingUTF16LE.value, (byte) 0);
+    }
+
+    /**
+     * Release the NSObject with id
+     */
+    static void cfRelease(ID id) {
+        foundationLibrary.CFRelease(id);
+    }
+}
Index: /applications/editors/josm/plugins/jna/src/org/openstreetmap/josm/plugins/jna/mac/FoundationLibrary.java
===================================================================
--- /applications/editors/josm/plugins/jna/src/org/openstreetmap/josm/plugins/jna/mac/FoundationLibrary.java	(revision 35659)
+++ /applications/editors/josm/plugins/jna/src/org/openstreetmap/josm/plugins/jna/mac/FoundationLibrary.java	(revision 35659)
@@ -0,0 +1,18 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.plugins.jna.mac;
+
+import com.sun.jna.Library; // NOSONAR
+
+/**
+ * JNA Library for plain C calls, standard JNA marshalling applies to these.
+ *
+ * Adapted from https://github.com/iterate-ch/rococoa/
+ */
+interface FoundationLibrary extends Library {
+
+    void NSLog(ID pString, Object thing);
+
+    ID CFStringCreateWithBytes(ID allocator, byte[] bytes, int byteCount, int encoding, byte isExternalRepresentation);
+
+    void CFRelease(ID cfTypeRef);
+}
Index: /applications/editors/josm/plugins/jna/src/org/openstreetmap/josm/plugins/jna/mac/ID.java
===================================================================
--- /applications/editors/josm/plugins/jna/src/org/openstreetmap/josm/plugins/jna/mac/ID.java	(revision 35659)
+++ /applications/editors/josm/plugins/jna/src/org/openstreetmap/josm/plugins/jna/mac/ID.java	(revision 35659)
@@ -0,0 +1,48 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.plugins.jna.mac;
+
+import com.sun.jna.Native; // NOSONAR
+import com.sun.jna.NativeLibrary; // NOSONAR
+import com.sun.jna.NativeLong; // NOSONAR
+
+/**
+ * Represents an Objective-C ID.
+ * 
+ * This extends NativeLong for efficiency, but you should really think of it as opaque.
+ * 
+ * Technically, this should be {@link Native#POINTER_SIZE} not {@link Native#LONG_SIZE},
+ * but as they are both 32 on 32-bit and 64 on 64-bit we'll gloss over that. Ideally
+ * it would be Pointer, but they have no protected constructors.
+ *
+ * Adapted from https://github.com/iterate-ch/rococoa/
+ */
+class ID extends NativeLong {
+
+    private static final long serialVersionUID = 1L;
+
+    public static ID fromLong(long value) {
+        return new ID(value);
+    }
+
+    protected ID(long value) {
+        super(value);
+    }
+
+    protected ID(ID anotherID) {
+        this(anotherID.longValue());
+    }
+
+    @Override
+    public String toString() {
+        return String.format("[ID 0x%x]", longValue());
+    }
+
+    public boolean isNull() {
+        return longValue() == 0;
+    }
+
+    public static ID getGlobal(String libraryName, String globalVarName) {
+        return new ID(NativeLibrary.getInstance(libraryName).getGlobalVariableAddress(globalVarName).getNativeLong(0)
+                .longValue());
+    }
+}
Index: /applications/editors/josm/plugins/jna/src/org/openstreetmap/josm/plugins/jna/mac/JosmMacNativeLogHandler.java
===================================================================
--- /applications/editors/josm/plugins/jna/src/org/openstreetmap/josm/plugins/jna/mac/JosmMacNativeLogHandler.java	(revision 35659)
+++ /applications/editors/josm/plugins/jna/src/org/openstreetmap/josm/plugins/jna/mac/JosmMacNativeLogHandler.java	(revision 35659)
@@ -0,0 +1,19 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.plugins.jna.mac;
+
+import java.util.logging.LogRecord;
+
+import org.openstreetmap.josm.plugins.jna.JosmNativeLogHandler;
+
+/**
+ * Customized log handler that redirects JOSM logs to macOS native log system.
+ */
+public class JosmMacNativeLogHandler extends JosmNativeLogHandler {
+
+    @Override
+    public void publish(LogRecord record) {
+        if (isLoggable(record)) {
+            Foundation.nsLog(getFormatter().format(record), null);
+        }
+    }
+}
Index: /applications/editors/josm/plugins/jna/src/org/openstreetmap/josm/plugins/jna/mac/StringEncoding.java
===================================================================
--- /applications/editors/josm/plugins/jna/src/org/openstreetmap/josm/plugins/jna/mac/StringEncoding.java	(revision 35659)
+++ /applications/editors/josm/plugins/jna/src/org/openstreetmap/josm/plugins/jna/mac/StringEncoding.java	(revision 35659)
@@ -0,0 +1,158 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.plugins.jna.mac;
+
+/**
+ * macOS String encoding values.
+ */
+enum StringEncoding {
+
+    // This set is CFStringBuiltInEncodings 
+    kCFStringEncodingMacRoman(0),
+    kCFStringEncodingWindowsLatin1(0x0500), /* ANSI codepage 1252 */
+    kCFStringEncodingISOLatin1(0x0201), /* ISO 8859-1 */
+    kCFStringEncodingNextStepLatin(0x0B01), /* NextStep encoding*/
+    kCFStringEncodingASCII(0x0600), /* 0..127 (in creating CFString, values greater than 0x7F are treated as corresponding Unicode value) */
+    kCFStringEncodingUnicode(0x0100), /* kTextEncodingUnicodeDefault  + kTextEncodingDefaultFormat (aka kUnicode16BitFormat) */
+    kCFStringEncodingUTF8(0x08000100), /* kTextEncodingUnicodeDefault + kUnicodeUTF8Format */
+    kCFStringEncodingNonLossyASCII(0x0BFF), /* 7bit Unicode variants used by Cocoa & Java */
+    kCFStringEncodingUTF16(0x0100), /* kTextEncodingUnicodeDefault + kUnicodeUTF16Format (alias of kCFStringEncodingUnicode) */
+    kCFStringEncodingUTF16BE(0x10000100), /* kTextEncodingUnicodeDefault + kUnicodeUTF16BEFormat */
+    kCFStringEncodingUTF16LE(0x14000100), /* kTextEncodingUnicodeDefault + kUnicodeUTF16LEFormat */
+    kCFStringEncodingUTF32(0x0c000100), /* kTextEncodingUnicodeDefault + kUnicodeUTF32Format */
+    kCFStringEncodingUTF32BE(0x18000100), /* kTextEncodingUnicodeDefault + kUnicodeUTF32BEFormat */
+    kCFStringEncodingUTF32LE(0x1c000100), /* kTextEncodingUnicodeDefault + kUnicodeUTF32LEFormat */
+
+    // Others are from CFStringEncodingExt.h
+    kCFStringEncodingMacJapanese(1),
+    kCFStringEncodingMacChineseTrad(2),
+    kCFStringEncodingMacKorean(3),
+    kCFStringEncodingMacArabic(4),
+    kCFStringEncodingMacHebrew(5),
+    kCFStringEncodingMacGreek(6),
+    kCFStringEncodingMacCyrillic(7),
+    kCFStringEncodingMacDevanagari(9),
+    kCFStringEncodingMacGurmukhi(10),
+    kCFStringEncodingMacGujarati(11),
+    kCFStringEncodingMacOriya(12),
+    kCFStringEncodingMacBengali(13),
+    kCFStringEncodingMacTamil(14),
+    kCFStringEncodingMacTelugu(15),
+    kCFStringEncodingMacKannada(16),
+    kCFStringEncodingMacMalayalam(17),
+    kCFStringEncodingMacSinhalese(18),
+    kCFStringEncodingMacBurmese(19),
+    kCFStringEncodingMacKhmer(20),
+    kCFStringEncodingMacThai(21),
+    kCFStringEncodingMacLaotian(22),
+    kCFStringEncodingMacGeorgian(23),
+    kCFStringEncodingMacArmenian(24),
+    kCFStringEncodingMacChineseSimp(25),
+    kCFStringEncodingMacTibetan(26),
+    kCFStringEncodingMacMongolian(27),
+    kCFStringEncodingMacEthiopic(28),
+    kCFStringEncodingMacCentralEurRoman(29),
+    kCFStringEncodingMacVietnamese(30),
+    kCFStringEncodingMacExtArabic(31),
+    kCFStringEncodingMacSymbol(33),
+    kCFStringEncodingMacDingbats(34),
+    kCFStringEncodingMacTurkish(35),
+    kCFStringEncodingMacCroatian(36),
+    kCFStringEncodingMacIcelandic(37),
+    kCFStringEncodingMacRomanian(38),
+    kCFStringEncodingMacCeltic(39),
+    kCFStringEncodingMacGaelic(40),
+    kCFStringEncodingMacFarsi(0x8C),
+    kCFStringEncodingMacUkrainian(0x98),
+    kCFStringEncodingMacInuit(0xEC),
+    kCFStringEncodingMacVT100(0xFC),
+    kCFStringEncodingMacHFS(0xFF),
+    kCFStringEncodingISOLatin2(0x0202),
+    kCFStringEncodingISOLatin3(0x0203),
+    kCFStringEncodingISOLatin4(0x0204),
+    kCFStringEncodingISOLatinCyrillic(0x0205),
+    kCFStringEncodingISOLatinArabic(0x0206),
+    kCFStringEncodingISOLatinGreek(0x0207),
+    kCFStringEncodingISOLatinHebrew(0x0208),
+    kCFStringEncodingISOLatin5(0x0209),
+    kCFStringEncodingISOLatin6(0x020A),
+    kCFStringEncodingISOLatinThai(0x020B),
+    kCFStringEncodingISOLatin7(0x020D),
+    kCFStringEncodingISOLatin8(0x020E),
+    kCFStringEncodingISOLatin9(0x020F),
+    kCFStringEncodingISOLatin10(0x0210),
+    kCFStringEncodingDOSLatinUS(0x0400),
+    kCFStringEncodingDOSGreek(0x0405),
+    kCFStringEncodingDOSBalticRim(0x0406),
+    kCFStringEncodingDOSLatin1(0x0410),
+    kCFStringEncodingDOSGreek1(0x0411),
+    kCFStringEncodingDOSLatin2(0x0412),
+    kCFStringEncodingDOSCyrillic(0x0413),
+    kCFStringEncodingDOSTurkish(0x0414),
+    kCFStringEncodingDOSPortuguese(0x0415),
+    kCFStringEncodingDOSIcelandic(0x0416),
+    kCFStringEncodingDOSHebrew(0x0417),
+    kCFStringEncodingDOSCanadianFrench(0x0418),
+    kCFStringEncodingDOSArabic(0x0419),
+    kCFStringEncodingDOSNordic(0x041A),
+    kCFStringEncodingDOSRussian(0x041B),
+    kCFStringEncodingDOSGreek2(0x041C),
+    kCFStringEncodingDOSThai(0x041D),
+    kCFStringEncodingDOSJapanese(0x0420),
+    kCFStringEncodingDOSChineseSimplif(0x0421),
+    kCFStringEncodingDOSKorean(0x0422),
+    kCFStringEncodingDOSChineseTrad(0x0423),
+    kCFStringEncodingWindowsLatin2(0x0501),
+    kCFStringEncodingWindowsCyrillic(0x0502),
+    kCFStringEncodingWindowsGreek(0x0503),
+    kCFStringEncodingWindowsLatin5(0x0504),
+    kCFStringEncodingWindowsHebrew(0x0505),
+    kCFStringEncodingWindowsArabic(0x0506),
+    kCFStringEncodingWindowsBalticRim(0x0507),
+    kCFStringEncodingWindowsVietnamese(0x0508),
+    kCFStringEncodingWindowsKoreanJohab(0x0510),
+    kCFStringEncodingANSEL(0x0601),
+    kCFStringEncodingJIS_X0201_76(0x0620),
+    kCFStringEncodingJIS_X0208_83(0x0621),
+    kCFStringEncodingJIS_X0208_90(0x0622),
+    kCFStringEncodingJIS_X0212_90(0x0623),
+    kCFStringEncodingJIS_C6226_78(0x0624),
+    kCFStringEncodingShiftJIS_X0213_00(0x0628),
+    kCFStringEncodingShiftJIS_X0213_MenKuTen(0x0629),
+    kCFStringEncodingGB_2312_80(0x0630),
+    kCFStringEncodingGBK_95(0x0631),
+    kCFStringEncodingGB_18030_2000(0x0632),
+    kCFStringEncodingKSC_5601_87(0x0640),
+    kCFStringEncodingKSC_5601_92_Johab(0x0641),
+    kCFStringEncodingCNS_11643_92_P1(0x0651),
+    kCFStringEncodingCNS_11643_92_P2(0x0652),
+    kCFStringEncodingCNS_11643_92_P3(0x0653),
+    kCFStringEncodingISO_2022_JP(0x0820),
+    kCFStringEncodingISO_2022_JP_2(0x0821),
+    kCFStringEncodingISO_2022_JP_1(0x0822),
+    kCFStringEncodingISO_2022_JP_3(0x0823),
+    kCFStringEncodingISO_2022_CN(0x0830),
+    kCFStringEncodingISO_2022_CN_EXT(0x0831),
+    kCFStringEncodingISO_2022_KR(0x0840),
+    kCFStringEncodingEUC_JP(0x0920),
+    kCFStringEncodingEUC_CN(0x0930),
+    kCFStringEncodingEUC_TW(0x0931),
+    kCFStringEncodingEUC_KR(0x0940),
+    kCFStringEncodingShiftJIS(0x0A01),
+    kCFStringEncodingKOI8_R(0x0A02),
+    kCFStringEncodingBig5(0x0A03),
+    kCFStringEncodingMacRomanLatin1(0x0A04),
+    kCFStringEncodingHZ_GB_2312(0x0A05),
+    kCFStringEncodingBig5_HKSCS_1999(0x0A06),
+    kCFStringEncodingVISCII(0x0A07),
+    kCFStringEncodingKOI8_U(0x0A08),
+    kCFStringEncodingBig5_E(0x0A09),
+    kCFStringEncodingNextStepJapanese(0x0B02),
+    kCFStringEncodingEBCDIC_US(0x0C01),
+    kCFStringEncodingEBCDIC_CP037(0x0C0);
+
+    public final int value;
+
+    StringEncoding(int value) {
+        this.value = value;
+    }
+}
