Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
В рамках принятой нами упрощенной модели под «содержимым абзаца» подразумеваются: простой текст (#PCDATA, обратите внимание на декодирование из внутренней UTF-8 в локальную кодировку системы и замену символов, запрещенных в HTML), стилевые выделения (span), гиперссылки (hyperlink) и изображения (image). Все они обрабатываются одноименными функциями, поэтому при необходимости включить в данный код, например, сноски, это не составит большого труда. Для необработанных элементов генерируется предупреждение.
Функция span() отвечает за выделение текста полужирным шрифтом и курсивом:
sub span {
my $elt = shift;
my %attrs = $doc->getStyleAttributes($doc->textStyle($elt));
if ($attrs{'properties'}->{'fo:font-weight'} eq 'bold') {
return "<b>" . paragraph_content($elt) . "</b>";
} elsif ($attrs{'properties'}->{'fo:font-style'} eq 'italic') {
return "<i>" . paragraph_content($elt) . "</i>";
}
}
Конструкция $doc->getStyleAttributes($doc->textStyle($elt)) возвращает стиль, связанный с элементом $elt. В таком виде она будет работать только для автоматических стилей; для работы с именованными стилями необходимо создать объект OODoc::Style на базе файла styles.xml (ooStyle(member => 'styles')); Помимо задействованных здесь свойств fo:font-weight и fo:font-style, назначение которых, надеюсь, понятно из кода, могут оказаться полезными fo:color (цвет текста) и fo:background-color (цвет фона). Полный список свойств стилей можно найти, конечно, в спецификации [4].
Функции image() и list() действуют аналогичным образом, и мы не будем приводить их здесь ради экономии места. Остановимся лишь на способе различить нумерованный и ненумерованный список:
1: my $is_ordered = 0;
2: my $style = $doc->getStyleElement($doc->textStyle($elt), namespace => 'text', type => 'list-style');
3: my $st = $doc->getNodeByXPath("//*[@text:level="$level"]", $style);
4: if ($st && $st->getName eq 'text:list-level-style-number') {
5: $is_ordered = 1;