Hi Jean-Pierre,

If you don't mind using the TiddlyWiki prerelease, I suggest the brand new
subsort filter operator as well as the newly parametrised trim operator:

\define glossaryLetter()
<ul>
<$vars initial={{{ [<currentTiddler>lowercase[]] }}}>
<$vars initial_regexp={{{ [<initial>compare:string:eq[e]]
+[then[(e|é)]else<initial>addprefix[^]] }}}>
<$vars tail_filter="[trim:prefix[e]trim:prefix[é]]">
<$list filter="[tag[glossaire]regexp<initial_regexp>]
+[sortsub<tail_filter>]">
<li><$link/></li>
</$list>
</$vars>
</$vars>
</$vars>
</ul>
\end

Cheers,
-- Xavier


On Thu, Oct 22, 2020 at 11:50 PM Jean-Pierre Rivière <
[email protected]> wrote:

> 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 <
>>> [email protected]> 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 [email protected].
>>>> 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 [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/tiddlywiki/eb2b1a3b-1d93-4950-8308-43f8c14ee7d3n%40googlegroups.com
> <https://groups.google.com/d/msgid/tiddlywiki/eb2b1a3b-1d93-4950-8308-43f8c14ee7d3n%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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/tiddlywiki/CADeSwYM3%2BZqqTrkO0zJX5tU-D3STMrOb0c-n4-UN%2B1dwWYehbw%40mail.gmail.com.

Reply via email to