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.

Reply via email to