On Saturday, July 27, 2019 at 2:20:34 PM UTC+4:30, TonyM wrote:
>
> Mohammad,
>
> Yes the single prefix statement allows oneWord where "one" is the prefix 
> of another "word"!
>
> And to do what you say more literally you could use "contains[one]"
>
> This of course can be stopped if required with
>
> filter="[<__x__>prefix[one]suffix[one]]"
>
>
> This do the job!

 

> If we ever get an equals[] operator this would become
> [<__x__>equals[one]]
> Not real yet :)
>
> Regards
> Tony
>
> On Saturday, July 27, 2019 at 7:30:23 PM UTC+10, Mohammad wrote:
>>
>> Thanks Tony!
>> It works great! I also used a simple version as this
>>
>>
>> \define case(x)
>> <$list filter="[<__x__>prefix[one]]">
>> This is case one.
>> </$list>
>> <$list filter="[<__x__>prefix[two]]">
>> This is case two
>> </$list>
>> <$list filter="[<__x__>prefix[three]] [<__x__>prefix[four]]">
>> This is case three and four
>> </$list>
>> \end
>>
>> <<case "one">>
>> <<case two>>
>> <<case "three tag">>
>> <<case "four dogs come">>
>>
>> The prefix is case sensitive and it is good
>> but it also handle cases like oneWord where one is part of another word!
>>
>> --Mohammad
>>
>>
>> On Saturday, July 27, 2019 at 11:12:56 AM UTC+4:30, TonyM wrote:
>>>
>>> Mohammad,
>>>
>>> I some ways I built this so the empty message did not require a macro, 
>>> to keep all the logic in the one block.
>>>
>>> I would imaging people would copy such a block as follows
>>> <$list filter="[<casevariable>] ~[[::false]]" variable=case>
>>>    <$list filter="[<case>prefix[::false]]" variable=case>
>>>         Do this if no case value
>>>    </$list>
>>>    <$list filter="[<case>!prefix[::false]]" variable=case>
>>>         Do this for every case except empty/false
>>>    </$list>
>>>    <$list filter="[<case>prefix[caseone]]" variable=case>
>>>         Process "caseone"<br>
>>>    </$list>
>>>    <$list filter="[<case>prefix[casetwo]]" variable=case>
>>>         Process "casetwo"<br>
>>>    </$list>
>>>    <$list filter="[<case>prefix[casethree]]" variable=case>
>>>         Process "casethree"<br>
>>>    </$list>
>>> <!-- Even this -->
>>>    <$list filter="[<case>prefix[casetwo]] [<case>prefix[casethree]]" 
>>> variable=case>
>>>         Process "casetwo" and "casethree"<br>
>>>    </$list>
>>> </$list>
>>> Then change add remove as needed for their application
>>>
>>> However in the unlikely case people need to use "nested case statements 
>>> or reuse them, here is a Quick macro version
>>> \define in-cases-of(case-filter)
>>> <$list filter="$case-filter$ ~[[::false]]" variable=case>
>>>    <$list filter="[<case>prefix[::false]]" variable=case>
>>>         Do this if no case value
>>>    </$list>
>>>    <$list filter="[<case>!prefix[::false]]" variable=case>
>>>         Do this for every case except empty/false
>>>    </$list>
>>>    <$list filter="[<case>prefix[caseone]]" variable=case>
>>>         Process "caseone"<br>
>>>    </$list>
>>>    <$list filter="[<case>prefix[casetwo]]" variable=case>
>>>         Process "casetwo"<br>
>>>    </$list>
>>>    <$list filter="[<case>prefix[casethree]]" variable=case>
>>>         Process "casethree"<br>
>>>    </$list>
>>> <!-- Even this -->
>>>    <$list filter="[<case>prefix[casetwo]] [<case>prefix[casethree]]" 
>>> variable=case>
>>>         Process "casetwo" and "casethree"<br>
>>>    </$list>
>>> </$list>
>>> \end
>>>
>>> <<in-cases-of "[{!!tiddler-mode}]">>
>>> Which still needs editing for the specific situation
>>>
>>> CHanges most likely would be only
>>>
>>>    - Change the values for caseone casetwo and casethree to those you 
>>>    want to use
>>>    - Add remove other responses to different case values or 
>>>    combinations thereof.
>>>
>>> Additional interesting patterns here
>>>
>>>    - The above method of passing filters to a macro as a parameter, 
>>>    allows you to pass tiddler content, field content, literal values, 
>>> variable values, 
>>>    macronames etc.. which sometimes suddenly results in a macro for one 
>>>    purpose suddenly be capable of another purpose.
>>>
>>> In a similar way we can pass a filter to a macro as follows
>>>
>>> \define my-macro(filter)
>>> {{{ $filter$ }}}
>>> {{{ $filter$ ||templatename}}}
>>> \end
>>> or
>>> \define my-macro(filter template)
>>> {{{ $filter$ }}}
>>> {{{ $filter$ ||$templatename$}}}
>>> \end
>>>
>>> Once again all this is untested but based on experience.
>>>
>>> Regards
>>> Tony
>>>
>>>
>>>
>>> On Saturday, July 27, 2019 at 2:39:30 PM UTC+10, Mohammad wrote:
>>>>
>>>> Hi Tony!
>>>>  This is great and needs some examples to explore the pros and cons!
>>>> By the way as you said the application may vary case by case and a 
>>>> macro may not be a good option.
>>>>
>>>> --Mohammad
>>>>
>>>> On Saturday, July 27, 2019 at 4:18:31 AM UTC+4:30, TonyM wrote:
>>>>>
>>>>> Mohammad,
>>>>>  
>>>>>
>>>>>> We need to wrap inside a macro to present a construct like
>>>>>>
>>>>>> <<select-case  condition array-of-cases>>
>>>>>>
>>>>>>>  
>>>>>>>
>>>>>>
>>>>> In someways I am suggesting you do not need to make a "select-case 
>>>>> macro " because the whole case structure including the empty case can be 
>>>>> written inside the one outer list object. Thus it may be included 
>>>>> something 
>>>>> like this 
>>>>> {{invoice-total}}
>>>>> where the case test various conditions and generates a result eg if 
>>>>> tax applies etc...
>>>>>
>>>>> However if you do want to make a macro as in your example the case 
>>>>> structure will still need to know how to handle your array-of-cases
>>>>>
>>>>> I would think its more like this;
>>>>> \define if-else-test(filter)
>>>>> <$list filter="[[$filter$]] ~[[::else]]" variable=case>
>>>>>     <$list filter="[<case>!prefix[::else]]" variable=case>        
>>>>>        filter-not-empty do-this for each result
>>>>>     </$list>
>>>>>   <$list filter="[<case>prefix[::else]]" variable=case>
>>>>>         else do-that
>>>>>    </$list>
>>>>>    <!-- other cases if desired -->
>>>>> </$list>
>>>>> \end
>>>>> <<if-else-test "filter">>
>>>>> note: untested
>>>>>
>>>>> Regards
>>>>> Tony
>>>>>
>>>>

-- 
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/35d73a13-a55f-4f9e-a8e8-cc814f0207c0%40googlegroups.com.

Reply via email to