Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
В строке 6 создается объект класса OODoc::Document (использование функций ooXXX вместо соответствующих конструкторов new является предпочтительным способом). Мы указываем, что нас будет интересовать файл content.xml, в котором и хранится содержимое документа. При использовании функции ooStyle() для получения доступа к именованным стилям здесь будет уместно указать 'style'.
Строка 7 предписывает включить «ограничители» (delimiters) – о них мы поговорим чуть позже.
Наконец, в строке 8 мы получаем текстовое
содержимое документа методом getTextContent() и выводим его на консоль. При
этом getTextContent() преобразует родной для OpenDocument UTF-8 в локальную
кодировку, установленную вами в файле config.xml. Обратите внимание на scalar:
в списочном контексте getTextContent() возвращает массив строк, составляющих
документ; мы же хотим получить его содержимое в виде одной строки. В этом
случае в качестве разделителя строк используется значение свойства
$doc->{'line_separator'}, которое вы можете установить по своему усмотрению.
А вот так решается любимая задача всех редакций периодических изданий – подсчет числа символов в документе без учета пробелов. Конечно, если редакция достаточно прогрессивна и уже использует OpenDocument вместо других проприетарных форматов...
$doc->outputDelimitersOff();
my $content = $doc->getTextContent();
$content =~ s/s+//mg;
print length $content;
(здесь и далее приводятся только части скрипта, реализующие новое поведение). Простой модификацией регулярного выражения особенно рачительная редакция может удалить из текста знаки препинания, латинские буквы, цифры и т. д. – в общем, все, за что, по мнению издателя, можно не платить.
Внимательный читатель может обратить внимание, что во втором примере мы почему-то использовали метод outputDelimitersOff(), чтобы отключить вывод «ограничителей». Подобная «чехарда», конечно, не способствует пониманию процесса, поэтому попробуем объясниться: ограничитель – это всего-навсего пара строковых констант, обрамляющая текстовое представление некоторого элемента. Например, в настройке по умолчанию элементы text:span (их назначение совпадает с таковым в HTML) выделяются «елочками» (<< и >>), а сноски – фигурными скобками и префиксом 'NOTE: '. Разумеется, ограничители можно изменять по своему усмотрению; этим мы и воспользуемся в следующем примере, выводящем текст OpenDocument в раскраске «а-ля Lynx»:
use Term::ANSIColor qw(:constants);
...
my $doc = ooDocument(file => $file, member => 'content');
$doc->{'delimiters'}{'text:h'} = { 'begin' => RED, 'end' => RESET };
$doc->{'delimiters'}{'text:a'} = { 'begin' => BLUE, 'end' => RESET };
$doc->{'delimiters'}{'text:list-item'} = { 'begin' => YELLOW . '* ' . RESET, 'end' => '' };