В зависимости от шрифта и диакритического знака, о котором идет речь, шрифт может не содержать каждую необходимую комбинацию символа и пометки как глифа. Вместо этого может быть просто отдельный глиф с рассматриваемой меткой, и символ с этой меткой рисуется путем рисования глифа символа и глифа метки в одной и той же позиции.
Чтобы их можно было нарисовать на та же самая позиция, глиф знака, хотя на самом деле не имеет нулевой ширины, когда нарисовано, не продвигает позицию рисования глифа.
Кроме того, диакритический знак может быть нарисован на разных высотах в зависимости от символа он объединяется, в частности, если символ объединяется с несколькими отметками.
Следовательно, в контексте вашего вопроса ...
Если текстовый блок не имеет диагонали длина строки, разве это не означает, что текстовый блок пуст, и, таким образом, спорным вопросом будет, находится ли он на одной строке или нет?
Если глиф диакритического знака объединен с символьным глифом на высоте, отличной от обычной, этот глиф-знак сам образует фрагмент текста со значением DistPerpendicular
, отличающимся от fr ом значения кусков вокруг него на одной строке.
Поскольку глиф метки не продвигает точку вставки текста, а длина базовой линии чанка, по сути, представляет собой сумму продвижений символов нарисованных глифов, длина чанка, содержащего только диакритическую метку, равна 0.
Поэтому, чтобы распознать такую ситуацию, iText проверяет, не слишком ли велика разница DistPerpendicular
, хотя и не 0, и имеет ли один из этих рассматриваемых кусков нулевую длину:
return Math.Abs(distPerpendicularDiff) <= DIACRITICAL_MARKS_ALLOWED_VERTICAL_DEVIATION
&& (mySegment.GetLength() == 0 || otherSegment.GetLength() == 0);