```dart
// zmtzawqlp
// clip rect of over flow
if (_overflowRects != null) {
context.canvas.saveLayer(offset & size, Paint());
if (overflowWidget?.clearType == TextOverflowClearType.clipRect) {
if (_overflowClipTextRects != null) {
for (final Rect rect in _overflowClipTextRects!) {
context.canvas.clipRect(
rect.shift(offset),
clipOp: ui.ClipOp.difference,
);
}
}
if (_overflowRects != null) {
for (final Rect rect in _overflowRects!) {
context.canvas.clipRect(
rect.shift(offset),
clipOp: ui.ClipOp.difference,
);
}
}
}
}
```dart
final int lineNum = (lines.length / 2).floor();
final bool isEven = lines.length.isEven;
final ui.LineMetrics line = lines[lineNum];
double lineTop = 0;
for (int index = 0; index < lineNum; index++) {
final ui.LineMetrics line = lines[index];
lineTop += line.height;
}
double left = double.infinity;
double right = 0;
for (int index = 0; index < rects.length; index++) {
final ui.TextBox rect = rects[index];
left = math.min(rect.left, left);
right = math.max(rect.right, right);
}
if (left < 0) {
right -= left;
left = 0;
}
final double maxIntrinsicWidth = oneLineTextPainter.width;
if (right > maxIntrinsicWidth) {
left -= right - maxIntrinsicWidth;
right = maxIntrinsicWidth;
}
class HighlightTextSpanBuilder extends RegExpSpecialTextSpanBuilder {
@override
List<RegExpSpecialText> get regExps => <RegExpSpecialText>[
HighlightText(),
];
}
```
`Harmony` 端代码如下:
```typescript
import * as extended_text from '@candies/extended_text'
import { RegExpSpecialTextSpanBuilder, TextSpan } from '@candies/extended_text';
import { text } from "@kit.ArkGraphics2D"
export class HighlightText extends extended_text.RegExpSpecialText {
get regExp(): RegExp {
return new RegExp("<Highlight color=['"](.*?)['"]>(.*?)</Highlight>", "g");
}