1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-09 23:34:20 +00:00

SimpleShapedText: Reorganise function declarations

This commit is contained in:
reuk 2025-10-15 13:24:56 +01:00
parent 2abd6f2f71
commit de4696d891
No known key found for this signature in database

View file

@ -210,6 +210,48 @@ static std::vector<hb_feature_t> getHarfbuzzFeatures (Span<const FontFeatureSett
return features;
}
/* Increment b by the requested number of steps, or to e, whichever is reached first. */
template <typename CharPtr>
static auto incrementCharPtr (CharPtr b, CharPtr e, int64 steps)
{
while (b != e && steps > 0)
{
++b;
--steps;
}
return b;
}
static std::vector<juce_wchar> sanitiseString (const String& stringIn, Range<int64> lineRange)
{
std::vector<juce_wchar> result;
const auto end = stringIn.end();
const auto beginOfRange = incrementCharPtr (stringIn.begin(), end, lineRange.getStart());
const auto endOfRange = incrementCharPtr (beginOfRange, end, lineRange.getLength());
result.reserve (beginOfRange.lengthUpTo (endOfRange));
for (auto it = beginOfRange; it != endOfRange; ++it)
{
result.push_back (std::invoke ([&]
{
const auto cc = findControlCharacter (it, end);
if (! cc.has_value())
return *it;
constexpr juce_wchar wordJoiner = 0x2060;
constexpr juce_wchar nonBreakingSpace = 0x00a0;
return cc == ControlCharacter::crFollowedByLf ? wordJoiner : nonBreakingSpace;
}));
}
return result;
}
/* Returns glyphs in logical order as that favours wrapping. */
static std::vector<ShapedGlyph> lowLevelShape (Span<const juce_wchar> string,
Range<int64> range,
@ -839,48 +881,6 @@ static auto rangedValuesWithOffset (detail::RangedValues<T> rv, int64 offset = 0
return rv;
}
/* Increment b by the requested number of steps, or to e, whichever is reached first. */
template <typename CharPtr>
static auto incrementCharPtr (CharPtr b, CharPtr e, int64 steps)
{
while (b != e && steps > 0)
{
++b;
--steps;
}
return b;
}
static std::vector<juce_wchar> sanitiseString (const String& stringIn, Range<int64> lineRange)
{
std::vector<juce_wchar> result;
const auto end = stringIn.end();
const auto beginOfRange = incrementCharPtr (stringIn.begin(), end, lineRange.getStart());
const auto endOfRange = incrementCharPtr (beginOfRange, end, lineRange.getLength());
result.reserve (beginOfRange.lengthUpTo (endOfRange));
for (auto it = beginOfRange; it != endOfRange; ++it)
{
result.push_back (std::invoke ([&]
{
const auto cc = findControlCharacter (it, end);
if (! cc.has_value())
return *it;
constexpr juce_wchar wordJoiner = 0x2060;
constexpr juce_wchar nonBreakingSpace = 0x00a0;
return cc == ControlCharacter::crFollowedByLf ? wordJoiner : nonBreakingSpace;
}));
}
return result;
}
struct Shaper
{
Shaper (const String& stringIn, Range<int64> lineRange, const ShapedTextOptions& options)