<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>letters are rendered in their seperated form, this may require glyph hook maybe?</title>
		<link>http://www.allegro.cc/forums/view/618115</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 10 Jun 2020 18:53:04 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hello everyone, i need some help <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /> </p><p>Trying to add arabic language to an &quot;Text2Image&quot; API I developed</p><p>as indicated in the attached image , arabic letters are rendered seperated by allegro , that&#39;s now how you expect arabic letters to look ,the renderer draws letters in their standalone form. Correct Arabic is written in a script, in which certain letters are joined, according to rules. Therefore, each letter has up to 4 forms:</p><p>Standalone</p><p>Attached only to previous letter</p><p>Attached only to next letter</p><p>Attached to both</p><p>A proper Arabic word processor automatically chooses the correct form of each letter, according to the rules. In fact, as you type you&#39;ll often see the previous letter change form as you type the next letter.</p><p>It would be great is i can use some existing allegro API calls to pick the current glyphto be rendered based on the previous and next letter  <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" /> a sort a a hook maybe. is such API doesnt exist , any idea of how i may be able to add it ? not assuming it doesnt exist , thanks alot</p><p>code used to produce the attached image</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">  2</span><span class="p">#include &lt;allegro5/allegro_font.h&gt;</span>
<span class="number">  3</span><span class="p">#include &lt;allegro5/allegro_ttf.h&gt;// zawsze dodajemy plik nagłówkowy ttf</span>
<span class="number">  4</span><a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a> <span class="k3">*</span> Tekst  <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_ustr_new"><span class="a">al_ustr_new</span></a> <span class="k2">(</span><span class="s">"حبك أنا كثير ، يا حبيبي ضلك طل علي "</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// Kodowanie UTF8 w C::B</span>
<span class="number">  5</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span>
<span class="number">  6</span><span class="k2">{</span>
<span class="number">  7</span>    <a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>    <a href="http://www.allegro.cc/manual/al_init_font_addon"><span class="a">al_init_font_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>    <a href="http://www.allegro.cc/manual/al_init_ttf_addon"><span class="a">al_init_ttf_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// pamiętaj o inicjowaniu!</span>
<span class="number"> 10</span>    <a href="http://www.allegro.cc/manual/al_install_keyboard"><span class="a">al_install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_KEYBOARD_STATE"><span class="a">ALLEGRO_KEYBOARD_STATE</span></a> klawiatura<span class="k2">;</span>
<span class="number"> 12</span>    <a href="http://www.allegro.cc/manual/al_set_new_display_flags"><span class="a">al_set_new_display_flags</span></a><span class="k2">(</span>ALLEGRO_WINDOWED<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>okno     <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span><span class="n">450</span>,<span class="n">300</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>    <a href="http://www.allegro.cc/manual/al_set_window_title"><span class="a">al_set_window_title</span></a><span class="k2">(</span>okno,<span class="s">"Font TTF"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a> <span class="k3">*</span> font_ttf    <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_ttf_font"><span class="a">al_load_ttf_font</span></a><span class="k2">(</span><span class="s">"fonts/DejaVuSans.ttf"</span>,<span class="n">24</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span><span class="c">//  wskaźnik do czcionki ttf</span>
<span class="number"> 16</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a> <span class="k3">*</span> font_ttf_16 <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_ttf_font"><span class="a">al_load_ttf_font</span></a><span class="k2">(</span><span class="s">"fonts/DejaVuSans.ttf"</span>,<span class="n">16</span>, <span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a> <span class="k3">*</span> font_ttf_24 <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_ttf_font"><span class="a">al_load_ttf_font</span></a><span class="k2">(</span><span class="s">"fonts/DejaVuSans.ttf"</span>,<span class="n">24</span>, <span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a> <span class="k3">*</span> font_ttf_30 <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_ttf_font"><span class="a">al_load_ttf_font</span></a><span class="k2">(</span><span class="s">"fonts/DejaVuSans.ttf"</span>,<span class="n">30</span>, <span class="n">4</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>     <span class="k1">while</span><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_key_down"><span class="a">al_key_down</span></a><span class="k2">(</span><span class="k3">&amp;</span>klawiatura, ALLEGRO_KEY_ESCAPE<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 20</span>    <span class="k2">{</span>
<span class="number"> 21</span>        <a href="http://www.allegro.cc/manual/al_get_keyboard_state"><span class="a">al_get_keyboard_state</span></a><span class="k2">(</span><span class="k3">&amp;</span>klawiatura<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>        <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>.<span class="n">5</span>,<span class="n">0</span>.<span class="n">5</span>,<span class="n">0</span>.<span class="n">5</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>        <a href="http://www.allegro.cc/manual/al_draw_ustr"><span class="a">al_draw_ustr</span></a><span class="k2">(</span>font_ttf,<a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a> <span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">255</span><span class="k2">)</span>, <span class="n">15</span>, <span class="n">40</span>, <span class="n">0</span>,Tekst<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>        <a href="http://www.allegro.cc/manual/al_draw_textf"><span class="a">al_draw_textf</span></a><span class="k2">(</span>font_ttf_16,<a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span>, <span class="n">10</span>, <span class="n">142</span>,<span class="n">0</span>,<span class="s">"حبك أنا كثير ، يا حبيبي ضلك طل علي  %s"</span>,<a href="http://www.allegro.cc/manual/ALLEGRO_VERSION_STR"><span class="a">ALLEGRO_VERSION_STR</span></a><span class="s">"!"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>        <a href="http://www.allegro.cc/manual/al_draw_textf"><span class="a">al_draw_textf</span></a><span class="k2">(</span>font_ttf_24,<a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span>, <span class="n">10</span>, <span class="n">158</span>,<span class="n">0</span>,<span class="s">" حبك أنا كثير ، يا حبيبي ضلك طل علي  %s"</span>,<a href="http://www.allegro.cc/manual/ALLEGRO_VERSION_STR"><span class="a">ALLEGRO_VERSION_STR</span></a><span class="s">"!"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span>        <a href="http://www.allegro.cc/manual/al_draw_textf"><span class="a">al_draw_textf</span></a><span class="k2">(</span>font_ttf_30,<a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,<span class="n">255</span><span class="k2">)</span>, <span class="n">10</span>, <span class="n">180</span>,<span class="n">0</span>,<span class="s">" حبك أنا كثير ، يا حبيبي ضلك طل علي  %s"</span>,<a href="http://www.allegro.cc/manual/ALLEGRO_VERSION_STR"><span class="a">ALLEGRO_VERSION_STR</span></a><span class="s">"!"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span>        <a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a> <span class="k2">(</span>font_ttf_30,<a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">255</span>,<span class="n">255</span>,  <span class="n">0</span><span class="k2">)</span>, <span class="n">55</span>, <span class="n">220</span>,<span class="n">0</span>,<span class="s">"I  حبك أنا كثير ، يا حبيبي ضلك طل علي  ."</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</span>        <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 29</span>    <span class="k2">}</span>
<span class="number"> 30</span>    <a href="http://www.allegro.cc/manual/al_destroy_font"><span class="a">al_destroy_font</span></a><span class="k2">(</span>font_ttf<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 31</span>    <a href="http://www.allegro.cc/manual/al_destroy_font"><span class="a">al_destroy_font</span></a><span class="k2">(</span>font_ttf_16<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>    <a href="http://www.allegro.cc/manual/al_destroy_font"><span class="a">al_destroy_font</span></a><span class="k2">(</span>font_ttf_24<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 33</span>    <a href="http://www.allegro.cc/manual/al_destroy_font"><span class="a">al_destroy_font</span></a><span class="k2">(</span>font_ttf_30<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 34</span>    <a href="http://www.allegro.cc/manual/al_destroy_display"><span class="a">al_destroy_display</span></a><span class="k2">(</span>okno<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 35</span>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 36</span><span class="k2">}</span>
</div></div><p>

SDL 2 + SDL ttf seem to handle this pretty fine as indicated in the second attached image
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (dhia hassen)</author>
		<pubDate>Fri, 08 May 2020 04:22:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I think (but am not sure) that Freetype on its own won&#39;t do this. See for example:<br /><a href="https://stackoverflow.com/questions/49110006/arabic-joined-up-text-in-freetype">https://stackoverflow.com/questions/49110006/arabic-joined-up-text-in-freetype</a><br />so you would need a text shaping engine like <a href="https://harfbuzz.github.io/">HarfBuzz</a>.</p><p>Where did you get the SDL screenshot from? - it&#39;s always worth finding out how they did it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Hull)</author>
		<pubDate>Fri, 08 May 2020 18:29:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You are right , no other graphics library seem to do that work even for other languages , each time a seperate font engine is used.</p><p>I have done some manual tweaking and was able to render some specific arabic text in allegro properly. ( works only with CONST char * now    -- const only -- ).</p><p>to automate the process an algorithm is needed  , a simple symbole replacement preprocessing</p><p>This is where i got the sdl image from <a href="https://discourse.libsdl.org/t/sdl-for-farsi-or-persian-text/25292">https://discourse.libsdl.org/t/sdl-for-farsi-or-persian-text/25292</a></p><p>I talked to them and they seem to simple perform that preprocessing i just mentioned , nothing fancy </p><p>I didnt want to automate the preprocessing, i found a php library that does it ( PHP same to have the exact problem as allegro, so allegro is doing good )</p><p>after some deep understanding of this whole thing , and 12 hours of investigation i found that the best choice is to use pygame , pygame uses sdl2 internally , and i then have access so a python library that does the preprocessing </p><p>If we add some glyph hooks to allegro i will be able to implement this for allegro</p><p>I think I&#39;d follow <a href="https://github.com/lxnt/ex-sdl-freetype-harfbuzz">https://github.com/lxnt/ex-sdl-freetype-harfbuzz</a></p><p>    HarfBuzz to translate utf8 string to a list of glyphs and position</p><p>    FreeType to rasterize the needed glyphs with SDF in a texture atlas</p><p>    And in a custom shader, choose output alpha using the SDF distances info in    the texture</p><p>Good discussion about SDF <a href="http://www.reddit.com/r/gamedev/comments/2879jd/just_found_out_about_signed_distance_field_text/">http://www.reddit.com/r/gamedev/comments/2879jd/just_found_out_about_signed_distance_field_text/</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (dhia hassen)</author>
		<pubDate>Sat, 09 May 2020 00:37:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Can we just add the same sort of code in that example into Allegro? It seems the main workhorse functions are <span class="source-code">hb_buffer_get_glyph_infos</span> and <span class="source-code">hb_buffer_get_glyph_positions</span>, after that it&#39;s the usual <span class="source-code">FT_Load_Glyph</span>.</p><p>I&#39;m not sure what the glyph callback would look like, can you explain what it would do?</p><p>Anyway, I filed <a href="https://github.com/liballeg/allegro5/issues/1132">https://github.com/liballeg/allegro5/issues/1132</a> so we don&#39;t forget about this.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Sat, 16 May 2020 05:14:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I&#39;m not sure if this is what you&#39;re talking about, but it would be nice to have a glyph hook for drawing each glyph in a custom color or shading, as well as with the proper spacing for things like the suggested languages.</p><p><b>EDIT</b><br />Bump for attn. <img src="http://www.allegro.cc/forums/smileys/kiss.gif" alt=":-*" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 10 Jun 2020 18:53:04 +0000</pubDate>
	</item>
</rss>
