Обработка текста: преобразовать текст оглавления в формат закладки djvu?

Использовать -r опция для расширенного regexp синтаксиса:

sed -r -e 's/foo|bar/narf/g'

Иначе выйдите из разъединения как \|:

sed -e 's/foo\|bar/narf/g'
1
23.05.2017, 15:40
2 ответа

Вот awk сценарий, который пытается произвести достойное добавление отступа. Это предполагает, что вход правильно построен (например, строка прежде 3.2.2 должен быть 3.1 или 3.1.something, нет 3).

#! /usr/bin/awk -f
BEGIN { printf "(bookmarks"; depth = 1; }
{
    level = split($1, s, ".");
    while (level < depth) {--depth; printf ")";}
    print "";
    depth = level + 1;
    gsub(/[\\"]/, "\\&");
    page = $NF;
    sub(/ +[^ ]*$/,"");
    for (i in s) printf " ";
    printf "(\"%s\" \"#%s\"", $0, page;
}
END { while (depth-- > 0) printf ")"; print ""; }

Синтаксис DJVU не имеет никакого отношения к XML; это s-выражения.

2
27.01.2020, 23:29
  • 1
    Спасибо! я задавался вопросом, существует ли некоторый текстовый редактор / плагины, которые могут сделать следующее: после того, как я выберу несколько последовательных строк, это может поместить эти строки между парой круглых скобок? Т.е. это может помочь в интерактивной записи S-выражений. –  Tim 20.07.2011, 22:59
  • 2
    @Tim Да, Emacs. На самом деле я не понимаю точно, что Вы хотите сделать, но 1. Emacs является корректным ответом на в значительной степени любой вопрос, который запускается с, “там текстовый редактор, который может” и 2. Emacs частично записан в Lisp, таким образом, его авторы поместили довольно мало внимания на создание редактирования легкий Lisp. –  Gilles 'SO- stop being evil' 20.07.2011, 23:36
  • 3
    Спасибо!, Что я хочу сделать: (1) помещаются несколько строк в пару круглой скобки, путем выделения их и затем выполнения некоторой команды; (2) дисплей древовидная структура, представленная S-выражениями более ясно, например, добавление отступа. Я просто попробовал режим Paredit Emacs, но я не могу найти технические возможности. Я пропускаю что-то? –  Tim 20.07.2011, 23:48
  • 4
    @Tim Для синтаксиса Lisp, используйте режим Lisp. Для вставки круглых скобок вокруг каждой строки замените regexp ^ ( и $ ). Не уверенный пренебрежительный, что предложить как sexp симпатичный принтер (значение по умолчанию Emacs не то, что симпатичный), но существуют, конечно, хорошие вокруг. –  Gilles 'SO- stop being evil' 21.07.2011, 00:30

Любой язык программирования сможет проанализировать Ваш входной пример правильно.

Выберите язык программирования и затем проанализируйте вход deliminating вход сначала "." и "" сначала и "" второй.

Я использовал бы Perl, но независимо от того, что язык, с которым разработчик является самым знакомым, хорошо работал бы.

Следует иметь в виду, что автоматические решения будут только работать, если вход будет следовать за строгим синтаксисом. И если это не известный стандарт, там не будут никакими предварительно сделанными инструментами, преобразовывают это в XML или djvu.

1
27.01.2020, 23:29

Теги

Похожие вопросы