So I've been digging into this a bit, and it would appear that the `toUpper()` 
method on the SWBuf class isn't working. I did a little hacking on the SWModule 
class and dropped in some debugging `printf` calls to see what was going on and 
why I wasn't getting my expected results. Here are I print out the word being 
queried:

```
printf("word check: %s\n", words[i].toUpper().c_str());
```

And here is the result:

```
word check: God
```

I'm doing this in between lines 771 and 772 in `swmodule.cpp`. I did the same 
type of thing on the `textBuf` in the search method and no casing is changed. 
Any thoughts on all this?

I am wondering if it has to do with the more modern OS that I am using. I am 
attempting this on Ubuntu 20.04, and Sword 1.9.0 (which is the latest version 
best I can tell) is over 2 years old.

That brings me to the next question: What is the development status on this? Is 
it being actively worked on? I would be willing to get involved, but I am only 
just now learning C/C++, So I would need some hand-holding, so-to-speak, to get 
me up to speed.


- Patrick
On Apr 19, 2023 at 10:32 AM -0500, Patrick Stephan <pstephan1...@gmail.com>, 
wrote:
> I am new to c/c++ and to this library, so I could be misunderstanding how the 
> module search system works, but I think I may have found a bug?
>
> Here is my code:
> ```
> #include "vector"
> #include "swmgr.h"
> #include "swmodule.h"
> #include "markupfiltmgr.h"
> #include "modules.h"
> #include "php_sword.h"
>
> #if defined(USECXX11REGEX)
> #include <regex>
> #ifndef REG_ICASE
> #define REG_ICASE std::regex::icase
> #endif
> #elif defined(USEICUREGEX)
> #include <unicode/regex.h>
> #ifndef REG_ICASE
> #define REG_ICASE UREGEX_CASE_INSENSITIVE
> #endif
> #else
> #include <regex.h>
> #endif
>
> using namespace::sword;
>
> //  unrelated function here...
>
> int sword_search_module(char* module_name, char* search_string) {
>     SWMgr mgr(new MarkupFilterMgr(FMT_XHTML));
>
> //  mgr.setGlobalOption("Headings", "On");
> //  mgr.setGlobalOption("Strong's Numbers", "Off");
> //  mgr.setGlobalOption("Lemmas", "Off");
> //  mgr.setGlobalOption("Greek Accents", "Off");
> //  mgr.setGlobalOption("Footnotes", "On");
> //  mgr.setGlobalOption("Cross-references", "On");
>
>     mgr.setGlobalOption("Headings", "Off");
>     mgr.setGlobalOption("Strong's Numbers", "Off");
>     mgr.setGlobalOption("Lemmas", "Off");
>     mgr.setGlobalOption("Greek Accents", "Off");
>     mgr.setGlobalOption("Footnotes", "Off");
>     mgr.setGlobalOption("Cross-references", "Off");
>
>     SWModule *module = mgr.getModule(module_name);
>
>     /*
>      * >=0 - regex; (for backward compat, if > 0 then used as additional 
> REGEX FLAGS)
>      * -1  - phrase
>      * -2  - multiword
>      * -3  - entryAttrib (eg. Word//Lemma./G1234/)   (Lemma with dot means 
> check components (Lemma.[1-9]) also)
>      * -4  - clucene
>      * -5  - multilemma window; flags = window size
>      */
>
>     ListKey results = module->search(search_string, -2, REG_ICASE);
>
>     for (int i = 0; i < results.getCount(); i++) {
>         module->setKey(results.getElement());
>         std::cout
>             << results.getText()
>             << " - "
>             << module->renderText()
>             << std::endl;
>         results.increment();
>     }
>
>     return results.getCount();
> }
> ```
>
> Given that code, If I run a search for "so loved god" against the KJV module, 
> I get 3 verses: Hosea 2:23, Hosea 3:1, and I Timothy 6:2. I'm not sure why I 
> Tim 6:2 is listed because it contains niether "so", nor "god". There are also 
> a slew of verses that are expected to show up but don't (like John 3:16), 
> presumably because the case-insensitive flag `SEARCHFLAG_STRICTBOUNDARIES | 
> REG_ICASE
> ` isn't working. BTW, I am compiling my code against Ubuntu 20.04 and 
> `REG_ICASE` resolves to `2`.
>
> Also, If I include the `SEARCHFLAG_STRICTBOUNDARIES` flag like so: 
> `SEARCHFLAG_STRICTBOUNDARIES | REG_ICASE`, and search for 'god so loved', I 
> get no results, further enforcing my theory that the `REG_ICASE` flag isn't 
> doing anything. If I search for 'God so loved' then I get 6 results. I am, 
> however expecting 10. Here are the verses that are not returned that I expect 
> to:
>
> • Nehemiah 13:26
> • Galatians 2:20
> • 2 Peter 1:17
> • I John 4:10
>
> I have also tried with replacing the if/else block at the top with just 
> `#include "regex.h"`. But that makes no difference.
> Thank you for any help
>
> - Patrick
_______________________________________________
sword-devel mailing list: sword-devel@crosswire.org
http://crosswire.org/mailman/listinfo/sword-devel
Instructions to unsubscribe/change your settings at above page

Reply via email to