On Wed, Jun 28, 2023 at 1:25 PM Devesh Sharma (M20AIE233) <
[email protected]> wrote:

>
>
> On Wed, Jun 28, 2023 at 11:46 AM Werner LEMBERG <[email protected]> wrote:
>
>>
>> >> What exactly do you want to achieve?  If FreeType gets linked with
>> >> HarfBuzz (which you should always do), the `glyph-to-script-map`
>> >> property should be correctly set automatically – for SFNT-based
>> >> font formats, that is, which is both used by TTFs and CFFs.
>> >> However, you won't find any other font formats today that can be
>> >> universally used on all platforms.
>> >
>> > I want pygame->freetype->render_to() interface to render devnagari
>> > text with autofitting.  That is not happening currently, and I am
>> > traversing the entire stack to get it done properly.  I am not sure
>> > where the gap is?  If you can give me any example code in the
>> > freetype code base which details the usage of "autofitter", that
>> > would be great.
>>
>> If you have Devanagari text as input and you want correctly rendered
>> Devanagari as output, using FreeType directly is a bad idea.  I
>> strongly suggest that you use a higher-level library, at least
>> HarfBuzz, or probably even one more level higher, that is, Pango or
>> ICU.
>
> Thanks a lot for the directions. I would try Pango, During my exploration
> I came across Pango, HarfBuzz, Cairo, Pangocairo, I paused the trail
> because those are becoming too many without the knowledge of the right
> sequence of usage. I shall resume that trail again.
>
>> I'm not sure whether you are aware of the intricate technical
>> problems related to the rendering of complex scripts like Devanagari
>> and frieds, but handling them directly by yourself is like reinventing
>> the wheel.
>>
> I am not aware explicitly, but I can imagine that there may be multiple
> rounds of adjusting the glyphs as per the placement rules and availability
> of glyphs. Few are rendered left to right while others right to left the
> list must be long.
>
>>
>> Irrespective of that, you should give more details on your setup, in
>> particular, which font you are using.  Normally, if you load a glyph
>> with the `FT_LOAD_FORCE_AUTOHINT` flag set, the auto-hinter kicks in
>> while `FT_Load_Glyph` is called the first time.  It uses HarfBuzz to
>> set up the glyph-to-script mapping, then checking whether the
>> necessary glyphs for the blue strings are available (see file
>> `afblue.dat`) so that the blue zones are correctly set up.
>>
> I did not have much insight on the above steps; however, I will build the
> lib in debug-mode and try to check what is happening when pygame is
> initiating the rendering.
>
>>
>> Maybe you are just missing `FT_LOAD_FORCE_AUTOHINT`?  You could also
>> compile FreeType with debugging support and set the `FT2_DEBUG`
>> environment variable to get more information.  See file `docs/DEBUG`
>> for more information.
>>
> That's the plan! I shall get back with more debug data.
> Best Regards
> Devesh
>

I have the output with TRACE7, it's quite big, should I post it here or if
you suggest other sharing means?
I am posting my script if you want to try at your end

import pygame
import pygame.locals

pygame.init()
screen = pygame.display.set_mode((400, 200))
clock = pygame.time.Clock()

text = f"सुरक्षा"
#font = pygame.font.Font("/usr/share/fonts/truetype/Sarai/Sarai.ttf", 50)
font = pygame.freetype.Font("/usr/share/fonts/truetype/Sarai/Sarai.ttf", 50)
#font.set_script("Deva")
surf = pygame.Surface((200, 70), pygame.locals.SRCALPHA, 32)
print(surf)
#im = font.render("प्रफुल्ल", True, "black")
#im = font.render("एक्सरसाइज", True, "black")
#print(im)
rect = font.get_rect(text, rotation=0)
im = font.render_to(surf, rect, text, rotation=0)
#print(rect)
#print(im)
#r = surf.get_rect()
#print(f'r = {r}')
#r.x += 10
#r.y += 10
#rect = surf.blit(im, r)
#print(f'rect = {rect}')

while True:
    screen.fill("lightgreen")
    #screen.blit(im, (0,0))
    screen.blit(surf, (0,0))
    #screen.blit(surf, im)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            raise SystemExit

    pygame.display.flip()
    clock.tick(144)

python version 3.8
pygame version 2.5.0 debug (git tag 2.5.0) [force added
"FT_LOAD_FORCE_AUTOHINT|FT_LOAD_TARGET_NORMAL" in
_PGFT_LoadGlyph()->get_load_flags() function]
freetype debug build 6.19

-Best Regards
Devesh


>>
>>    Werner
>>
>

Reply via email to