예제 #1
0
파일: text.php 프로젝트: benesch/peteramati
 static function analyze_name_args($args, $ret = null)
 {
     $ret = $ret ?: new NameInfo();
     $delta = 0;
     foreach ($args as $i => $v) {
         if (is_string($v) || is_bool($v)) {
             if ($i + $delta < 4) {
                 $k = self::$argkeys[$i + $delta];
                 if (@$ret->{$k} === null) {
                     $ret->{$k} = $v;
                 }
             }
         } else {
             if (is_array($v) && isset($v[0])) {
                 for ($j = 0; $j < 3 && $j < count($v); ++$j) {
                     $k = self::$argkeys[$j];
                     if (@$ret->{$k} === null) {
                         $ret->{$k} = $v[$j];
                     }
                 }
             } else {
                 if (is_array($v)) {
                     foreach ($v as $k => $x) {
                         if (@($mk = self::$mapkeys[$k]) && @$ret->{$mk} === null) {
                             $ret->{$mk} = $x;
                         }
                     }
                     $delta = 3;
                 } else {
                     if (is_object($v)) {
                         foreach (self::$mapkeys as $k => $mk) {
                             if (@$ret->{$mk} === null && @$v->{$k} !== null && (@self::$boolkeys[$mk] ? is_bool($v->{$k}) : is_string($v->{$k}))) {
                                 $ret->{$mk} = $v->{$k};
                             }
                         }
                     }
                 }
             }
         }
     }
     foreach (self::$defaults as $k => $v) {
         if (@$ret->{$k} === null) {
             $ret->{$k} = $v;
         }
     }
     if ($ret->name && $ret->firstName === "" && $ret->lastName === "") {
         list($ret->firstName, $ret->lastName) = self::split_name($ret->name);
     }
     if ($ret->withMiddle && $ret->middleName) {
         $m = trim($ret->middleName);
         if ($m) {
             $ret->firstName = (isset($ret->firstName) ? $ret->firstName : "") . " " . $m;
         }
     }
     if ($ret->lastFirst && ($m = self::analyze_von($ret->lastName))) {
         $ret->firstName = trim($ret->firstName . " " . $m[0]);
         $ret->lastName = $m[1];
     }
     if ($ret->lastName === "" || $ret->firstName === "") {
         $ret->name = $ret->firstName . $ret->lastName;
     } else {
         if (@$ret->lastFirst) {
             $ret->name = $ret->lastName . ", " . $ret->firstName;
         } else {
             $ret->name = $ret->firstName . " " . $ret->lastName;
         }
     }
     if ($ret->lastName === "" || $ret->firstName === "") {
         $x = $ret->firstName . $ret->lastName;
     } else {
         $x = $ret->firstName . " " . $ret->lastName;
     }
     if (preg_match('/[\\x80-\\xFF]/', $x)) {
         $x = UnicodeHelper::deaccent($x);
     }
     $ret->unaccentedName = $x;
     return $ret;
 }
 static function abbreviate($name, $id)
 {
     $abbr = strtolower(UnicodeHelper::deaccent($name));
     $abbr = preg_replace('/[^a-z_0-9]+/', "-", $abbr);
     $abbr = preg_replace('/^-+|-+$/', "", $abbr);
     if (preg_match('/\\A(?:|p(?:aper)?\\d*|submission|final|opt\\d*|\\d.*)\\z/', $abbr)) {
         $abbr = "opt{$id}";
     }
     return $abbr;
 }
예제 #3
0
 public static function set_sorter($c)
 {
     if (opt("sortByLastName")) {
         if ($m = Text::analyze_von($c->lastName)) {
             $c->sorter = trim("{$m['1']} {$c->firstName} {$m['0']} {$c->email}");
         } else {
             $c->sorter = trim("{$c->lastName} {$c->firstName} {$c->email}");
         }
     } else {
         if (isset($c->unaccentedName)) {
             $c->sorter = trim("{$c->unaccentedName} {$c->email}");
             return;
         } else {
             $c->sorter = trim("{$c->firstName} {$c->lastName} {$c->email}");
         }
     }
     if (preg_match('/[\\x80-\\xFF]/', $c->sorter)) {
         $c->sorter = UnicodeHelper::deaccent($c->sorter);
     }
 }
예제 #4
0
 public static function set_sorter($c, $sorttype = null)
 {
     $sort_by_last = $sorttype === "last";
     if ($c->is_anonymous) {
         $c->sorter = $c->anon_username;
         return;
     } else {
         if (isset($c->unaccentedName) && $sort_by_last) {
             $c->sorter = trim("{$c->unaccentedName} {$c->email}");
             return;
         }
     }
     list($first, $middle) = Text::split_first_middle($c->firstName);
     if ($sort_by_last) {
         if ($m = Text::analyze_von($c->lastName)) {
             $c->sorter = "{$m['1']} {$first} {$m['0']}";
         } else {
             $c->sorter = "{$c->lastName} {$first}";
         }
     } else {
         $c->sorter = "{$first} {$c->last}";
     }
     $c->sorter = trim($c->sorter . " " . $c->username . " " . $c->email);
     if (preg_match('/[\\x80-\\xFF]/', $c->sorter)) {
         $c->sorter = UnicodeHelper::deaccent($c->sorter);
     }
 }
예제 #5
0
 public function pretty_text_title_indent($width = 75)
 {
     $n = "Paper #{$this->paperId}: ";
     $vistitle = UnicodeHelper::deaccent($this->title);
     $l = (int) (($width + 0.5 - strlen($vistitle) - strlen($n)) / 2);
     return strlen($n) + max(0, $l);
 }
 function _clauseTermCheckField($t, $row)
 {
     $field = $t->link;
     if (!$this->_clauseTermCheckFlags($t, $row) || $row->{$field} === "") {
         return false;
     }
     $field_deaccent = $field . "_deaccent";
     if (!isset($row->{$field_deaccent})) {
         if (preg_match('/[\\x80-\\xFF]/', $row->{$field})) {
             $row->{$field_deaccent} = UnicodeHelper::deaccent($row->{$field});
         } else {
             $row->{$field_deaccent} = false;
         }
     }
     if (!isset($t->preg_utf8)) {
         self::analyze_field_preg($t);
     }
     return self::match_field_preg($t, $row->{$field}, $row->{$field_deaccent});
 }
예제 #7
0
xassert_eqq(UnicodeHelper::utf8_prefix("a̓a̓a̓a̓a̓a̓a̓a̓", 7), "a̓a̓a̓a̓a̓a̓a̓");
xassert_eqq(UnicodeHelper::utf8_prefix("a̓a̓a̓a̓a̓a̓a̓a̓", 8), "a̓a̓a̓a̓a̓a̓a̓a̓");
xassert_eqq(UnicodeHelper::utf8_prefix("a̓a̓a̓a̓a̓a̓a̓a̓", 9), "a̓a̓a̓a̓a̓a̓a̓a̓");
xassert_eqq(UnicodeHelper::utf8_word_prefix("aaaaaaaa bbb", 7), "aaaaaaaa");
xassert_eqq(UnicodeHelper::utf8_word_prefix("aaaaaaaa bbb", 8), "aaaaaaaa");
xassert_eqq(UnicodeHelper::utf8_word_prefix("aaaaaaaa bbb", 9), "aaaaaaaa");
xassert_eqq(UnicodeHelper::utf8_word_prefix("aaaaaaaa bbb", 10), "aaaaaaaa");
xassert_eqq(UnicodeHelper::utf8_glyphlen("aaaaaaaa"), 8);
xassert_eqq(UnicodeHelper::utf8_glyphlen("áááááááá"), 8);
xassert_eqq(UnicodeHelper::utf8_glyphlen("a̓a̓a̓a̓a̓a̓a̓a̓"), 8);
xassert_eqq(prefix_word_wrap("+ ", "This is a thing to be wrapped.", "- ", 10), "+ This is\n- a thing\n- to be\n- wrapped.\n");
xassert_eqq(prefix_word_wrap("+ ", "This is a thing to be wrapped.", "- ", 9), "+ This is\n- a thing\n- to be\n- wrapped.\n");
xassert_eqq(prefix_word_wrap("+ ", "This\nis\na thing\nto\nbe wrapped.", "- ", 9), "+ This\n- is\n- a thing\n- to\n- be\n- wrapped.\n");
xassert_eqq(!!preg_match('/\\A\\pZ\\z/u', ' '), true);
// deaccent tests
xassert_eqq(UnicodeHelper::deaccent("Á é î ç ø U"), "A e i c o U");
$do = UnicodeHelper::deaccent_offsets("Á é î ç ø U .K");
xassert_eqq($do[0], "A e i c o U .K");
xassert_eqq(json_encode($do[1]), "[[0,0],[1,2],[3,5],[5,8],[7,11],[9,14],[14,21]]");
$regex = (object) ["preg_raw" => Text::word_regex("foo"), "preg_utf8" => Text::utf8_word_regex("foo")];
xassert_eqq(Text::highlight("Is foo bar føo bar fóó bar highlit right? foö", $regex), "Is <span class=\"match\">foo</span> bar <span class=\"match\">føo</span> bar <span class=\"match\">fóó</span> bar highlit right? <span class=\"match\">foö</span>");
// Qobject tests
$q = new Qobject(["a" => 1, "b" => 2]);
xassert_eqq($q->a, 1);
xassert_eqq($q->b, 2);
xassert_eqq(count($q), 2);
xassert_eqq($q->c, null);
xassert_eqq(count($q), 2);
$q->c = array();
xassert_eqq(count($q), 3);
$q->c[] = 1;