Jump to content

Module:Str find word/sandbox/doc

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by DePiep (talk | contribs) at 16:32, 19 March 2023. The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
TOC: #code (edit)

Module:Str find word/links/doc

This module looks for a word being present in a comma-separated list of words. It then returns a True or False value. By default, the True-value returned is the found word itself; the False-value is a blank string. Implements {{Str find word}}.

For example, in the source string 'foo, bar' the word 'bar' appears, but the word 'november' does not.

True: {{#invoke:Str find word|main |source=foo, bar|word=bar}} → >bar<
False: {{#invoke:Str find word|main |source=alpha, beta, gamma|word=november}} → ><

Complete words: the complete word is 'foobar' ... example needed ...

Multiple word check: The search can be extended to check for multiple words being present.

AND-list of words, all words must be present:

True: {{#invoke:Str find word|main |source=alpha, beta, gamma|andwords=beta, alpha}} → >beta,alpha<
False: {{#invoke:Str find word|main |source=alpha, beta, gamma|andwords=beta, omega}} → ><

OR-list of words, at least one off the words must be present:

True: {{#invoke:Str find word|main |source=alpha, beta, gamma|orwords=beta, alpha}} → >beta,alpha<
False: {{#invoke:Str find word|main |source=alpha, beta, gamma|orwords=beta, omega}} → >beta<

The module is aimed at template code usage. (The editor does not have to apply Lua patterns like [%a%d]*).

Parameters

All parameters (synonyms)
{{Str find word
|string = 
|word   =
|orwords  = 
|case=
|yes =
|no  =
|explain =
}}
{{Str find word
|s   = 
|w   =
|orw =
|case=
|yes =
|no  =
|explain =
}}
{{Str find word
|s= source= 
|word= andwords= andw=
|orwords= orw=
|case=
|yes=
|no=
|explain=
<!-- |sep=todo -->
}}
{{Str find word |s= |w= |andw= |orw= |case= |yes= |no= |explain=}}

Basic: source, word

{{Str find word
|source =
|word   =
}}
When the word is found in the source (True), the function returns the word itself (by default), or |yes= value (when entered non-empty).
When not found (False), the function returns a empty string (''), or the |no= value when entered.
|source=alpha, foo, lima |word=foo foo Green tickY
|source=alpha, foo, lima |word=bar Red XN full word bar not in the source
|source=alpha, foo, lima |word=foobar Red XN word foobar not in the source as full word

Case, Literal,

todo: examplify
|source=
|s=
|word=
|w=
|case= result note
|s=alpha, foo, lima |w=foo → yes
|s=alpha, foo, lima |w=foobar → no
|s=alpha, foobar, lima |w=foo → no 'foo' is not the complete word
|s=alpha, FOO, lima |w=foo → yes |case=false: a=A (default)
|s=alpha, FOO, lima |w=foo → no |case=true: a=/=A

AND-, OR-wordlist checks

|word= as noted, can be a list of words. All will be checked with the AND-requirement (each word must be present).
|andwords= accepts a list of words that all will be checked with the AND-requirement (each word must be present).
When both |word=, |andwords= are present, they are combined into one single AND-wordlist.
|orwords= accepts a list of words that all will be checked with the OR-requirement (at least one of the words must be present).
|source=
|s=
|andwords=, |andw=
|word=
|w=
|orwords=
|orw=
result TODO fix note
|s=alpha, foo, lima, delta |andw=delta, lima delta,lima both words present in the source
|s=alpha, foo, lima, delta |andw=foo, nov AND-logic: A word in the AND-list is not present (nov), so false
|s=alpha, foo, lima, delta |andw=delta delta |w= and |andw= are combined
|s=alpha, foo, lima, delta |orw=delta, lima delta,lima both OR-words are present in the source
|s=alpha, foo, lima, delta foo OR-logic: one of the words is present (|foo=), so true
|s=alpha, foo, lima, delta |andw=alpha, lima |orw=foo, nov alpha,lima,foo
|s=alpha, foo, lima, delta |andw=bar, april |orw=nov, dec none of the OR-words is present, so false

True, False rephrase options |yes, no=

... |yes=Yes, hit |no=Not found
|source=alpha, foo, lima |word=foo Yes, hit Green tickY
|source=alpha, foo, lima |word=foobar No, not found Red XN

Edge cases: (blank input,)

todo

issues and ideas

  • Keep the order, Foo, bar -> foo(1), bar(2)
eg table col userinput options, then cols in that order?
  • Check comma example above ("Hello, world") (currently returns: 2 hitwords & sep=comma Dec2022)
and resolve nil
  • option |sep= for output list >, < dflt
  • allow pattern input = recognise (150%, 175%, ..) so patterns again ;-)
  • ignore characters eg "/"?
  • cleanup (RLM), stated: named params only (wrt WS)
  • option add prefix, suffix -- when success only
  • list presentation..

Errors and analysis

  • The logic itself does not produce errors. There is always a True of False result.
There are no logical errors foreseen: any flaw in the input will return a False result (for example, no input strings to check were entered).
  • |explain=true: when in Preview, display a report on input, output and the logical steps (debug).
  • |explain=testcases: When set in ns Template or User on subpage /testcases, the Preview report is static (shown permanently).

code