Code: Select all
Truncate_Left(Length, String, OnWord := False, Dots := True){
if(StrLength := StrLen(String) > Length){
result := SubStr(String, StrLength - Length + (Dots ? 3 : 0), Length), WhiteSpace := InStr(" `n", SubStr(String, StrLength - Length + (Dots ? 3 : 0) - 1, 1))
return (Dots ? "..." : "") . Trim_Trailing_Spaces((OnWord && !WhiteSpace) ? Remove_Until_Word(result, True) : result)
}
return String
}
Truncate_Right(Length, String, OnWord := False, Dots := True){
if(StrLen(String) > Length){
result := SubStr(String, 1, Length - (Dots ? 3 : 0)), WhiteSpace := InStr(" `n", SubStr(String, Length - (Dots ? 2 : -1), 1))
return Trim_Trailing_Spaces((OnWord && !WhiteSpace) ? Remove_Until_Word(result) : result) . (Dots ? "..." : "")
}
return String
}
Truncate_Middle(Length, String, OnWord := False, Dots := True){
if(StrLength := StrLen(String) > Length){
SideLength := Length - (Dots ? 3 : 1), LLen := (SideLength / 2) + (Mod(SideLength, 2) ? 1 : 0), RLen := SideLength / 2
left := Truncate_Right(LLen, String, OnWord, False)
right := Truncate_Left(RLen, String, OnWord, False)
if(OnWord){
left2 := Truncate_Right(LLen + (RLen - StrLen(right)), String, OnWord, False)
right2 := Truncate_Left(RLen + (LLen - StrLen(left)), String, OnWord, False)
}
return (OnWord && StrLen(left2) > StrLen(right2) ? left2 : left) . (Dots ? "..." : " ") . (OnWord && StrLen(right2) > StrLen(left2) ? right2 : right)
}
return String
}
Remove_Until_Word(String, FromLeft := False){
if(String) {
Space := InStr(String, " ", , FromLeft), NewLine := InStr(String, "`n", , FromLeft)
pos := FromLeft ? (Space > NewLine ? Space : NewLine) : (Space < NewLine ? NewLine : Space)
Return pos ? (FromLeft ? SubStr(String, pos > 0 ? pos : 1) : SubStr(String, 1, pos > 0 ? pos : 1)) : ""
}
}
Trim_Trailing_Spaces(String){
Return RegExReplace(RegExReplace(String, "D)^\s+"), "D)\s+$")
}
Test