From 04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa Mon Sep 17 00:00:00 2001 From: Charles Date: Thu, 9 Jan 2020 10:55:03 +0100 Subject: phpmyadmin working --- srcs/phpmyadmin/libraries/classes/Font.php | 236 +++++++++++++++++++++++++++++ 1 file changed, 236 insertions(+) create mode 100644 srcs/phpmyadmin/libraries/classes/Font.php (limited to 'srcs/phpmyadmin/libraries/classes/Font.php') diff --git a/srcs/phpmyadmin/libraries/classes/Font.php b/srcs/phpmyadmin/libraries/classes/Font.php new file mode 100644 index 0000000..a767238 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Font.php @@ -0,0 +1,236 @@ + [ + "i", + "j", + "l", + ], "modifier" => 0.23, + ]; + //f + $charLists[] = [ + "chars" => ["f"], + "modifier" => 0.27, + ]; + //tI + $charLists[] = [ + "chars" => [ + "t", + "I", + ], "modifier" => 0.28, + ]; + //r + $charLists[] = [ + "chars" => ["r"], + "modifier" => 0.34, + ]; + //1 + $charLists[] = [ + "chars" => ["1"], + "modifier" => 0.49, + ]; + //cksvxyzJ + $charLists[] = [ + "chars" => [ + "c", + "k", + "s", + "v", + "x", + "y", + "z", + "J", + ], + "modifier" => 0.5, + ]; + //abdeghnopquL023456789 + $charLists[] = [ + "chars" => [ + "a", + "b", + "d", + "e", + "g", + "h", + "n", + "o", + "p", + "q", + "u", + "L", + "0", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + ], + "modifier" => 0.56, + ]; + //FTZ + $charLists[] = [ + "chars" => [ + "F", + "T", + "Z", + ], "modifier" => 0.61, + ]; + //ABEKPSVXY + $charLists[] = [ + "chars" => [ + "A", + "B", + "E", + "K", + "P", + "S", + "V", + "X", + "Y", + ], + "modifier" => 0.67, + ]; + //wCDHNRU + $charLists[] = [ + "chars" => [ + "w", + "C", + "D", + "H", + "N", + "R", + "U", + ], + "modifier" => 0.73, + ]; + //GOQ + $charLists[] = [ + "chars" => [ + "G", + "O", + "Q", + ], "modifier" => 0.78, + ]; + //mM + $charLists[] = [ + "chars" => [ + "m", + "M", + ], "modifier" => 0.84, + ]; + //W + $charLists[] = [ + "chars" => ["W"], + "modifier" => 0.95, + ]; + //" " + $charLists[] = [ + "chars" => [" "], + "modifier" => 0.28, + ]; + + return $charLists; + } + + /** + * Get width of string/text + * + * The text element width is calculated depending on font name + * and font size. + * + * @param string $text string of which the width will be calculated + * @param string $font name of the font like Arial,sans-serif etc + * @param integer $fontSize size of font + * @param array|null $charLists list of characters and their width modifiers + * + * @return integer width of the text + * @access public + */ + public function getStringWidth( + string $text, + string $font, + int $fontSize, + ?array $charLists = null + ): int { + if (empty($charLists) + || ! isset($charLists[0]["chars"]) || ! is_array($charLists[0]["chars"]) + || ! isset($charLists[0]["modifier"]) + ) { + $charLists = $this->getCharLists(); + } + + /* + * Start by counting the width, giving each character a modifying value + */ + $count = 0; + + foreach ($charLists as $charList) { + $count += ((mb_strlen($text) + - mb_strlen(str_replace($charList["chars"], "", $text)) + ) * $charList["modifier"]); + } + + $text = str_replace(" ", "", $text);//remove the " "'s + //all other chars + $count += (mb_strlen(preg_replace("/[a-z0-9]/i", "", $text)) * 0.3); + + $modifier = 1; + $font = mb_strtolower($font); + switch ($font) { + /* + * no modifier for arial and sans-serif + */ + case 'arial': + case 'sans-serif': + break; + /* + * .92 modifier for time, serif, brushscriptstd, and californian fb + */ + case 'times': + case 'serif': + case 'brushscriptstd': + case 'californian fb': + $modifier = .92; + break; + /* + * 1.23 modifier for broadway + */ + case 'broadway': + $modifier = 1.23; + break; + } + $textWidth = $count * $fontSize; + return (int) ceil($textWidth * $modifier); + } +} -- cgit