I have not been able to achieve what I wanted in this case with subfilter, but I've been successul with regexp. So I post it here.
\define glossaryLetter() <$set name="initial" filter="[{!!title}lowercase[]]"> <$set name="others" filter="[<initial>compare:string:eq[e]then[é]]"> <$wikify name="pattern" text="""(?i)^([(]([^)]+[)] )?)?[<$macrocall $name="initial"/><$macrocall $name="others"/>]""" output="text"> <ul> <$list filter="[tag[glossaire]regexp<pattern>]"><li><$link/></li></$list> </ul> </$wikify></$set></$set> \end used in a tag name "E" or 3B" for instance. I finally decided to hard-code the "e" case. It's simpler and yet I have retain what I would get if I used a dictionary so that the rest of the code would not be affected if I change my mind. Note that with regular expression I can now handle entry like "(really good) song for folk guitar" at both r or s (my choice to have it at both and not only at s) but this one is not sorted accordingly (would require a sorting function, not sure I can do it without js and it only concern one tiddler so far). I would really appreciate a solution with subfilter. Le jeudi 22 octobre 2020 à 18:57:26 UTC+2, Jean-Pierre Rivière a écrit : > Hi Xavier! > > I've already used subfilter. As I used it and understood it, it is of use > as a substitude for mapping within filters. But yes, I can map an array of > just one element. I did not think of that. > > As for dictionnary, I was already planning its use. But to mark "é" as a > co-letter for "e", nothing more. But from there, my problem is to build > dynamically the filter for each letter and especially for "e". > > Subfilter allow writing something like > > subfilter<first-select-filter> prefix[e] > > but not something like > > subfilter<first-select-filter> <second-filter> > > And since there is no filter that could have conditional filter (we can > only have conditional strings with "then" and "else"), I cannot see where > subfilter may help me. > > So I looked for another way: using "regexp" instead of "prefix". Where I > would use "regexp<re>" where re is "^[eé]" or "^[a]" for instance. But it > doesn''t work, as I get all the titles, and not only the one beginning with > "e" or "é". See my code for use within "E" tiddler below: > > \define glossy() > <$set name="initial" filter="[{!!title}lowercase[]]"> > <$set name="others" value="é"> > <$set name="pattern" value="^[<<initial>><<others>>]"> > filter <<filter>> > <ul> > <$list filter="[tag[glossaire]regexp<pattern>] > +[sortan[]]"><li><$link/></li></$list> > </ul> > </$set></$set></$set> > \end > > <<glossy>> > > with the control of "others", I'll be able to achieve my goal. But I have > difficulty with regexp (but not with regular expressions per se) which I > shall address in another topic. > > > > Le mercredi 21 octobre 2020 à 13:23:56 UTC+2, Xavier a écrit : > >> Hi Jean-Pierre, >> >> I was about to point you to dictionaries >> <https://tiddlywiki.com/#DictionaryTiddlers> and suggest that you use >> getindex <https://tiddlywiki.com/#getindex%20Operator><>, but now I'm >> not sure if I understand your issue correctly. One sure thing however: you >> cannot insert a filter string like <<special-case>> into an existing filter >> expression by simply referencing the string variable. This is the main >> reason of the errors you get. Instead, you need to use the subfilter >> <https://tiddlywiki.com/#subfilter%20Operator> operator. >> >> Cheers, >> -- Xavier >> >> >> On Wed, Oct 21, 2020 at 11:35 AM Jean-Pierre Rivière < >> jn.pierr...@gmail.com> wrote: >> >>> Hi Tones, >>> >>> My problem is not so much the order of the letter as of now. However, >>> your input may well serve me. >>> >>> Non, my real concerne is that I am not successfull in getting a special >>> filter for e, even though I already have this special case ready. I'm >>> unable to connect it dynamically. >>> >>> I have seen in an other thread that I can do things like <$sort >>> filter=<<my-filter>>/> >>> >>> So today I tried to build the complete filter. But I've not been >>> sucessful at that. My attempt: >>> >>> first, the filter I need for e (here within a list widget):<$set >>> name="special" filter="[<initial>compare:string:eq[e]<special-case>]"> >>> >>> <$list >>> filter="[tag[glossaire]prefix<initial>][tag[glossaire]prefix[é]]+[sortan[]]"> >>> >>> for all the other letter, that is only: >>> >>> $list filter="[tag[glossaire]prefix<initial>]"/> >>> >>> (it seems I don't need sorting then. Is that a coincidence or is it a >>> general truth?) >>> >>> What I coded: >>> >>> \define glossy() >>> <$set name="initial" filter="[{!!title}lowercase[]]"> >>> <$set name="special-case" value="=[tag[glossaire]prefix[é]]+[sortan[]]"> >>> >>> <$set name="special" >>> filter="[<initial>compare:string:eq[e]<special-case>]"> >>> >>> special <<special>> now defined >>> >>> <$set name="ext-filter" >>> value="[tag[glossaire]prefix<initial>]<$macrocall $name=special>>"> >>> >>> ext-filter <<ext-filter>> ready >>> >>> <ul> >>> <$list filter=<<ext-filter>>> >>> <li><$link/></li> >>> </$list> >>> </ul> >>> </$set> >>> </$set> >>> </$set> >>> \end >>> >>> My results: >>> >>> special =[tag[glossaire]prefix[é]]+[sortan[]] now defined >>> >>> ext-filter [tag[glossaire]prefix]=[tag[glossaire]prefix[é]]+[sortan[]] >>> ready >>> >>> en-tête de colonne ou de ligne >>> ensemble de pages >>> environnement maîtrisé >>> <$macrocall >>> $name=special>> >>> >>> If I omit the double quotes arount the filter value in setting >>> ext-filter, I'm getting a grammar error (no big surprise!)/ >>> >>> Le mercredi 21 octobre 2020 à 01:08:50 UTC+2, TW Tones a écrit : >>> >>>> Other "half baked" ideas, >>>> >>>> >>>> - é list-before or list-after e >>>> - On tiddlywiki.com see the >>>> <<tag "Order Operators <https://tiddlywiki.com/#Order%20Operators>"> >>>> > >>>> >>>> >>>> Regards >>>> Tones >>>> >>>> On Wednesday, 21 October 2020 10:06:13 UTC+11, TW Tones wrote: >>>>> >>>>> Jean-Pierre, >>>>> >>>>> Just a quick idea not thought through >>>>> >>>>> In the pre-release there is the sortby operator. >>>>> >>>>> Perhaps having a sort macro >>>>> \define sorter() A a B b C c D d E é e .... >>>>> Then sortby<sorter> >>>>> >>>>> You may need to split[] the letters to obtain the first letter etc. >>>>> >>>>> Regards Tones >>>>> >>>>> >>>>> On Wednesday, 21 October 2020 09:50:11 UTC+11, Jean-Pierre Rivière >>>>> wrote: >>>>>> >>>>>> In French, a glossary is as simple as in English except for the >>>>>> letter E where we also some entry starting with É to take into account. >>>>>> >>>>>> This can be done like this: >>>>>> >>>>>> <ul> >>>>>> <$list >>>>>> filter="[tag[glossaire]prefix<initial>]=[tag[glossaire]prefix[é]]+[sortan[]]"><li><$link/></li> >>>>>> </ul> >>>>>> >>>>>> where initial is a variable containing "e" (my glossary is all >>>>>> lowercase, and each word in the entry has a tiddler tagged "glossaire"). >>>>>> >>>>>> But I want to build my glossary automatically. How can I make a >>>>>> special case for the E letter? My difficulty is to extend my filter >>>>>> (this >>>>>> is the part starting from the = sign). I am open t any way to achieve >>>>>> this. >>>>>> >>>>>> I have tried to build a string containing >>>>>> "=[tag[glossaire]prefix[é]]+[sortan[]]" and to add it if initial is e, >>>>>> but >>>>>> this does not work as I have written it: >>>>>> >>>>>> \\define glossy() >>>>>> <$set name="initial" filter="[{!!title}lowercase[]]"> >>>>>> <$set name="special-case" >>>>>> value="=[tag[glossaire]prefix[é]]+[sortan[]]"> >>>>>> >>>>>> <$set name="special" >>>>>> filter="[<initial>compare:string:eq[e]then<special-case>]"> >>>>>> >>>>>> special <$macrocall $name="special"> now defined >>>>>> >>>>>> <ul> >>>>>> <$list filter="[tag[glossaire]prefix<initial>]<$macrocall >>>>>> $name="special"/>"> >>>>>> <li><$link/></li> >>>>>> </$list> >>>>>> </ul> >>>>>> </$set> >>>>>> </$set> >>>>>> </$set> >>>>>> \end >>>>>> >>>>>> When I use <<glossy>> in the "E" tiddler, all I can see is: >>>>>> >>>>>> special =[tag[glossaire]prefix[é]]+[sortan[]] >>>>>> >>>>>> and nothing else. the thing printed seems OK but is that what it >>>>>> seems to be? The process clearly seems to be interrupted. >>>>>> >>>>> -- >>> You received this message because you are subscribed to the Google >>> Groups "TiddlyWiki" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to tiddlywiki+...@googlegroups.com. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/tiddlywiki/1f645183-dce9-4a0c-9679-4b33f7d27cf3n%40googlegroups.com >>> >>> <https://groups.google.com/d/msgid/tiddlywiki/1f645183-dce9-4a0c-9679-4b33f7d27cf3n%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >> -- You received this message because you are subscribed to the Google Groups "TiddlyWiki" group. To unsubscribe from this group and stop receiving emails from it, send an email to tiddlywiki+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/tiddlywiki/eb2b1a3b-1d93-4950-8308-43f8c14ee7d3n%40googlegroups.com.