优化
This commit is contained in:
@@ -15,17 +15,20 @@ class ZhLayout(
|
|||||||
textPaint: TextPaint,
|
textPaint: TextPaint,
|
||||||
width: Int
|
width: Int
|
||||||
) : Layout(text, textPaint, width, Alignment.ALIGN_NORMAL, 0f, 0f) {
|
) : Layout(text, textPaint, width, Alignment.ALIGN_NORMAL, 0f, 0f) {
|
||||||
|
companion object {
|
||||||
|
private val postPanc = hashSetOf(
|
||||||
|
",", "。", ":", "?", "!", "、", "”", "’", ")", "》", "}",
|
||||||
|
"】", ")", ">", "]", "}", ",", ".", "?", "!", ":", "」", ";", ";"
|
||||||
|
)
|
||||||
|
private val prePanc = hashSetOf("“", "(", "《", "【", "‘", "‘", "(", "<", "[", "{", "「")
|
||||||
|
}
|
||||||
|
|
||||||
private val defaultCapacity = 10
|
private val defaultCapacity = 10
|
||||||
var lineStart = IntArray(defaultCapacity)
|
var lineStart = IntArray(defaultCapacity)
|
||||||
var lineWidth = FloatArray(defaultCapacity)
|
var lineWidth = FloatArray(defaultCapacity)
|
||||||
private var lineCount = 0
|
private var lineCount = 0
|
||||||
private val curPaint = textPaint
|
private val curPaint = textPaint
|
||||||
private val cnCharWitch = getDesiredWidth("我", textPaint)
|
private val cnCharWitch = getDesiredWidth("我", textPaint)
|
||||||
private val postPanc = hashSetOf(
|
|
||||||
",", "。", ":", "?", "!", "、", "”", "’", ")", "》", "}",
|
|
||||||
"】", ")", ">", "]", "}", ",", ".", "?", "!", ":", "」", ";", ";"
|
|
||||||
)
|
|
||||||
private val prePanc = hashSetOf("“", "(", "《", "【", "‘", "‘", "(", "<", "[", "{", "「")
|
|
||||||
|
|
||||||
enum class BreakMod { NORMAL, BREAK_ONE_CHAR, BREAK_MORE_CHAR, CPS_1, CPS_2, CPS_3, }
|
enum class BreakMod { NORMAL, BREAK_ONE_CHAR, BREAK_MORE_CHAR, CPS_1, CPS_2, CPS_3, }
|
||||||
class Locate {
|
class Locate {
|
||||||
@@ -42,7 +45,10 @@ class ZhLayout(
|
|||||||
var line = 0
|
var line = 0
|
||||||
val widthsArray = FloatArray(text.length)
|
val widthsArray = FloatArray(text.length)
|
||||||
curPaint.getTextWidths(text as String, widthsArray)
|
curPaint.getTextWidths(text as String, widthsArray)
|
||||||
val (words, widths) = ChapterProvider.getStringArrayAndTextWidths(text, widthsArray.asList())
|
val (words, widths) = ChapterProvider.getStringArrayAndTextWidths(
|
||||||
|
text,
|
||||||
|
widthsArray.asList()
|
||||||
|
)
|
||||||
var lineW = 0f
|
var lineW = 0f
|
||||||
var cwPre = 0f
|
var cwPre = 0f
|
||||||
var length = 0
|
var length = 0
|
||||||
@@ -111,26 +117,31 @@ class ZhLayout(
|
|||||||
lineStart[line + 1] = length
|
lineStart[line + 1] = length
|
||||||
breakCharCnt = 1
|
breakCharCnt = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
BreakMod.BREAK_ONE_CHAR -> {//模式1 当前行下移一个字
|
BreakMod.BREAK_ONE_CHAR -> {//模式1 当前行下移一个字
|
||||||
offset = cw + cwPre
|
offset = cw + cwPre
|
||||||
lineStart[line + 1] = length - words[index - 1].length
|
lineStart[line + 1] = length - words[index - 1].length
|
||||||
breakCharCnt = 2
|
breakCharCnt = 2
|
||||||
}
|
}
|
||||||
|
|
||||||
BreakMod.BREAK_MORE_CHAR -> {//模式2 当前行下移多个字
|
BreakMod.BREAK_MORE_CHAR -> {//模式2 当前行下移多个字
|
||||||
offset = cw + cwPre
|
offset = cw + cwPre
|
||||||
lineStart[line + 1] = length - breakLength
|
lineStart[line + 1] = length - breakLength
|
||||||
breakCharCnt = breakIndex + 1
|
breakCharCnt = breakIndex + 1
|
||||||
}
|
}
|
||||||
|
|
||||||
BreakMod.CPS_1 -> {//模式3 两个后置标点压缩
|
BreakMod.CPS_1 -> {//模式3 两个后置标点压缩
|
||||||
offset = 0f
|
offset = 0f
|
||||||
lineStart[line + 1] = length + s.length
|
lineStart[line + 1] = length + s.length
|
||||||
breakCharCnt = 0
|
breakCharCnt = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
BreakMod.CPS_2 -> { //模式4 前置标点压缩+前置标点压缩+字
|
BreakMod.CPS_2 -> { //模式4 前置标点压缩+前置标点压缩+字
|
||||||
offset = 0f
|
offset = 0f
|
||||||
lineStart[line + 1] = length + s.length
|
lineStart[line + 1] = length + s.length
|
||||||
breakCharCnt = 0
|
breakCharCnt = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
BreakMod.CPS_3 -> {//模式5 前置标点压缩+字+后置标点压缩
|
BreakMod.CPS_3 -> {//模式5 前置标点压缩+字+后置标点压缩
|
||||||
offset = 0f
|
offset = 0f
|
||||||
lineStart[line + 1] = length + s.length
|
lineStart[line + 1] = length + s.length
|
||||||
|
|||||||
@@ -148,13 +148,14 @@ object UrlUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val fileSuffixRegex = Regex("^[a-z\\d]+$", RegexOption.IGNORE_CASE)
|
||||||
|
|
||||||
/* 获取合法的文件后缀 */
|
/* 获取合法的文件后缀 */
|
||||||
fun getSuffix(str: String, default: String? = null): String {
|
fun getSuffix(str: String, default: String? = null): String {
|
||||||
val suffix = CustomUrl(str).getUrl()
|
val suffix = CustomUrl(str).getUrl()
|
||||||
.substringAfterLast(".", "")
|
.substringAfterLast(".", "")
|
||||||
.substringBefore("?")
|
.substringBefore("?")
|
||||||
//检查截取的后缀字符是否合法 [a-zA-Z0-9]
|
//检查截取的后缀字符是否合法 [a-zA-Z0-9]
|
||||||
val fileSuffixRegex = Regex("^[a-z\\d]+$", RegexOption.IGNORE_CASE)
|
|
||||||
return if (suffix.length > 5 || !suffix.matches(fileSuffixRegex)) {
|
return if (suffix.length > 5 || !suffix.matches(fileSuffixRegex)) {
|
||||||
AppLog.put("Cannot find legal suffix:\n target: $str\n suffix: $suffix")
|
AppLog.put("Cannot find legal suffix:\n target: $str\n suffix: $suffix")
|
||||||
default ?: "ext"
|
default ?: "ext"
|
||||||
|
|||||||
Reference in New Issue
Block a user