#include <u.h>
#include <libc.h>
#include <bio.h>
const Rune lg = 0x0300;
const Rune hg = 0x036F;
int
ismark(Rune r)
{
return r >= lg && r <= hg;
}
int
clusterize(Biobuf *in, Biobuf *out)
{
int i;
Rune r;
i = 0;
r = Bgetrune(in);
if (r == (Rune)Beof)
return 0;
Bputrune(out, r);
i = 1;
while ((r = Bgetrune(in)) != (Rune)Beof)
if (ismark(r)) {
i++;
Bputrune(out, r);
} else {
Bungetrune(in);
break;
}
return i;
}
void
main(void)
{
int count;
int runes;
Biobuf bstdin, bstdout;
if (Binit(&bstdin, 0, OREAD) == Beof) {
fprint(2, "can't connect stdin to bio: %r");
exits("Binit");
}
if (Binit(&bstdout, 1, OWRITE) == Beof) {
fprint(2, "can't connect stdout to bio: %r");
exits("Binit");
}
count = 0;
while ((runes = clusterize(&bstdin, &bstdout)) != 0) {
Bprint(&bstdout, "\n\n runes: %d\n\n", runes);
count++;
}
Bterm(&bstdin);
Bterm(&bstdout);
print("\n\nlen: %d\n", count);
exits(0);
}
I2luY2x1ZGUgPHUuaD4KI2luY2x1ZGUgPGxpYmMuaD4KI2luY2x1ZGUgPGJpby5oPgoKY29uc3QgUnVuZSBsZyA9IDB4MDMwMDsKY29uc3QgUnVuZSBoZyA9IDB4MDM2RjsKCmludAppc21hcmsoUnVuZSByKQp7CglyZXR1cm4gciA+PSBsZyAmJiByIDw9IGhnOwp9CgppbnQKY2x1c3Rlcml6ZShCaW9idWYgKmluLCBCaW9idWYgKm91dCkKewoJaW50IGk7CglSdW5lIHI7CglpID0gMDsKCglyID0gQmdldHJ1bmUoaW4pOwoJaWYgKHIgPT0gKFJ1bmUpQmVvZikKCQlyZXR1cm4gMDsKCglCcHV0cnVuZShvdXQsIHIpOwoJaSA9IDE7CgoJd2hpbGUgKChyID0gQmdldHJ1bmUoaW4pKSAhPSAoUnVuZSlCZW9mKQoJCWlmIChpc21hcmsocikpIHsKCQkJaSsrOwoJCQlCcHV0cnVuZShvdXQsIHIpOwoJCX0gZWxzZSB7CgkJCUJ1bmdldHJ1bmUoaW4pOwoJCQlicmVhazsKCQl9CglyZXR1cm4gaTsKfQoKdm9pZAptYWluKHZvaWQpCnsKCWludCBjb3VudDsKCWludCBydW5lczsKCUJpb2J1ZiBic3RkaW4sIGJzdGRvdXQ7CglpZiAoQmluaXQoJmJzdGRpbiwgMCwgT1JFQUQpID09IEJlb2YpIHsKCQlmcHJpbnQoMiwgImNhbid0IGNvbm5lY3Qgc3RkaW4gdG8gYmlvOiAlciIpOwoJCWV4aXRzKCJCaW5pdCIpOwoJfQoJaWYgKEJpbml0KCZic3Rkb3V0LCAxLCBPV1JJVEUpID09IEJlb2YpIHsKCQlmcHJpbnQoMiwgImNhbid0IGNvbm5lY3Qgc3Rkb3V0IHRvIGJpbzogJXIiKTsKCQlleGl0cygiQmluaXQiKTsKCX0KCWNvdW50ID0gMDsKCXdoaWxlICgocnVuZXMgPSBjbHVzdGVyaXplKCZic3RkaW4sICZic3Rkb3V0KSkgIT0gMCkgewoJCUJwcmludCgmYnN0ZG91dCwgIlxuXG4gIHJ1bmVzOiAlZFxuXG4iLCBydW5lcyk7CgkJY291bnQrKzsKCX0KCUJ0ZXJtKCZic3RkaW4pOwoJQnRlcm0oJmJzdGRvdXQpOwoJcHJpbnQoIlxuXG5sZW46ICVkXG4iLCBjb3VudCk7CglleGl0cygwKTsKfQ==