68inline std::vector<uint32_t>
nfc(
const std::vector<uint32_t>&
in) {
69 std::vector<uint32_t> d;
70 d.reserve(
in.size() + 8);
73 for (
size_t i = 0;
i < d.size();) {
79 while (
j < d.size() &&
ccc(d[
j]) != 0) ++
j;
80 std::stable_sort(d.begin() +
static_cast<std::ptrdiff_t
>(
i), d.begin() +
static_cast<std::ptrdiff_t
>(
j),
86 std::vector<uint32_t>
out;
87 out.reserve(d.size());
115 for (
unsigned char b :
text)
122 const std::vector<uint32_t>
n =
nfc(
cp);
const float * in[expr::Expr::kMaxInputs]
const float * p[kIrDepthSourcesMax]
constexpr uint32_t kDecompData[kDecompDataCount]
constexpr uint16_t kDecompOff[kDecompCount]
constexpr uint32_t kCompVal[kCompCount]
constexpr uint32_t kDecompCount
constexpr uint32_t kCccCp[kCccCount]
constexpr uint32_t kCccCount
constexpr uint8_t kCccVal[kCccCount]
constexpr uint8_t kDecompLen[kDecompCount]
constexpr uint32_t kCompCount
constexpr uint64_t kCompKey[kCompCount]
constexpr uint32_t kDecompCp[kDecompCount]
constexpr uint32_t kLBase
constexpr uint32_t kVBase
uint32_t compose(uint32_t a, uint32_t b)
std::string nfc_utf8(const std::string &text)
constexpr uint32_t kNCount
constexpr uint32_t kVCount
constexpr uint32_t kTCount
constexpr uint32_t kLCount
void decompose(uint32_t c, std::vector< uint32_t > &out)
constexpr uint32_t kTBase
constexpr uint32_t kSBase
std::vector< uint32_t > nfc(const std::vector< uint32_t > &in)
constexpr uint32_t kSCount
std::vector< uint32_t > cpts_from_utf8(const std::string &s)
void append_utf8(uint32_t cpt, std::string &out)