Skip to content

Commit

Permalink
naija
Browse files Browse the repository at this point in the history
Signed-off-by: Finbarrs Oketunji <[email protected]>
  • Loading branch information
0xnu committed Apr 19, 2024
1 parent ecb0c02 commit 7405e2e
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 0 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
# Changelog

## 1.0.1 - 2024-04-19
* Enhanced for Yoruba, Igbo and Hausa names

## 1.0.0 - 2024-04-19
* Initial Release
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ func main() {
"Watkins",
"Robert Johnson",
"Samantha Williams",
"Olanrewaju Akinyele", // Yoruba
"Obinwanne Obiora", // Igbo
"Abdussalamu Abubakar", // Hausa
}

// Encode each name using NYSIIS
Expand Down
38 changes: 38 additions & 0 deletions nysiis.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,16 @@ func (n *Nysiis) translateFirstCharacters(name string) string {
name = "FF" + name[2:]
case strings.HasPrefix(name, "SCH"):
name = "SSS" + name[3:]
case strings.HasPrefix(name, "GB"):
name = "J" + name[2:] // Igbo: 'Gb' -> 'J'
case strings.HasPrefix(name, "KP"):
name = "P" + name[2:] // Igbo: 'Kp' -> 'P'
case strings.HasPrefix(name, "NW"):
name = "W" + name[2:] // Igbo: 'Nw' -> 'W'
case strings.HasPrefix(name, "TS"):
name = "S" + name[2:] // Yoruba: 'Ts' -> 'S'
case strings.HasPrefix(name, "SH"):
name = "S" + name[2:] // Hausa: 'Sh' -> 'S'
}
return name
}
Expand Down Expand Up @@ -89,6 +99,34 @@ func (n *Nysiis) generateKey(name string) string {
char = prevChar
} else if char == 'W' && (prevChar == 'A' || prevChar == 'E' || prevChar == 'I' || prevChar == 'O' || prevChar == 'U') {
char = prevChar
} else if char == 'G' && i+1 < len(name) && name[i+1] == 'B' {
char = 'J' // Igbo: 'Gb' -> 'J'
} else if char == 'K' && i+1 < len(name) && name[i+1] == 'P' {
char = 'P' // Igbo: 'Kp' -> 'P'
} else if char == 'N' && i+1 < len(name) && name[i+1] == 'W' {
char = 'W' // Igbo: 'Nw' -> 'W'
} else if char == 'T' && i+1 < len(name) && name[i+1] == 'S' {
char = 'S' // Yoruba: 'Ts' -> 'S'
} else if char == 'S' && i+1 < len(name) && name[i+1] == 'H' {
char = 'S' // Hausa: 'Sh' -> 'S'
}

// Handle vowel harmony and tonal differences
if n.vowels[char] && i > 0 && n.vowels[prevChar] {
if prevChar == 'A' || prevChar == 'O' || prevChar == 'U' {
if char == 'E' || char == 'I' {
char = 'A'
}
} else if prevChar == 'E' || prevChar == 'I' {
if char == 'A' || char == 'O' || char == 'U' {
char = 'E'
}
}
}

// Ignore tonal differences
if char >= 'A' && char <= 'Z' {
char = rune(strings.ToUpper(string(char))[0])
}

if char != prevChar {
Expand Down
15 changes: 15 additions & 0 deletions nysiis_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,23 @@ func TestNysiis_Encode(t *testing.T) {
encodedName3 := nysiis.NewNysiis().Encode(name3)
fmt.Printf("Encoded name for %q: %s\n", name3, encodedName3)

name4 := "Olanrewaju Akinyele"
encodedName4 := nysiis.NewNysiis().Encode(name4)
fmt.Printf("Encoded name for %q: %s\n", name4, encodedName4)

name5 := "Obinwanne Obiora"
encodedName5 := nysiis.NewNysiis().Encode(name5)
fmt.Printf("Encoded name for %q: %s\n", name5, encodedName5)

name6 := "Abdussalamu Abubakar"
encodedName6 := nysiis.NewNysiis().Encode(name6)
fmt.Printf("Encoded name for %q: %s\n", name6, encodedName6)

// Output:
// Encoded name for "Watkins": WATCAN
// Encoded name for "Robert Johnson": RABART
// Encoded name for "Samantha Williams": SANANT
// Encoded name for "Olanrewaju Akinyele": OLANRA
// Encoded name for "Obinwanne Obiora": OBAWAN
// Encoded name for "Abdussalamu Abubakar": ABDASA
}

0 comments on commit 7405e2e

Please sign in to comment.