processSinglelineWordWrapPixels function

List<Pixel> processSinglelineWordWrapPixels(
  1. String singleLine,
  2. List<double> columnConstraints,
  3. double gridSize, {
  4. bool lineMerge = true,
})

仅支持 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 ];
      }
    }
  });
}