13

ネイティブに変換したい小さな Web アプリがあります。現在、多くの可動部分 (バックエンド、ブラウザーなど) があり、それを 1 つの緊密なアプリケーションに変換したいと考えています。これを行うために PyGame を使用することにしましたが、フォントのレンダリングの問題を除けば、これまでのところ問題ありません。

表示したい文字列は कोझिकोड です。これは、正しくレンダリングされて次のようになります正しくレンダリング

特定のコード ポイントは \u0915 \u094b \u091d \u093f \u0915 \u094b および \u0921 です。

これで、エディターとブラウザーでは問題ないように見えますが、PyGame でレンダリングしようとすると、これが表示されます間違ってレンダリング。基本的に、母音記号 (\u093f ि) は झ の左側にあるはずですが、右側 (および क の左側) に表示されるため、完全に混乱しています。これはブラウザーやテキスト エディター (入力文字列が同じ) では発生しないため、PyGame のレンダラーの問題であると推測しています。

ि (\u093f) を झ (\u091d) の前に置くという、この特定のケースでのみ機能する大まかな修正が 1 つあります。その場合、そうのように適切にレンダリングされます大雑把な修正。これは、私が言語についてある程度知っていて、そのロジックをコードに組み込んでいることにかかっています。ここでは複数の言語を扱わなければならないので、それは現実的ではありません。

私はユニコードの経験があまりないので、この問題に取り組む方法がわかりません。これを修正するためにできることはありますか?

念のため、Debian にあり、これをレンダリングするために必要なグリフを備えたfreesansフォントを使用しています。

更新: これを実際にレンダリングするコードは次のとおりです。

# -*- coding: utf-8 -*-
import time

import pygame

# Pygame setup and create root window
pygame.font.init()
screen = pygame.display.set_mode((320, 200))
empty = pygame.Surface((320, 200))


font_file = pygame.font.match_font("freesans")  # Select and
font = pygame.font.Font(font_file, 30)          # open the font
writing = font.render(u"कोिझकोड  कोझिकोड", True, (0, 0, 0))  # Render text on a surface
screen.fill((255, 255, 255)) # Clear the background
screen.blit(writing, (10, 10)) # Blit the text surface on the background
pygame.display.flip()  # Refresh the display

input() # Wait for input before quitting

これはそれがどのように見えるかですレンダリング エラー

最初の単語は正しくレンダリングされていますが、大雑把な修正で述べたように、母音と文字の位置を反転させてレンダリングしています。2 番目は適切に記述されていますが、正しくレンダリングされていません。

更新 2 : 他に何もないので、外部プログラムを使用して文字列を画像にレンダリングし、この画像を PyGame サーフェスにブリットすることにしました。imagemagick を試してみましたが、これと同じように混乱してしまいます。Gimp は問題なく動作するので、バッチ モードを使用して作業を完了する予定です。

4

2 に答える 2