テキストエディタ作成に強いプログラミング言語は？


先日Qtの日本営業店に尋ねましたら、  
Qt等では、縦書きの実装などはかなり難しい（できない？）  
と言われました。

一太郎とか、Wordソフトとかって何のプログラミング言語で  
かかれているのでしょうか？という質問を検索すると、  
やはり企業秘密みたいで、C++とか、そこらへん？みたいな  
ようです。例えばQtはC++なので、ならばQtでもできるはず  
ですが、私もできそうな気がしません。（→この質問は  
確かに変でした。）

自分で拡張していくしかないのか、先日からお尋ねしている  
サブクラス化が成功すれば、それなりに融通の利くレイアウトを  
実装できるのか、正直わかりません。ただこの辺のドキュメントは  
無いと言っていいくらい少なく、正直絶望的です。  
この際にお聞きしたいのですが、こういう質問はいいのかわからない  
のですが、テキストエディタ作成に強いプログラミング言語って  
ご存知ですか？

**追記**  
詳しい解説有難うございます。[[組版文字について:QTextEdit関連](https://ja.stackoverflow.com/questions/37110/%E7%B5%84%E7%89%88%E6%96%87%E5%AD%97%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6qtextedit%E9%96%A2%E9%80%A3\]%E3%81%8B%E3%82%89%E7%B5%84%E7%89%88%E5%87%A6%E7%90%86%E3%81%AB%E8%88%88%E5%91%B3%E3%82%92%E6%8C%81%E3%81%A1%E5%A7%8B%E3%82%81)、ルビの表記、組立文字等は何とか`Qt`でも実装出来ました。こういうテキスト処理系の話は`Qt`から始めたため、`Qt`の中だけでもがいてきた感じです。今回は、`Qt`以外の方向へ眼を向けようとしたための質問でした。sayuriさんのご指摘の通り、組版処理の要件という無料公開の文書をネットで見て、その厳密さに驚いたことがありますが、Qtで何か方法はないかと手探りしてきました。自分はPythonに手を付ける前にPyQtの本を買ってしまったというぐらいの経歴を持っていて、（しかも英語のMarkSummerfield氏のやつです。）GUIというのも知りませんでした。そこからPythonスタートブックから地道にやってきたのですが、正直PyQtって何？という始まりでつまずいている可能性のある存在でした。まだQtでも触った事のないメソッドやクラスもあるため、組み合わせ次第ではできる可能性もあるのではないかという希望を持ちつつ色々やってきました。今の自分のスキルでは皆さんのご助力とともに、ルビや組立文字等、「組版が少しでも増やせた。」というところでも満足するものだと思うんですが、上でも述べたように、Qtでは縦書やらは難しいということだったので、（こう、Qt側から、初めてそれは無理です。と言われた感じなので、）じゃあ別の？という程度の切り替えを意識した質問でした。意図がわかりにくかったようで申し訳ありません。確かにエディタではなくて、ワードプロセッサの方が私の意図通りです。抽象的にテキストを扱うソフトっていうのかどういうべきなのかはわかりませんが、Qtを始めるまえは縦書に難があるとかいう限界自体を知らずに突き進んできたため、こんな質問になりました。Qt以外のライブラリだったらできるか？という感じです。少なくともテキスト処理系に強いプログラミング言語は？ライブラリは？という質問にすべきだったかどうかわかりませんが、とりあえずこの質問はいけないようだったので消そうかなと考えています。  
皆さんの意見を自分なりに考えてみると、つまり、Qtは既にC++で書かれたライブラリなので、Qtで無理なら、C++でQtに変わる別のライブラリを構成し、リファレンス公開するレベルにならないといけないということですね。Qtを使ってどうこう言ってるんじゃなくて、Qtを作れるレベルには最低限なってないとだめだと。  
Lispですというお答えもいただきましたが、私が一番欲しい解答はこのようなものでした。でも何となくわかったことですが、言語自体を自分で作り、ライブラリを自分で生み出し、ほかの人が作ったライブラリに頼らずに、一から自分で作りなさいと、そういうことなのでしょうか。出来上がった結果としてのライブラリに頼ってたら、確かに根っこは変えられないですね。確かにこういう構造関係を知らないようではそんな事やったこともないため、スキル不足は否めません。  
ひょっとすると、Qtで公開されているライブラリのように、誰かが作ってくれたライブラリの中で、テキスト処理系に強いライブラリはありますか？と尋ねるべきだったでしょうか。ほんとこの辺の知識が曖昧なまま進んできたもので、お騒がせして申し訳ありませんでした。  
（クローズされるか、この質問は近日中に消そうと思います。）




質問文ではテキストエディタとされていますが、[Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF)には

> **テキストエディタ** （英語: text
> editor）とはコンピュータで文字情報（テキスト）のみのファイル、すなわちテキストファイルを作成、編集、保存するためのソフトウェア（プログラム）である。

と説明されています。

他方「縦書きの実装」「一太郎とか、Wordソフトとか」とも言及されています。そもそも作成したいのはテキストエディタではなく[ワードプロセッサ](https://ja.wikipedia.org/wiki/%E3%83%AF%E3%83%BC%E3%83%97%E3%83%AD%E3%82%BD%E3%83%95%E3%83%88)ではありませんか？

>
> ワープロソフトは、手書きやタイプライタと異なり、文書をコンピュータ上で作成してデータの形で保存するため、後からの修正や再利用、電子メールなどでの添付、文書内の文字検索などが容易であり、印刷せずに画面で表示すればペーパーレス化も可能である。また、文字の装飾や文字間隔の調整、図表の挿入などの編集機能を備えている。主流といわれるワープロソフトには、DTPで使用できるほどの高度な編集機能や、グループで使う事を考慮した世代管理機能や校正機能を持つものもある。

作ろうとしているアプリケーションのゴールを正しく認識しないことには、完成することはないと思います。

* * *

>
> 一太郎とか、Wordソフトとかって何のプログラミング言語でかかれているのでしょうか？という質問を検索すると、やはり企業秘密みたいで、C++とか、そこらへん？みたいなようです。例えばQtはC++なので、ならばQtでもできるはずですが、私もできそうな気がしません。

縦書き等、文字の厳密なレイアウトを実現するのであれば、フォントの解析はもちろんのこと、画面描画も1dotずつ全て制御する必要があることはわかるはずです。アプリケーションを作成するにはQtを利用していてはだめで、Qtのようなライブラリを作成できるスキルが求められるのではありませんか？

なおWordに関しては実装について説明されており、DirectXやOpenGLなどを使用してグラフィックスカードを直接制御しています。[マイクロソフトは、C++でいかにしてMicrosoft
Officeのクロスプラットフォームを実現したのか](http://www.publickey1.jp/blog/14/cmicrosoft_office.html)

* * *

> テキスト処理系に強いプログラミング言語は？ライブラリは？

縦書きなどテキスト処理を行うとなるとsoramimiさんが具体的な例を挙げてくださいましたが、実はただ単に並べればよいというわけではなく、例えば`「`（鍵括弧）は90°回転が必要ですし、[連綿体（合字）](http://www.morisawa.co.jp/support/faq/3693)はどうするのという問題も出てくるため「フォントの解析はもちろんのこと」と指摘しました。

結局、１文字ずつレイアウトすることになると思いますが、効率よく行う必要があります。

他の方から適切な言語・ライブラリが提示されない場合、最終的にはOfficeなどが採用しているようにDirectXやOpenGLなどを使用してグラフィックスカードを直接制御することになります。その場合、DirectXであれば[HLSL;
High Level Shading
Language](https://ja.wikipedia.org/wiki/High_Level_Shading_Language)、OpenGLであれば[GLSL;
OpenGL Shading
Language](https://ja.wikipedia.org/wiki/GLSL)といった言語で記述することになります。




質問文ではテキストエディタとされていますが、[Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF)には

> **テキストエディタ** （英語: text
> editor）とはコンピュータで文字情報（テキスト）のみのファイル、すなわちテキストファイルを作成、編集、保存するためのソフトウェア（プログラム）である。

と説明されています。

他方「縦書きの実装」「一太郎とか、Wordソフトとか」とも言及されています。そもそも作成したいのはテキストエディタではなく[ワードプロセッサ](https://ja.wikipedia.org/wiki/%E3%83%AF%E3%83%BC%E3%83%97%E3%83%AD%E3%82%BD%E3%83%95%E3%83%88)ではありませんか？

>
> ワープロソフトは、手書きやタイプライタと異なり、文書をコンピュータ上で作成してデータの形で保存するため、後からの修正や再利用、電子メールなどでの添付、文書内の文字検索などが容易であり、印刷せずに画面で表示すればペーパーレス化も可能である。また、文字の装飾や文字間隔の調整、図表の挿入などの編集機能を備えている。主流といわれるワープロソフトには、DTPで使用できるほどの高度な編集機能や、グループで使う事を考慮した世代管理機能や校正機能を持つものもある。

作ろうとしているアプリケーションのゴールを正しく認識しないことには、完成することはないと思います。

* * *

>
> 一太郎とか、Wordソフトとかって何のプログラミング言語でかかれているのでしょうか？という質問を検索すると、やはり企業秘密みたいで、C++とか、そこらへん？みたいなようです。例えばQtはC++なので、ならばQtでもできるはずですが、私もできそうな気がしません。

縦書き等、文字の厳密なレイアウトを実現するのであれば、フォントの解析はもちろんのこと、画面描画も1dotずつ全て制御する必要があることはわかるはずです。アプリケーションを作成するにはQtを利用していてはだめで、Qtのようなライブラリを作成できるスキルが求められるのではありませんか？

なおWordに関しては実装について説明されており、DirectXやOpenGLなどを使用してグラフィックスカードを直接制御しています。[マイクロソフトは、C++でいかにしてMicrosoft
Officeのクロスプラットフォームを実現したのか](http://www.publickey1.jp/blog/14/cmicrosoft_office.html)

* * *

> テキスト処理系に強いプログラミング言語は？ライブラリは？

縦書きなどテキスト処理を行うとなるとsoramimiさんが具体的な例を挙げてくださいましたが、実はただ単に並べればよいというわけではなく、例えば`「`（鍵括弧）は90°回転が必要ですし、[連綿体（合字）](http://www.morisawa.co.jp/support/faq/3693)はどうするのという問題も出てくるため「フォントの解析はもちろんのこと」と指摘しました。

結局、１文字ずつレイアウトすることになると思いますが、効率よく行う必要があります。

他の方から適切な言語・ライブラリが提示されない場合、最終的にはOfficeなどが採用しているようにDirectXやOpenGLなどを使用してグラフィックスカードを直接制御することになります。その場合、DirectXであれば[HLSL;
High Level Shading
Language](https://ja.wikipedia.org/wiki/High_Level_Shading_Language)、OpenGLであれば[GLSL;
OpenGL Shading
Language](https://ja.wikipedia.org/wiki/GLSL)といった言語で記述することになります。

