/library/Zend/Text/MultiByte.php

https://bitbucket.org/khuongduybui/openfisma · PHP · 165 lines · 97 code · 21 blank · 47 comment · 29 complexity · df51aa6d204b4f43e945c3af0a38d8cd MD5 · raw file

  1. <?php
  2. /**
  3. * Zend Framework
  4. *
  5. * LICENSE
  6. *
  7. * This source file is subject to the new BSD license that is bundled
  8. * with this package in the file LICENSE.txt.
  9. * It is also available through the world-wide-web at this URL:
  10. * http://framework.zend.com/license/new-bsd
  11. * If you did not receive a copy of the license and are unable to
  12. * obtain it through the world-wide-web, please send an email
  13. * to license@zend.com so we can send you a copy immediately.
  14. *
  15. * @category Zend
  16. * @package Zend_Text
  17. * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
  18. * @license http://framework.zend.com/license/new-bsd New BSD License
  19. * @version $Id$
  20. */
  21. /**
  22. * Zend_Text_MultiByte contains multibyte safe string methods
  23. *
  24. * @category Zend
  25. * @package Zend_Text
  26. * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
  27. * @license http://framework.zend.com/license/new-bsd New BSD License
  28. */
  29. class Zend_Text_MultiByte
  30. {
  31. /**
  32. * Word wrap
  33. *
  34. * @param string $string
  35. * @param integer $width
  36. * @param string $break
  37. * @param boolean $cut
  38. * @param string $charset
  39. * @return string
  40. */
  41. public static function wordWrap($string, $width = 75, $break = "\n", $cut = false, $charset = 'UTF-8')
  42. {
  43. $result = array();
  44. $breakWidth = iconv_strlen($break, $charset);
  45. while (($stringLength = iconv_strlen($string, $charset)) > 0) {
  46. $breakPos = iconv_strpos($string, $break, 0, $charset);
  47. if ($breakPos !== false && $breakPos < $width) {
  48. if ($breakPos === $stringLength - $breakWidth) {
  49. $subString = $string;
  50. $cutLength = null;
  51. } else {
  52. $subString = iconv_substr($string, 0, $breakPos, $charset);
  53. $cutLength = $breakPos + $breakWidth;
  54. }
  55. } else {
  56. $subString = iconv_substr($string, 0, $width, $charset);
  57. if ($subString === $string) {
  58. $cutLength = null;
  59. } else {
  60. $nextChar = iconv_substr($string, $width, 1, $charset);
  61. if ($breakWidth === 1) {
  62. $nextBreak = $nextChar;
  63. } else {
  64. $nextBreak = iconv_substr($string, $breakWidth, 1, $charset);
  65. }
  66. if ($nextChar === ' ' || $nextBreak === $break) {
  67. $afterNextChar = iconv_substr($string, $width + 1, 1, $charset);
  68. if ($afterNextChar === false) {
  69. $subString .= $nextChar;
  70. }
  71. $cutLength = iconv_strlen($subString, $charset) + 1;
  72. } else {
  73. $spacePos = iconv_strrpos($subString, ' ', $charset);
  74. if ($spacePos !== false) {
  75. $subString = iconv_substr($subString, 0, $spacePos, $charset);
  76. $cutLength = $spacePos + 1;
  77. } else if ($cut === false) {
  78. $spacePos = iconv_strpos($string, ' ', 0, $charset);
  79. if ($spacePos !== false) {
  80. $subString = iconv_substr($string, 0, $spacePos, $charset);
  81. $cutLength = $spacePos + 1;
  82. } else {
  83. $subString = $string;
  84. $cutLength = null;
  85. }
  86. } else {
  87. $subString = iconv_substr($subString, 0, $width, $charset);
  88. $cutLength = $width;
  89. }
  90. }
  91. }
  92. }
  93. $result[] = $subString;
  94. if ($cutLength !== null) {
  95. $string = iconv_substr($string, $cutLength, ($stringLength - $cutLength), $charset);
  96. } else {
  97. break;
  98. }
  99. }
  100. return implode($break, $result);
  101. }
  102. /**
  103. * String padding
  104. *
  105. * @param string $input
  106. * @param integer $padLength
  107. * @param string $padString
  108. * @param integer $padType
  109. * @param string $charset
  110. * @return string
  111. */
  112. public static function strPad($input, $padLength, $padString = ' ', $padType = STR_PAD_RIGHT, $charset = 'UTF-8')
  113. {
  114. $return = '';
  115. $lengthOfPadding = $padLength - iconv_strlen($input, $charset);
  116. $padStringLength = iconv_strlen($padString, $charset);
  117. if ($padStringLength === 0 || $lengthOfPadding === 0) {
  118. $return = $input;
  119. } else {
  120. $repeatCount = floor($lengthOfPadding / $padStringLength);
  121. if ($padType === STR_PAD_BOTH) {
  122. $lastStringLeft = '';
  123. $lastStringRight = '';
  124. $repeatCountLeft = $repeatCountRight = ($repeatCount - $repeatCount % 2) / 2;
  125. $lastStringLength = $lengthOfPadding - 2 * $repeatCountLeft * $padStringLength;
  126. $lastStringLeftLength = $lastStringRightLength = floor($lastStringLength / 2);
  127. $lastStringRightLength += $lastStringLength % 2;
  128. $lastStringLeft = iconv_substr($padString, 0, $lastStringLeftLength, $charset);
  129. $lastStringRight = iconv_substr($padString, 0, $lastStringRightLength, $charset);
  130. $return = str_repeat($padString, $repeatCountLeft) . $lastStringLeft
  131. . $input
  132. . str_repeat($padString, $repeatCountRight) . $lastStringRight;
  133. } else {
  134. $lastString = iconv_substr($padString, 0, $lengthOfPadding % $padStringLength, $charset);
  135. if ($padType === STR_PAD_LEFT) {
  136. $return = str_repeat($padString, $repeatCount) . $lastString . $input;
  137. } else {
  138. $return = $input . str_repeat($padString, $repeatCount) . $lastString;
  139. }
  140. }
  141. }
  142. return $return;
  143. }
  144. }