Skip to content

Instantly share code, notes, and snippets.

@tmyt
Created April 20, 2019 11:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tmyt/fc1d289c78eb6f63ed9caeba953bd894 to your computer and use it in GitHub Desktop.
Save tmyt/fc1d289c78eb6f63ed9caeba953bd894 to your computer and use it in GitHub Desktop.
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