Created
April 20, 2019 11:39
-
-
Save tmyt/fc1d289c78eb6f63ed9caeba953bd894 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System.Runtime.InteropServices; | |
using System.Text; | |
/* | |
* C#からWindows 10 16299以降で利用できるicuuc.dllを呼び出す定義 | |
*/ | |
namespace icusample.Interop | |
{ | |
using UBreakIterator = System.IntPtr; | |
using UText = System.IntPtr; | |
public class Icuuc | |
{ | |
public const int U_MAX_VERSION_LENGTH = 4; | |
public const int UBRK_DONE = -1; | |
[DllImport("icuuc.dll")] | |
public static extern void u_getVersion( | |
[MarshalAs(UnmanagedType.LPArray, SizeConst = U_MAX_VERSION_LENGTH)] | |
byte[] versionArray); | |
[DllImport("icuuc.dll")] | |
public static extern void u_versionToString([MarshalAs(UnmanagedType.LPArray, SizeConst = U_MAX_VERSION_LENGTH)] | |
byte[] versionArray, | |
[MarshalAs(UnmanagedType.LPStr), Out] | |
StringBuilder versionString); | |
[DllImport("icuuc.dll")] | |
[return: MarshalAs(UnmanagedType.LPStr)] | |
public static extern string uloc_getDefault(); | |
[DllImport("icuuc.dll")] | |
public static extern UBreakIterator ubrk_open(UBreakIteratorType type, | |
[MarshalAs(UnmanagedType.LPStr)] | |
string locale, | |
[MarshalAs(UnmanagedType.LPWStr)] | |
string text, int length, out UErrorCode status); | |
[DllImport("icuuc.dll")] | |
public static extern UText utext_openUChars(UText ut, | |
[MarshalAs(UnmanagedType.LPWStr)] | |
string s, long length, out UErrorCode status); | |
[DllImport("icuuc.dll")] | |
public static extern UText utext_close(UText ut); | |
[DllImport("icuuc.dll")] | |
public static extern void ubrk_setUText(UBreakIterator bi, UText text, out UErrorCode status); | |
[DllImport("icuuc.dll")] | |
public static extern int ubrk_current(UBreakIterator bi); | |
[DllImport("icuuc.dll")] | |
public static extern int ubrk_next(UBreakIterator bi); | |
[DllImport("icuuc.dll")] | |
public static extern void ubrk_close(UBreakIterator bi); | |
public static byte[] u_getVersion() | |
{ | |
var version = new byte[U_MAX_VERSION_LENGTH]; | |
u_getVersion(version); | |
return version; | |
} | |
public static string u_versionToString(byte[] version) | |
{ | |
var sb = new StringBuilder(256); | |
u_versionToString(version, sb); | |
return sb.ToString(); | |
} | |
} | |
public enum UBreakIteratorType : int | |
{ | |
UBRK_CHARACTER = 0, UBRK_WORD = 1, UBRK_LINE = 2, UBRK_SENTENCE = 3, | |
UBRK_TITLE = 4, UBRK_COUNT = 5 | |
} | |
public enum UErrorCode : int | |
{ | |
U_USING_FALLBACK_WARNING = -128, U_ERROR_WARNING_START = -128, U_USING_DEFAULT_WARNING = -127, U_SAFECLONE_ALLOCATED_WARNING = -126, | |
U_STATE_OLD_WARNING = -125, U_STRING_NOT_TERMINATED_WARNING = -124, U_SORT_KEY_TOO_SHORT_WARNING = -123, U_AMBIGUOUS_ALIAS_WARNING = -122, | |
U_DIFFERENT_UCA_VERSION = -121, U_PLUGIN_CHANGED_LEVEL_WARNING = -120, U_ERROR_WARNING_LIMIT, U_ZERO_ERROR = 0, | |
U_ILLEGAL_ARGUMENT_ERROR = 1, U_MISSING_RESOURCE_ERROR = 2, U_INVALID_FORMAT_ERROR = 3, U_FILE_ACCESS_ERROR = 4, | |
U_INTERNAL_PROGRAM_ERROR = 5, U_MESSAGE_PARSE_ERROR = 6, U_MEMORY_ALLOCATION_ERROR = 7, U_INDEX_OUTOFBOUNDS_ERROR = 8, | |
U_PARSE_ERROR = 9, U_INVALID_CHAR_FOUND = 10, U_TRUNCATED_CHAR_FOUND = 11, U_ILLEGAL_CHAR_FOUND = 12, | |
U_INVALID_TABLE_FORMAT = 13, U_INVALID_TABLE_FILE = 14, U_BUFFER_OVERFLOW_ERROR = 15, U_UNSUPPORTED_ERROR = 16, | |
U_RESOURCE_TYPE_MISMATCH = 17, U_ILLEGAL_ESCAPE_SEQUENCE = 18, U_UNSUPPORTED_ESCAPE_SEQUENCE = 19, U_NO_SPACE_AVAILABLE = 20, | |
U_CE_NOT_FOUND_ERROR = 21, U_PRIMARY_TOO_LONG_ERROR = 22, U_STATE_TOO_OLD_ERROR = 23, U_TOO_MANY_ALIASES_ERROR = 24, | |
U_ENUM_OUT_OF_SYNC_ERROR = 25, U_INVARIANT_CONVERSION_ERROR = 26, U_INVALID_STATE_ERROR = 27, U_COLLATOR_VERSION_MISMATCH = 28, | |
U_USELESS_COLLATOR_ERROR = 29, U_NO_WRITE_PERMISSION = 30, U_STANDARD_ERROR_LIMIT, U_BAD_VARIABLE_DEFINITION = 0x10000, | |
U_PARSE_ERROR_START = 0x10000, U_MALFORMED_RULE, U_MALFORMED_SET, U_MALFORMED_SYMBOL_REFERENCE, | |
U_MALFORMED_UNICODE_ESCAPE, U_MALFORMED_VARIABLE_DEFINITION, U_MALFORMED_VARIABLE_REFERENCE, U_MISMATCHED_SEGMENT_DELIMITERS, | |
U_MISPLACED_ANCHOR_START, U_MISPLACED_CURSOR_OFFSET, U_MISPLACED_QUANTIFIER, U_MISSING_OPERATOR, | |
U_MISSING_SEGMENT_CLOSE, U_MULTIPLE_ANTE_CONTEXTS, U_MULTIPLE_CURSORS, U_MULTIPLE_POST_CONTEXTS, | |
U_TRAILING_BACKSLASH, U_UNDEFINED_SEGMENT_REFERENCE, U_UNDEFINED_VARIABLE, U_UNQUOTED_SPECIAL, | |
U_UNTERMINATED_QUOTE, U_RULE_MASK_ERROR, U_MISPLACED_COMPOUND_FILTER, U_MULTIPLE_COMPOUND_FILTERS, | |
U_INVALID_RBT_SYNTAX, U_INVALID_PROPERTY_PATTERN, U_MALFORMED_PRAGMA, U_UNCLOSED_SEGMENT, | |
U_ILLEGAL_CHAR_IN_SEGMENT, U_VARIABLE_RANGE_EXHAUSTED, U_VARIABLE_RANGE_OVERLAP, U_ILLEGAL_CHARACTER, | |
U_INTERNAL_TRANSLITERATOR_ERROR, U_INVALID_ID, U_INVALID_FUNCTION, U_PARSE_ERROR_LIMIT, | |
U_UNEXPECTED_TOKEN = 0x10100, U_FMT_PARSE_ERROR_START = 0x10100, U_MULTIPLE_DECIMAL_SEPARATORS, U_MULTIPLE_DECIMAL_SEPERATORS = U_MULTIPLE_DECIMAL_SEPARATORS, | |
U_MULTIPLE_EXPONENTIAL_SYMBOLS, U_MALFORMED_EXPONENTIAL_PATTERN, U_MULTIPLE_PERCENT_SYMBOLS, U_MULTIPLE_PERMILL_SYMBOLS, | |
U_MULTIPLE_PAD_SPECIFIERS, U_PATTERN_SYNTAX_ERROR, U_ILLEGAL_PAD_POSITION, U_UNMATCHED_BRACES, | |
U_UNSUPPORTED_PROPERTY, U_UNSUPPORTED_ATTRIBUTE, U_ARGUMENT_TYPE_MISMATCH, U_DUPLICATE_KEYWORD, | |
U_UNDEFINED_KEYWORD, U_DEFAULT_KEYWORD_MISSING, U_FMT_PARSE_ERROR_LIMIT, U_BRK_INTERNAL_ERROR = 0x10200, | |
U_BRK_ERROR_START = 0x10200, U_BRK_HEX_DIGITS_EXPECTED, U_BRK_SEMICOLON_EXPECTED, U_BRK_RULE_SYNTAX, | |
U_BRK_UNCLOSED_SET, U_BRK_ASSIGN_ERROR, U_BRK_VARIABLE_REDFINITION, U_BRK_MISMATCHED_PAREN, | |
U_BRK_NEW_LINE_IN_QUOTED_STRING, U_BRK_UNDEFINED_VARIABLE, U_BRK_INIT_ERROR, U_BRK_RULE_EMPTY_SET, | |
U_BRK_UNRECOGNIZED_OPTION, U_BRK_MALFORMED_RULE_TAG, U_BRK_ERROR_LIMIT, U_REGEX_INTERNAL_ERROR = 0x10300, | |
U_REGEX_ERROR_START = 0x10300, U_REGEX_RULE_SYNTAX, U_REGEX_INVALID_STATE, U_REGEX_BAD_ESCAPE_SEQUENCE, | |
U_REGEX_PROPERTY_SYNTAX, U_REGEX_UNIMPLEMENTED, U_REGEX_MISMATCHED_PAREN, U_REGEX_NUMBER_TOO_BIG, | |
U_REGEX_BAD_INTERVAL, U_REGEX_MAX_LT_MIN, U_REGEX_INVALID_BACK_REF, U_REGEX_INVALID_FLAG, | |
U_REGEX_LOOK_BEHIND_LIMIT, U_REGEX_SET_CONTAINS_STRING, U_REGEX_OCTAL_TOO_BIG, U_REGEX_MISSING_CLOSE_BRACKET, | |
U_REGEX_INVALID_RANGE, U_REGEX_STACK_OVERFLOW, U_REGEX_TIME_OUT, U_REGEX_STOPPED_BY_CALLER, | |
U_REGEX_ERROR_LIMIT, U_IDNA_PROHIBITED_ERROR = 0x10400, U_IDNA_ERROR_START = 0x10400, U_IDNA_UNASSIGNED_ERROR, | |
U_IDNA_CHECK_BIDI_ERROR, U_IDNA_STD3_ASCII_RULES_ERROR, U_IDNA_ACE_PREFIX_ERROR, U_IDNA_VERIFICATION_ERROR, | |
U_IDNA_LABEL_TOO_LONG_ERROR, U_IDNA_ZERO_LENGTH_LABEL_ERROR, U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR, U_IDNA_ERROR_LIMIT, | |
U_STRINGPREP_PROHIBITED_ERROR = U_IDNA_PROHIBITED_ERROR, U_STRINGPREP_UNASSIGNED_ERROR = U_IDNA_UNASSIGNED_ERROR, U_STRINGPREP_CHECK_BIDI_ERROR = U_IDNA_CHECK_BIDI_ERROR, U_PLUGIN_ERROR_START = 0x10500, | |
U_PLUGIN_TOO_HIGH = 0x10500, U_PLUGIN_DIDNT_SET_LEVEL, U_PLUGIN_ERROR_LIMIT, U_ERROR_LIMIT = U_PLUGIN_ERROR_LIMIT | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment