1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184
|
local event = require "event" local util = require "util" local log = require "log" local lang = require "lang" local utf8 = require "utf8" local tostring = tostring local ipairs = ipairs local require = require local dump = dump local print = print local string = string local tonumber = tonumber local type = type local typeof = typeof
module("hyphen_util")
local isEnable = true
local noAppendHyphenCharacter = { ["-"]="-", ["."]=".", [","]=",", ["。"]="。", [","]=",", ["{"]="{", ["}"]="}", ["("]="(", [")"]=")", ["("]="(", [")"]=")", ["["]="[", ["]"]="]", ["|"]="|", ["&"]="&", ["*"]="*", ["/"]="/", ["\\"]="\\", ["#"]="#", ["%"]="%", ["~"]="~", ["、"]="、", [":"]=":", [";"]=";", ["?"]="?", ["?"]="?", ["!"]="!", ["`"]="`", ["\'"]="\'", ["\""]="\"", ["$"]="$", ["_"]="_", ["0"]="0", ["1"]="1", ["2"]="2", ["3"]="3", ["4"]="4", ["5"]="5", ["6"]="6", ["7"]="7", ["8"]="8", ["9"]="9", }
function AutoAppendHyphen(textComponent, str, delayTime) local func = function() if not isEnable then return end if IsNullOrEmpty(str) then str = textComponent.text if str == "" then return end end textComponent.resizeTextForBestFit = false textComponent.supportRichText = true textComponent.text = GetAppendHyphenStr(textComponent, str) end
if delayTime then util.DelayCallOnce(delayTime, func) else func() end end
function GetAppendHyphenStr(textComponent, str) if not isEnable then return str end
if IsNullOrEmpty(str) then str = textComponent.text if str == "" then return str end end
local separator = " " if string.find(str, " ") then separator = " " end
local words = string.split(str, separator) local textWidth = textComponent.rectTransform.rect.width local line = "" local wrappedText = "" for _, word in ipairs(words) do local spaceLine = line .. separator if GetTextPreferredWidth(textComponent, spaceLine .. word) > textWidth then local substring = "" local lastSubString = "" local isFind = false local leaveStr = "" local oldChar for pos, char in utf8.codes(word) do substring = substring .. char if not isFind and GetTextPreferredWidth(textComponent,spaceLine .. substring .. "-") > textWidth then if not oldChar then wrappedText = wrappedText .. line .. "\n" line = word break else wrappedText = wrappedText .. spaceLine .. lastSubString if noAppendHyphenCharacter[char] or noAppendHyphenCharacter[oldChar] then wrappedText = wrappedText .. "\n" else wrappedText = wrappedText .. "-\n" end isFind = true end end if isFind then leaveStr = leaveStr .. char end oldChar = char lastSubString = substring end if not IsNullOrEmpty(leaveStr) then line = leaveStr end else if not IsNullOrEmpty(line) then line = line .. separator end line = line .. word end end wrappedText = wrappedText .. line return wrappedText end
function GetTextPreferredWidth(textComponent, str) return textComponent.cachedTextGenerator:GetPreferredWidth(str, textComponent:GetGenerationSettings(textComponent.rectTransform.rect.size)) end
function SetEnable(state) isEnable = state end
function IsNullOrEmpty(str) return (not str) or str == "" end
|