Changeset d2ba33c
- Timestamp:
- Aug 16, 2017, 12:53:41 PM (8 years ago)
- Branches:
- master
- Children:
- 5dee79a
- Parents:
- 47225c9
- git-author:
- Jason Gross <jgross@mit.edu> (01/01/14 20:59:51)
- git-committer:
- Jason Gross <jasongross9@gmail.com> (08/16/17 12:53:41)
- Files:
-
- 1 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
perl/lib/BarnOwl/Message/Zephyr.pm
rdce72c1 rd2ba33c 9 9 10 10 use base qw( BarnOwl::Message ); 11 use Unicode::Normalize qw( NFKC );12 11 13 12 sub strip_realm { … … 22 21 my ($user, $realm) = split(/@/,$principal); 23 22 return $realm; 23 } 24 25 sub casefold_principal { 26 my $principal = shift; 27 # split the principal right after the final @, without eating any 28 # characters; this way, we always get at least '@' in $user 29 my ($user, $realm) = split(/(?<=@)(?=[^@]+$)/, $principal); 30 return lc($user) . uc($realm); 24 31 } 25 32 … … 261 268 my $realm = ''; 262 269 $realm .= '@' . $m->realm if $m->realm ne BarnOwl::zephyr_getrealm(); 263 return ( lc(NFKC($m->class)) . $realm);270 return (BarnOwl::compat_casefold($m->class) . uc($realm)); 264 271 } 265 272 } else { 266 273 push @filenames, $m->recipient; 267 274 } 268 return map { lc(NFKC(BarnOwl::zephyr_smartstrip_user(strip_realm($_)))) } @filenames;275 return map { casefold_principal(BarnOwl::zephyr_smartstrip_user(strip_realm($_))) } @filenames; 269 276 } 270 277 -
perl/modules/Jabber/lib/BarnOwl/Message/Jabber.pm
reea7bed4 rd2ba33c 15 15 16 16 use base qw( BarnOwl::Message ); 17 use Unicode::Normalize qw( NFKC );18 17 19 18 sub jtype { shift->{jtype} }; … … 174 173 175 174 sub log_filenames { 176 return map { lc(NFKC($_)) } BarnOwl::Message::log_filenames(@_);175 return map { BarnOwl::compat_casefold($_) } BarnOwl::Message::log_filenames(@_); 177 176 } 178 177 -
perlglue.xs
r5093c6f rd2ba33c 413 413 RETVAL 414 414 415 const utf8 * 416 compat_casefold(in) 417 const char * in 418 PREINIT: 419 char *rv; 420 CODE: 421 rv = owl_util_compat_casefold(in); 422 RETVAL = rv; 423 OUTPUT: 424 RETVAL 425 CLEANUP: 426 g_free(rv); 427 415 428 416 429 MODULE = BarnOwl PACKAGE = BarnOwl::Zephyr -
util.c
rcba6b9c rd2ba33c 643 643 } 644 644 645 CALLER_OWN char *owl_util_compat_casefold(const char *str) 646 { 647 /* 648 * Quoting Anders Kaseorg at https://github.com/barnowl/barnowl/pull/54#issuecomment-31452543: 649 * 650 * The Unicode specification calls this compatibility caseless matching, and 651 * the correct transformation actually has five calls: 652 * NFKC(toCasefold(NFKD(toCasefold(NFD(string))))) Zephyr’s current 653 * implementation incorrectly omits the innermost NFD, but that difference 654 * only matters for characters including U+0345 ◌ͅ COMBINING GREEK 655 * YPOGEGRAMMENI. I think we should just write the correct version and get 656 * Zephyr fixed. 657 * 658 * Neither of these operations should be called toNFKC_Casefold, because that 659 * has slightly different behavior regarding Default_Ignorable_Code_Point. I 660 * propose compat_casefold. And I guess if Jabber wants it too, we should 661 * move it to util.c. 662 */ 663 char *tmp0 = g_utf8_normalize(str, -1, G_NORMALIZE_NFD); 664 char *tmp1 = g_utf8_casefold(tmp0, -1); 665 char *tmp2 = g_utf8_normalize(tmp1, -1, G_NORMALIZE_NFKD); 666 char *tmp3 = g_utf8_casefold(tmp2, -1); 667 char *out = g_utf8_normalize(tmp3, -1, G_NORMALIZE_NFKC); 668 g_free(tmp0); 669 g_free(tmp1); 670 g_free(tmp2); 671 g_free(tmp3); 672 673 return out; 674 } 675 645 676 /* This is based on _extract() and _isCJ() from perl's Text::WrapI18N */ 646 677 int owl_util_can_break_after(gunichar c)
Note: See TracChangeset
for help on using the changeset viewer.