processSinglelineWordWrapPixels function
仅支持 LR模式
Implementation
List<Pixel> processSinglelineWordWrapPixels(String singleLine, List<double> columnConstraints, double gridSize, { bool lineMerge = true}){
int column = 0;
int constraintIndex = 0;
return characterPixels(singleLine).fold<List<Pixel>>([], (fold, char){
if((column + char.size.width) * gridSize <= columnConstraints[constraintIndex] ){
column += char.size.width;
if(fold.isNotEmpty){
var combined = combinePixels([fold.last, char]);
return fold..replaceRange(fold.length - 1, fold.length, [combined]);
}else{
return [char];
}
}else{
var padding = (columnConstraints[constraintIndex] / gridSize).ceil() - column;
column += padding + char.size.width;
var needMerge = lineMerge;
if(constraintIndex + 1 >= columnConstraints.length){
needMerge = lineMerge && !needMerge;
column = char.size.width;
}
constraintIndex = (constraintIndex + 1) % columnConstraints.length;
if(fold.isNotEmpty){
var paddingCombined = combinePixels([fold.last, Blank1.pixelRepeat(padding), if(needMerge) char]);
return fold..replaceRange(fold.length - 1, fold.length, [paddingCombined, if(!needMerge) char]);
}else{
return needMerge ? [ combinePixels([Blank1.pixelRepeat(padding), char]) ] :
[Blank1.pixelRepeat(padding), char ];
}
}
});
}