Как нарезать текст или HTML-строку на страницы с iPhone SDK? - PullRequest
2 голосов
/ 16 декабря 2009

Как нарезать некоторую текстовую (html) строку на количество страниц, чтобы можно было читать текст как книгу?

Спасибо за предложения.

1 Ответ

4 голосов
/ 16 декабря 2009

Предполагая, что вы счастливы, узнав только подмножество разметки HTML без CSS (здесь я предполагаю, что


только теги плюс для изменения размера шрифта ( с другими атрибутами игнорируются), imageтеги для изображений со всеми значениями, кроме src, width, height игнорируются и точные ширина и высота обязательны для всех остальных тегов / атрибутов игнорируются): -

  1. У TidyLib, похоже, есть лицензия MIT - http://tidy.sourceforge.net/#source

  2. SAX анализирует вывод XHTML TidyLib с использованием NSXmlParser в пользовательскую объектную модель (если только вы не используете исключительно более поздние версии iPhone OS с общедоступным встроенным API анализатора DOM, в этом случае просто используйте объектную модель DOM).

  3. Настройка конечного автомата с позицией каретки в левом верхнем углу страницы и начальным размером и форматированием шрифта, номером страницы 1, максимальной высотой глифов / изображений в текущей строке, равной нулю, и пустым списком границ страницы .

  4. Для каждого прогона текста или изображения в объектной модели применяйте предварительные изменения размера / формата шрифта, измеряйте текст с помощью вызовов измерения текста iPhone, уменьшая длину текста (обрезать до ближайшего пробела или дефиса), пока он не уместится на текущую строку и сброс каретки к началу и продолжению строки для переносов строк, и примените следующие изменения размера шрифта и форматирования. Пересчитайте ширину и высоту текста по некоторым факторам в тех случаях, когда это требуется для предотвращения переполнения страницы в реальном механизме рендеринга страниц (UIWebView; вам придется поэкспериментировать, чтобы увидеть, каковы факторы в механизме рендеринга) , Запись границы страницы в списке.

  5. Преобразование объектов между границами страниц в упрощенный XHTML для каждой страницы. Вы можете добавить немного CSS на этом этапе, например, для форматирования цветов ссылок. Вам нужно будет преобразовать локальные ссылки в привязки на другой странице, чтобы загрузить правильную другую страницу. Возможно, добавьте нижний колонтитул / верхний колонтитул страницы с номерами страниц (вычтите их размер из высоты страницы на предыдущих этапах).

  6. Сохранить XHTML как набор файлов.

По сути это будет работать до тех пор, пока исходный HTML специально подготовлен для использования подмножества HTML для вашего приложения. Любой старый HTML-код не подойдет, хотя, возможно, он может быть не совсем бесполезным, чтобы дать приблизительное представление о предварительном просмотре в некоторых случаях для некоторых файлов.

В приведенном выше описании предполагается, что вы отбрасываете форматирование, например ALIGN = и таблицы. Это действительно очень простой подход, и он не будет воспроизводить сложные страницы, как изначально задумано! Это может вас не устраивать!

Возможно, файлы должны быть предварительно обработаны до того, как они попадут на айфоны в поле, но если изменится поведение переноса строк / теста iPhone OS / WebView, может измениться наилучшая позиция для разрывов страниц. Таким образом, вам может потребоваться сократить ваши страницы меньше, чем вы думаете, чтобы они могли неожиданно расти при изменении движка рендеринга. Хм. Возможно, задача не из легких!

Я даже не пытался анализировать таблицы HTML ... HTML, конечно, во всей своей неограниченной полноте, невероятно сложен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...