Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JavaScript版追加 #5

Closed
taisukef opened this issue Apr 26, 2020 · 12 comments
Closed

JavaScript版追加 #5

taisukef opened this issue Apr 26, 2020 · 12 comments

Comments

@taisukef
Copy link

便利なコード提供、ありがとうございます!
forkし、JavaScript版を追加しました(生成部分はノータッチです)
/~https://github.com/taisukef/GraphemeSplitter

@yumetodo
Copy link

多分
/~https://github.com/foliojs/grapheme-breaker
とそのforkの
/~https://github.com/yumetodo/grapheme-breaker-u10-0
がすでにあるので・・・

@taisukef
Copy link
Author

ありがとうございます!

/~https://github.com/foliojs/grapheme-breaker を使ってみたのですが、下記、結合絵文字に非対応だったので、こちら発見しベースにさせてもらった感じです

const t = s => console.log(s, s.length)
t(GraphemeBreaker.break('👨🏻‍⚕️')) // => [ '👨', '🏻‍', '⚕️' ] 3, NG
t(GraphemeBreaker.break('👨‍👨‍👧‍👦👩‍👩‍👧‍👦👨‍👨‍👧‍👦')) // [ '👨‍', '👨‍', '👧‍', '👦' ] 4, NG

/~https://github.com/yumetodo/grapheme-breaker-u10-0
v10対応のcoffescript版をベースにするのもありだったかもしれません

@ufcpp
Copy link
Owner

ufcpp commented Apr 28, 2020

Sharp とか DotNet とかの接頭辞・接尾辞を付けずにリポジトリを作ったこちらも悪いんですが、このリポジトリは C# 向けの実装を置くために作ったものです。
他の言語の実装を私が必要としているかと言うと必要はないです。また、 .NET 的には、今年末にリリースされる .NET 5 で同様の機能が基本ライブラリに導入されることが決定していて実装がもうある(Unicode 12.1 対応/13.0 対応予定で、GraphemeSplitter より正確な処理をしていて、高速・省メモリな上位互換です)ので、 GraphemeSplitter 自体退役の予定です。

ここに置いたコードは MIT ライセンスですし、使っていただいたり参考にして他言語向け実装を作っていただくこと自体は全く問題ありません。

作ったはいいものの置き場に困っているということならこのリポジトリに merge すること自体は構わないんですが、継続保守や、npm などへのリリース作業はこちらではできません。

という前提で、 #6 はどうしましょうか?

@yumetodo
Copy link

そもそもwasmがある今、必要なのはどちらかというと他の言語のライブラリをwasmとしてコンパイルしてJavaScriptから使える薄いラッパーじゃなかろうかみたいな思いもあり(ちなみに私はicuをビルドしようとして挫折してます)。

@ufcpp
Copy link
Owner

ufcpp commented Apr 28, 2020

少々オフトピックですが…

ICU はフルに参照してしまうとメガ単位(16MBとかでしたっけ)になるのがちょっと大変そうですね。
.NET も、iOS と wasm 向けはアプリに ICU データの同梱が必要で困っていそうで、必要なデータだけに削るツールを作りたいとか、カルチャー未対応(Invariant カルチャーにだけ対応)ビルドスイッチを用意したいとかいろいろ悩ましそうです。

@yumetodo
Copy link

なるほど・・・

@taisukef
Copy link
Author

退役方向とのこと了解です。PRはcloseしておきました。お手数おかけしました。
コード、大変参考になりました。ありがとうございます!

icu、見てみましたが、広範囲に渡りサイズも大きくwasm化するにもちょっとヘビーですね。
ひとまず書記素分解に限定してコンパクトな実装をまた目指してみたいと思います。

Unicode、おもしろいですね!

@ufcpp
Copy link
Owner

ufcpp commented Apr 28, 2020

ちなみに、Chromium も WebKit も ICU を参照してるっぽいので、普通に wasm から参照させてくれ… とか思ったりしなくも。

とりあえず issue は close いたします。

@ufcpp ufcpp closed this as completed Apr 28, 2020
@taisukef
Copy link
Author

書記素分解のみなら数KBでできるんですね
V13対応試みましたが、ExtPictがGraphemeBreakProperty.txtに見つからず・・・
/~https://github.com/taisukef/grapheme-breaker-mjs/blob/master/src/GraphemeBreakerV13.mjs

@ufcpp
Copy link
Owner

ufcpp commented Apr 29, 2020

ExtPict、たぶん、Extended_Pictographicですかね。
出所は↓こっちだと思います。
https://www.unicode.org/Public/UCD/latest/ucd/emoji/emoji-data.txt

Unicode 10 と 11 の間で方式がだいぶ変わってるんですよね。
基本的には、11からの方が簡素化というか、テーブルとして持たないといけないデータ量が減っているはずです。

@yumetodo
Copy link

( @taisukef 他に書くべき適当な場所を見つけられなかったのでここに書きますが、/~https://github.com/taisukef/grapheme-breaker-mjs にIssue立てられるようにしてください・・・あと grapheme-breaker-u10-0 は私が公開していますが、 @vaskevich 氏による foliojs/grapheme-breaker#4 をほぼそのまま公開しているだけです(おかげでtestが通らなくなってしまって今やアップデートすることすらできないでいる)

@taisukef
Copy link
Author

なるほど、そちらも見る必要があるのですね!
Issue、こちらに立てました
taisukef/grapheme-breaker-mjs#1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants