#!/usr/bin/env lua require 'mbstr' -- mbstr.default_converter = function(str) -- return mbstr.from_utf8(str, {stable = true, compose = true}) -- end mbstr.default_converter = mbstr.from_utf8 composed_fuesse = "f\195\188\195\159e" decomposed_fuesse = "fu\204\136\195\159e" Capital_composed_fuesse = "F\195\188\195\159e" Capital_decomposed_fuesse = "Fu\204\136\195\159e" -- there is no capital "sharp s" (sz ligature), -- it expands to double S CAPITAL_composed_fuesse = "F\195\156SSE" CAPITAL_decomposed_fuesse = "FU\204\136SSE" print('composed_fuesse = "' .. composed_fuesse .. '"') print('decomposed_fuesse = "' .. decomposed_fuesse .. '"') print('Capital_composed_fuesse = "' .. Capital_composed_fuesse .. '"') print('Capital_decomposed_fuesse = "' .. Capital_decomposed_fuesse .. '"') print('CAPITAL_composed_fuesse = "' .. CAPITAL_composed_fuesse .. '"') print('CAPITAL_decomposed_fuesse = "' .. CAPITAL_decomposed_fuesse .. '"') print() print( "Byte length of composed_fuesse: " .. #composed_fuesse ) print( "Byte length of decomposed_fuesse: " .. #decomposed_fuesse ) print( "Byte length of Capital_composed_fuesse: " .. #Capital_composed_fuesse ) print( "Byte length of Capital_decomposed_fuesse: " .. #Capital_decomposed_fuesse ) print( "Byte length of CAPITAL_composed_fuesse: " .. #CAPITAL_composed_fuesse ) print( "Byte length of CAPITAL_decomposed_fuesse: " .. #CAPITAL_decomposed_fuesse ) print( "Byte reversal of composed_fuesse: " .. composed_fuesse:reverse() ) print( "Byte reversal of decomposed_fuesse: " .. decomposed_fuesse:reverse() ) print( "Byte reversal of Capital_composed_fuesse: " .. Capital_composed_fuesse:reverse() ) print( "Byte reversal of Capital_decomposed_fuesse: " .. Capital_decomposed_fuesse:reverse() ) print( "Byte reversal of CAPITAL_composed_fuesse: " .. CAPITAL_composed_fuesse:reverse() ) print( "Byte reversal of CAPITAL_decomposed_fuesse: " .. CAPITAL_decomposed_fuesse:reverse() ) print("Generating multibyte-string userdata...") do local u = mbstr.from_utf8 mbs_composed_fuesse = u(composed_fuesse) mbs_decomposed_fuesse = u(decomposed_fuesse) mbs_Capital_composed_fuesse = u(Capital_composed_fuesse) mbs_Capital_decomposed_fuesse = u(Capital_decomposed_fuesse) mbs_CAPITAL_composed_fuesse = u(CAPITAL_composed_fuesse) mbs_CAPITAL_decomposed_fuesse = u(CAPITAL_decomposed_fuesse) end print("Done.") print( "Grapheme clusters in mbs_composed_fuesse: " .. #mbs_composed_fuesse ) print( "Grapheme clusters in mbs_decomposed_fuesse: " .. #mbs_decomposed_fuesse ) print( "Grapheme clusters in mbs_Capital_composed_fuesse: " .. #mbs_Capital_composed_fuesse ) print( "Grapheme clusters in mbs_Capital_decomposed_fuesse: " .. #mbs_Capital_decomposed_fuesse ) print( "Grapheme clusters in mbs_CAPITAL_composed_fuesse: " .. #mbs_CAPITAL_composed_fuesse ) print( "Grapheme clusters in mbs_CAPITAL_decomposed_fuesse: " .. #mbs_CAPITAL_decomposed_fuesse ) print( "Reversal of mbs_composed_fuesse: " .. mbs_composed_fuesse:reverse() ) print( "Reversal of mbs_decomposed_fuesse: " .. mbs_decomposed_fuesse:reverse() ) print( "Reversal of mbs_Capital_composed_fuesse: " .. mbs_Capital_composed_fuesse:reverse() ) print( "Reversal of mbs_Capital_decomposed_fuesse: " .. mbs_Capital_decomposed_fuesse:reverse() ) print( "Reversal of mbs_CAPITAL_composed_fuesse: " .. mbs_CAPITAL_composed_fuesse:reverse() ) print( "Reversal of mbs_CAPITAL_decomposed_fuesse: " .. mbs_CAPITAL_decomposed_fuesse:reverse() ) local function fold(str) return mbstr.from_utf8( str, { stable = true, compose = true, casefold = true } ) end print( "Folded composed_fuesse == folded CAPITAL_decomposed_fuesse: " .. ( (fold(mbs_composed_fuesse) == fold(mbs_CAPITAL_decomposed_fuesse)) and "yes" or "no" ) )