Handling variations in forms of Devanagari conjuncts. #68
Replies: 25 comments
-
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
|
Thank you so much tiroj for to remind me that I can use ZWJ also, but if I will use in this 1.62 version dSignI maatra will be implied same as dSignI, instead of if combination of two or three character will should be implied or replace dSignI to dSignI.W. This is the first part of my reply/message. I am using chrome browser and in your reply I can see that dKa+dHalant+ZWJ+dNa+dSignI is still looks perfect, maybe because chrome use different font, I am just sharing screenshot of your reply first, and then I well share other screenshot of text table which I created to explain what is the problem if I use ZWJ instead of creating new substitute. First I want to share a screenshot of your last line of your reply which contains 'क्नि', it's looks perfect in chrome browser, but in document editor like MS Word or any other if I type this dKa+dHalant+ZWJ+dNa+dSignI, it look different, so please first check this screenshot of our conversation here in chrome browser. In your reply while you type 'क्नि' in this chrome browser, it's look okay because may chrome's font use correct width of i maatra for this combination. But in our case, if we use this combination dKa+dHalant+ZWJ+dNa+dSignI, this will not replace dSignI to dSignI.W. I prepare one text table so we can understand it better, and I am sharing screenshot of that text table bellow. As I told I don't have idea how to manipulate logics, like if we use ZWJ. And I already created few substitutes for this types of character combinations (glyps). So in first column I just type as you suggest me like 'dKa+dHalant+ZWJ+dNa+dSignI' and in second column shows the combination of substitutes which I created in my modified font. In second column I just type 'dKNa.ss02+dSignI', 'dGNa.ss02+dSignI', 'dGhNa.ss02+dSignI'. I already add these types of few substitute glyphs which I created as per my requirement in 'lookup 11 contextual 2', so when I type above substitutes with dSignI, it will visually display like above screenshot. I mean with my created substitutes with dSignI will be replace dSignI to dSignI.W, and as I feel it look better then we can use 'dKa+dHalant+ZWJ+dNa+dSignI'. My understanding about font logic like how and which logics need to create GSUB & GPOS is very limited, but I create substitute for those, just because I think this will be better instead of using ZWJ, because i maatra is not changing in this native font and as per my expectation it should be like dSignI to dSignI.W if glyph length is changed to wide. Maybe there is a solution for this also available in our native 1.62 font! if there is please guide me. So for nor now I have this doubt, and I want to ask you is this correct if I need these types of substitutes in my transcription text which also need dSignI.W ? This bellow is the second part of my reply. There is lot of work I need to do with your font if I want to modify as per my requirement, and also there is some core concern I noticed and I am very hopeful that we can solve this. I mean you and your team can solve this. I canl just give you feedback or ask my doubts about this font, rest is totally depend on your and your team. Me and rest of all other users are depending on you only. tiroj thank you very very much again. I hope this font will be the best and simplest Devanagari Unicode font in word. I appreciate you and your team's hard work to build this font. This is the third part of my reply/message. For now I am focusing on how can I modify this font as per my requirement, but I want to go step by step, I have other concern also about this font, but later we will can discuss on that. Because if I start sharing all of those my feedbacks about this font to you, it will maybe to complicated for me to understand your concept about this font logic. So for now I am sharing or asking my doubts which are related to my desired font, but I promise I will feedback you all those things which I noticed, for example dChandrabindu is not positioned visually look nice in some cases, but for now I am avoiding this, because I can not learn or understand everything all at a time. So please don't think like I want only about my desired modified font. I will be here and after solving this issue, if you want, we will be generate a new issue whenever you feel to do this. Since that, again thank you so much. My English is poor so I want to tell you in Hindi, धन्यवाद! मैं कृतज्ञ हूँ कि मुझे आपसे मदद मिल रही है। 🙏🙏 |
Beta Was this translation helpful? Give feedback.
-
|
The context statement in the lookup that substitutes the widest ikar variant glyph can contain sequences of glyphs or groups of glyphs, not just individual glyphs. So I think it should be possible to automatically trigger this substitution when a half form sequence has been triggered by ZWJ. In fact, this is probably what should be happening by default in these Devanagari fonts. At present, the context statemement in the lookup dxxx.pres_ikar\W is
we can add a second statement, so the context is That will susbtitute the wider ikar before any half form sequence (the <d.half_forms> group already exists. I think this will be appropriate, but needs to be tested with the narrowest half forms followed by the narrowest full forms to make sure the ikar is not too wide. It is, of course, possible to add variant conjunct ligatures as you propose, but it may not be necessary to achieve the results you want. A lot of the decisions depend on how you want to work with the font in your document process. Regarding the chandrabindu positioning (and also the anusvara positioning): this is based on our review of manuscript practice and what was done in the best metal types. A lot of technologies, from typwriters to digital fonts, have positioned these mark always above the final stem of the base letter, but that is not the traditional scribal practice. |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
It might be desirable to add some glyph groups in which full forms letters are grouped by their width, so e.g. <d.full_forms.M> (medium or narrower). Then you can have a context string in the lookup for the M ikar: i.e. a narrow half form followed by a narrow or medium full form. The lookups for ikar width selection are set up to be processed as subtables, which means that if a match is found for the substitution input in one lookup, then the subsequent lookups are ignored. So you would keep the contexts in the wide ikar substitution, and this would pick up any half form sequences not already used to trigger the medium ikar. |
Beta Was this translation helpful? Give feedback.
-
/dCh.halfalt is one of the things I included in the font in case it was desired in future, but don’t actually use in the font lookups. Some of these things are there in case someone wants to make a version of the font that works with the older deva shaping model that was used before Windows Vista, or in case someone wants different default behaviour. A lot of Devanagari text is written without a half form of the Cha, and it is treated like the retroflex letters and written with an explicit halant. So that is the default handling in the font. If you want to activate the /dCh.halfalt form and have it used in half form sequences with ZWJ, I suggest going into the half feature substitution lookup and adding the substitution
at the appropriate place. |
Beta Was this translation helpful? Give feedback.
-
|
Thank you tiroj. I understand your second (last) reply that how to activate dCh.halfalt in lookup, I tested it and it works. But for now I don't want to dive deep in to this dx.halfalt feture. For now I want to focus on your answer about my first doubt, I read that many times and try to understand actually how to do that. Honestly I don't understand meaning of your explanation. I don't understand what you mean by "It might be desirable to add some glyph groups in which full forms letters are grouped by their width, so e.g. <d.full_forms.M> (medium or narrower)." I don't understand, do you mean that we need to create more new glyphs for those combination like dx.half(Narrowest)+dxa in font? Because if we need to create whole new glyphs for to use ZWJ it will be many-many glyphs we need to create. I check and I find that I may need 30 to 35 substitute glyphs for our original 1.62 font's glyphs for to get my desired visual look of my text. If your meaning for "add some glyph groups" is not that I explain that what actually I understand from that part of your reply. If your meaning is as I understand then can you please explain it how can we do that? and if your meaning is different from which I actually understand, in this case can you please reexplain your whole reply in little simple way (at the level of my understanding about modifying font, and I am just a beginner) so I will may understand. I know it's tiring to reexplain, so I am totally leaving it on you, whatever you choose I will be grateful for everything I learn from you. And then I also not understand this part of your reply I don't understand this also | <x.ikarW> Maybe this is may reason that I have not any type of programming language knowledge. I don't understand what to do now, still keep trying understand that how can we use ZWJ even if combinations or characters with also have dSignI (ikar matra) or to go ahead with creating those substitute glyphs in font which I will need to create for same visual look of my text similar as my pdf? I really appreciate your all efforts to explain solution for my doubts. Thank you so much for your kind approach and efforts. |
Beta Was this translation helpful? Give feedback.
-
|
By adding glyph groups, I mean defining named lists of glyphs to be used in the substitution lookup context strings. So, for example, <d.half_forms> is an existing glyph group (some tools refer to these as ‘classes’, rather than ‘groups’) that contains a list of all the half form glyph names. What I am suggesting is creating new glyph groups that contain lists of the narrower half forms and narrower full forms, which can then be used in the medium ikar selection lookup context like this:
That context string tells the font to substitute the medium ikar variant when followed by a sequence of a narrow half form and a narrow full form. Regarding subtables, this is a particular kind of structure in the OpenType GSUB table that determines how lookups are processed. In a subtable structure, one can have a grouping of multiple lookups that are processed together. What this means is that when a text string includes a mach for a substution in one of the lookups, it performs the substitution and then ignores the remainder of the lookups. This is a useful structure for processing exceptions, so what I am suggesting is that the final lookup for the widest ikar substitution can have a general context rule
while the lookup for the medium ikar substitution can have an exception to this for the narrower half forms when followed by narrower full forms. In the VOLT project source, the backslash character \ in a lookup name indicates that it and adjacent lookups with the same name to the left of the \ will be compiled as a subtable structure. So the three lookups are processed as a group. |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
|
I just want to say that I am following this discussion and find it very useful, thanks @tiroj for helping out! |
Beta Was this translation helpful? Give feedback.
-
|
Let me begin by saying that I am not at all familiar with Fontforge, and mostly hear bad things about it even from people who are committed to open source and free software. Unfortunately, there does not yet seem to be a good free general purpose font editor, although there are lots of good free libraries like FontTools for post-design production. I am presuming that Fontforge uses the Adobe AFDKO feature file syntax code model for OpenType Layout. That’s fine, but I don’t use it except for simple projects. As explained in the Indigo repo readme, the OTL tables in the Tiro Indic fonts are developed using Microsoft’s VOLT tool, and then merged into the final fonts during the build process. [The VOLT tool is free, but not open source. It only runs on Windows, is almost 30 years old, and was programmed in Visual Basic. I think it is still the best graphical editor for OpenType Layout data.] If you open the compiled fonts in a font editor, you will be seeing feature file syntax based on decompiling of the font tables, however the tool presents those, and this may not exactly correspond to the input in my VOLT projects, and will definitely use different lookup and group names since those are not available from the compiled font. [FontTools contains a volt-to-fea converter that you could use to ensure that your OTL code in Fontforge corresponds to the VOLT project.]
This is a bit difficult for me to follow, because e.g. ‘Devanagari2 lookup 64’ doesn’t mean anything to me, because that is a lookup name that, presumably, Fontforge has applied when it decompiles the GSUB table. When I say ‘glyph group’, I mean a list of glyph names that is stored in the font GDEF table and is available to lookups as e.g. context. So I am not suggesting that you need to create a new lookup, but that you need to define a new list that can be used in additional context rules for the ikar width selection lookups. Groups is the VOLT tool term for these lists of glyph names. Other tools may refer to them as ‘classes’. They can be defined in the AFDKO feature prefix like this:
(where xxxx and yyyy are any additional glyph names separated by commas). A group can consist of a single glyph. You can create a group/class for medium width full forms in the same way:
(where zzzz... is a list of whichever full form glyph names you want to use in in the medium ikar selection context when preceded by a narrow half forms). In summary, I think everything you need to achieve what you want already exists in the font, in terms of the glyphs that exist and the lookups that exist. But I am not sure how or if Fontforge handles some of the things I programmed in my VOLT project, such as the use of subtable structures in the ikar selection. This may depend on what Fontforge uses as a compiler for the feature code: as I recall, Adobe’s compiler doesn’t allow use of subtable structures outside of the kern feature, but the compiler that @khaledhosny updated for fontmake does. I think you only need to edit the existing lookups using some added groups in context rules. |
Beta Was this translation helpful? Give feedback.
-
|
I was so busy responding to your text, that I didn’t pay attention to your screenshots of the editing environment in Fontforge. This looks interesting, but something different from both VOLT and AFDKO feature code, so I am even less able to provide you with simple step-by-step instructions. Hopefully what I have described makes some sense in terms of parallels to functionality in Fontforge. |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
|
Just for reference, there is some documentation for Microsoft VOLT at https://learn.microsoft.com/en-us/typography/tools/volt/tutorial |
Beta Was this translation helpful? Give feedback.
-
miloush, please give a some time to decide either I will learn how to modify font using font using Microsoft VOLT which is totally new for me or I will take shortcut to create new substitutes for those combinations of characters in our this 1.62 font. Because I am/was an average student and it will be may very difficult for me to learn totally new software for to modify our font. Now I have to go back to home, but tomorrow I will defiantly try to study your link, and then I will may able to reply you properly, until thank you miloush. I wish I also that able like you all to understand this font concept. Thank you miloush. |
Beta Was this translation helpful? Give feedback.
-
I check your this suggested tutorial link, and try to use VOLT, whatever I understand from this is very little, but It is interesting, but for now I don't have that much time for to learn totally different software. So for now I am going to create substitutes for those glyphs which I need to be visually look separated. First let me finish my this task using fontforge, and then if I will still may face issue, I will may rethink on it to try this software or not. I am an average Lerner so I need more time to understand any new software that how it works, specially if there are no video tutorial is available or I only dependent on AI or any forum from where I may get answer or lesson about my doubts. Thank you very much miloush. I will may report here or rise an another issue if I will found anything in our this 1.62 version font. Thank you very much again. |
Beta Was this translation helpful? Give feedback.
-
|
Apologies for this delayed and brief response: I am in the middle of a project with a looming deadline, so may not be able to respond to this thread very reliably until after 14 July. I can’t give you specific advice about Fontforge, but I presume that somewhere in that program there is a place where you can define groups/classes, and probably when you open my compiled font the existing groups/classes in the GDEF table will be decompiled to that place in Fontforge. So I suggest looking around for these. You should be able to identify them easily because the existing groups used in the context for the decompiled ikar width selection lookups will appear there. This is where you would add new groups/classes which can then be added to appropriate lookups to refine the contextual rules for the substitutions.
I also made the Nirmala UI font (for Microsoft), and designed the Devanagari portion. This font handles ZWJ exactly the way in which I am suggesting to you to do so, i.e. with contextual rules for the ikar width selection lookups that include half forms. This is something that I can do in the Tiro Devangari fonts in future, but I am not able to do it now and am trying to avoid making lots of tiny adjustments to those fonts for public release, as I prefer to work on a lot of issues together and prepare a signficant update across all the fonts. What I think I could do — after 14 July — is make a custom VOLT project and .input file for you, from which you could compile a local version of the fonts. |
Beta Was this translation helpful? Give feedback.
-
|
Again thank you very much for replying this thread while you have to do lot of things in your busy schedule. I understand it that one professional have to do much many things everyday. I appreciate those every reply in this thread/issue. Until 14 July you may need to focus on your own tasks, I understand it, please don't bother. Here there are a multiple options I get from your reply. As you can't give me specific advice about how we can achieve this using fontforge, but you also suggested me some how I can achieve this task even using fontforge. But unfortunately I don't understand that part of your reply. I try to watch and study our 1.62 font in fontforge's menu which represent font's information. I checked GSUB and GPOS, but I didn't find "GDEF table", while I am typing this I tried to search what it's means for "GDEF table" in fontforge on internet. Internet give me a very long reply and I just read that once, but as I said that I have no mentor or faculty which can guide me for fontforge also and because of this I am just is in confusion stage. I may rise my question to any fontforge forum, but I don't know if there is a dedicated forum for that or not! Now everything I know about how fontforge works is totally dependent on my online research and based on trial and error. for now I feel that I need to choose for which software I am willing to go! This is my first confusion/option :- If I will try to research about how can I do this with fontforge! it will also may take much time like days or may be more then one month to understand that how can I do this which you suggested me for fontforge, in this case I will need to take help of internet or AI, and after all of those my efforts I am not that sure that any AI or internet will be able to solve this type of complex problem. This is my second confusion/option :- Meanwhile this two days I already created those new substitutes for those glyphs which visually I need in my .docx file. Just today morning I created those substitute glyphs and still didn't check it in my .docx file, so I am not that sure that it will be easier for me or not! I can say that for now I feel that this is the only simple solution of my problem. But here in my heart still there is a question how can I do without creating new substitutes. This is my third confusion/option :- As you reply me this "after 14 July — is make a custom VOLT project and .input file for you, from which you could compile a local version of the fonts." you give me an option that you may work on it and provide me .input file of your VOLT project. But if I will choose this option, I will must need proper guidance, because I already try to understand or learn from this link "https://learn.microsoft.com/en-us/typography/tools/volt/tutorial" from @miloush and I feel that it is totally new software for me to understand how it is work! Even with fontforge there are not that much video available in youtube. Just because I want to modify it and then I try to study solely, I took some guidance from AI. I just learned few things about fontforge like how can we modify shape using fontforge's inbuilt tools, and I learned those things which I explained in my last few replies. Honestly I want to learn this thing about Unicode font, but because I haven't that knowledge and I am little bit afraid that how can I understand or learn how Microsoft VOLT is works! I am saying this because I already download it my machine which have Windows 10 and I try to follow @miloush 's link, but there I was feel unable to select lookup which is/are already existing in our 1.62 font. So I am thinking is without core knowledge of any software or without step by step guidance I will may not understand that whole processes which we need while using VOLT! This is the only reason I may hesitating to go with this option. I still didn't try AI for how to work with VOLT, but I know AI is not that much able to solve my every doubts where I am not that familiar with Tech Knowledge about Unicode/any font. All I need to step by step guidance, and without it, it will may take very much long time to working for me to with VOLT. If @tiroj or @miloush will not be able to guide me step by step that how to use VOLT, I will may not able to achieve our/my task, even if you provide me that ".input" file. Because I really don't know how to work with that file in VOLT. I am really don't want to pushing you all to that level where you will may need to guide me step by step. All I can promise is, I will try to research here & there on internet or using AI to know how can I work with VOLT, and then if I will find that great person like you while searching here/there I will may learn how to deal with VOLT. My study about VOLT is very-very limited but I didn't find those options to select any existing lookup or to export my work as a .ttf font. So These are my confusions, and I really don't know with which I will need to go. I expect that you may understand my level of knowledge, and I have no complain for anything like if you reply me late, I understand that. Thank you @tiroj and @miloush for giving your precious time for to reply me. I am and will be always grateful for this. Again, thank you so much all. |
Beta Was this translation helpful? Give feedback.































Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
[Removed original bug report related to contextual ikar width selection interaction with stylistic set conjunct variants in Hindi and Marathi fonts. See original Issue #63 for details and fix report.]
Beta Was this translation helpful? Give feedback.
All reactions