]> granicus.if.org Git - nethack/commitdiff
fix github issue #552 - "an ukulele"
authorPatR <rankin@nethack.org>
Sat, 17 Jul 2021 15:32:07 +0000 (08:32 -0700)
committerPatR <rankin@nethack.org>
Sat, 17 Jul 2021 15:32:07 +0000 (08:32 -0700)
Add "ukulele" to the exceptions that yield "a u<something>" in case
someone names their fruit that.  Add the shortened form "uke" too.

While in there, generalize "one" handling to accept "one", "one<space>
<anything>" and "one<underscore><anything>" as exceptions in addition
to existing "one<dash><anything>", and "eu<anything>" to replace
existing "eucalyptus".

Fixes #552

doc/fixes37.0
src/objnam.c

index 9a2b103ecbad7b8ef1b22186d1813a5ad7817ea1..946edc7da38012e0d4dd012c8d56f3f03d9ac88a 100644 (file)
@@ -569,6 +569,7 @@ defer encumbrance check during polymorph to new man; newman() -> redist_attr()
        -> encumber_msg() could report change in encumbrance that immediately
        became obsolete if polyman() subsequently restored old attributes
 fix heap-use-after-free when attacking monster with potion
+for "a" vs "an", add ukulele and uke as exceptions for "an u<anything>"
 
 
 Fixes to 3.7.0-x Problems that Were Exposed Via git Repository
index e7e00187c477ae111368cdb8b087273adf8ef1e7..819ed6dc1119b84cada47c63a9c24d789b664937 100644 (file)
@@ -1685,10 +1685,16 @@ just_an(char *outbuf, const char *str)
                || !strcmpi(str, "iron bars") || !strcmpi(str, "ice")) {
         ; /* no article */
     } else {
-        if ((index(vowels, c0) && strncmpi(str, "one-", 4)
-             && strncmpi(str, "eucalyptus", 10) && strncmpi(str, "unicorn", 7)
-             && strncmpi(str, "uranium", 7) && strncmpi(str, "useful", 6))
-            || (index("x", c0) && !index(vowels, lowc(str[1]))))
+        /* normal case is "an <vowel>" or "a <consonant>" */
+        if ((index(vowels, c0) /* some exceptions warranting "a <vowel>" */
+             /* 'wun' initial sound */
+             && (strncmpi(str, "one", 3) || (str[3] && !index("-_ ", str[3])))
+             /* long 'u' initial sound */
+             && strncmpi(str, "eu", 2) /* "eucalyptus leaf" */
+             && strncmpi(str, "uke", 7) && strncmpi(str, "ukulele", 7)
+             && strncmpi(str, "unicorn", 7) && strncmpi(str, "uranium", 7)
+             && strncmpi(str, "useful", 6)) /* "useful tool" */
+            || (c0 == 'x' && !index(vowels, lowc(str[1]))))
             Strcpy(outbuf, "an ");
         else
             Strcpy(outbuf, "a ");