Я бы сказал, что это определенно следовало ожидать. PowerPoint будет разбивать прогоны в любое удобное время, например, чтобы выделить слово с ошибкой, или просто, если вы приостановите ввод или войдете, чтобы исправить опечатку или что-то в этом роде.
Единственное, что можно точно сказать о серии, это то, что все содержащиеся в ней символы имеют одинаковое форматирование символов. Например, нет никакой гарантии, что цикл - это то, что можно назвать «жадным», включая столько символов, сколько возможно, чтобы do использовали одинаковое форматирование символов.
Если вы хотите восстановить эту «жадную» последовательность в прогонах, вам решать, возможно, с помощью алгоритма, подобного следующему:
last_run = None
for run in paragraph.runs:
if last_run is None:
last_run = run
continue
if has_same_formatting(run, last_run):
last_run = combine_runs(last_run, run)
continue
last_run = run
Это оставляет вам возможность реализовать has_same_formatting()
и combine_runs()
. Здесь есть определенное преимущество, потому что прогоны могут содержать различия, которые вас не волнуют, например, грязный атрибут или что-то еще, и вы можете выбирать, какие из них важны для вас.
Начало реализации has_same_formatting()
будет:
def has_same_formatting(run, run_2):
font, font_2 = run.font, run_2.font
if font.bold != font_2.bold:
return False
if font.italic != font_2.italic:
return False
# ---same with color, size, type-face, whatever you want---
return True
combine_runs(base, suffix)
будет выглядеть примерно так:
def combine_runs(base, suffix):
base.text = base.text + suffix.text
r_to_remove = suffix._r
r_to_remove.getparent().remove(r_to_remove)