Преттипринт
Pretty-printing (или Prettyprinting ) — это применение любого из различных соглашений о стилистическом форматировании к текстовым файлам , таким как исходный код , разметка и подобные виды контента. Эти соглашения о форматировании могут предполагать соблюдение стиля отступов , использование другого цвета и шрифта для выделения синтаксических элементов исходного кода или настройку размера, чтобы людям было легче читать и понимать контент. Симпатичные принтеры для исходного кода иногда называют форматтерами кода или украшателями .
Красиво-печатная математика
[ редактировать ]Под красивой печатью обычно подразумевается отображение математических выражений так, как если бы они были набраны профессионально. Например, в системах компьютерной алгебры, таких как Maxima или Mathematica, система может записывать выходные данные типа « х ^ 2 + 3 * х " как " TI - Некоторые графические калькуляторы , такие как серии Casio 9860 , серии HP-49/50 и HP Prime , TI-84 Plus , 89 и TI-Nspire , TI-83 Plus с PrettyPt [1] надстройка, или TI-84 Plus с той же надстройкой, или операционные системы с поддержкой MathPrint, могут выполнять красивую печать. Кроме того, ряд новых научных калькуляторов оснащены матричными экранами, обеспечивающими красивую печать, например, серия Casio FX-ES (Natural Display), серия Sharp EL-W (WriteView), HP SmartCalc 300s , TI-30XB и Нумворкс .
Многие программы форматирования текста умеют также набирать математические данные: TeX был разработан специально для качественного математического набора .
Красиво печатаемая разметка и код на основе тегов
[ редактировать ]Симпатичная печать в экземплярах языка разметки чаще всего связана с отступами тегов и строкового содержимого для визуального определения иерархии и вложенности. Хотя синтаксические структуры языков на основе тегов существенно не различаются, отступы могут существенно различаться в зависимости от того, как интерпретируется язык разметки, или от данных, которые он описывает.
В MathML не символы пробелов отражают данные, значение или синтаксис сверх того, что требуется синтаксисом XML . В HTML пробелы между тегами считаются текстом и анализируются как текстовые узлы в анализируемом результате. [2] Хотя к документу MathML можно широко применять отступы, при красивой печати HTML-документа необходимо проявлять достаточную дополнительную осторожность, чтобы гарантировать, что дополнительные текстовые узлы не будут созданы или уничтожены в общей близости к содержимому или элементам тега, отражающим содержимое. Эта разница в сложности нетривиальна с точки зрения автоматизированной операции красивой печати, где не требуются специальные правила или крайние случаи, как в более простом примере MathML. В примере HTML может потребоваться ряд прогрессивных взаимосвязанных алгоритмов для учета различных шаблонов элементов тегов и контента, который соответствует единому стилю и единообразен в применении в различных случаях, о чем свидетельствует файл markup.ts. [3] компонент приложения, используемый для улучшения HTML, XML и связанных технологий для инструмента Pretty Diff .
Форматирование кода программирования
[ редактировать ]Программисты часто используют инструменты для форматирования языка программирования исходного кода определенным образом. Правильное форматирование кода облегчает чтение и понимание. Разные программисты часто предпочитают разные стили форматирования, например, использование отступов кода и пробелов или расположение фигурных скобок . Средство форматирования кода или индентор кода преобразует исходный код из одного стиля формата в другой. Это относительно просто из-за однозначного синтаксиса языков программирования. Украшение кода включает в себя разбор исходного кода на структуры компонентов, такие как операторы присваивания, if блоки , циклы и т. д. (см. также поток управления ), и их форматирование способом, указанным пользователем в файле конфигурации.
Улучшители кода существуют как отдельные приложения, а также встроены в текстовые редакторы и интегрированные среды разработки . Например, Emacs различные языковые режимы позволяют корректно и привлекательно размещать блоки кода. [4]
HTML
[ редактировать ]Lisp-красивый принтер
[ редактировать ]Ранним примером красивой печати была программа Билла Госпера «GRINDEF» ( т. е. «функция измельчения») ( около 1967 г.), которая использовала комбинаторный поиск с обрезкой для форматирования программ LISP . Ранние версии оперировали исполняемой (списковой) формой программы Lisp и не обращали внимания на специальные значения различных функций. В более поздних версиях были специальные соглашения о чтении для включения неисполняемых комментариев, а также для сохранения макросов чтения в нераскрытой форме. Они также допускали специальные соглашения об отступах для специальных функций, таких как if
. [5] [6] Термин «шлифовка» использовался в некоторых кругах по Лиспу как синоним красивой печати. [7]
Правила стиля проекта
[ редактировать ]Многие проекты с открытым исходным кодом установили правила компоновки кода. Наиболее типичными являются GNU. форматирование [8] и стиль BSD. [9] Самая большая разница между ними заключается в расположении фигурных скобок: в стиле GNU открывающие и закрывающие скобки находятся на отдельных строках с одинаковым отступом. Стиль BSD помещает открывающую скобку в конце предыдущей строки, а за закрывающей скобкой может следовать else . Размер отступа и расположение пробелов также различаются.
Пример форматирования и украшения кода
[ редактировать ]В следующем примере показаны некоторые типичные структуры C и то, как стиля отступов их форматируют различные правила . Без какого-либо форматирования это выглядит так:
int foo(int k){if(k<1||k>2){printf("out of range\n");printf("this function requires a value of 1 or 2\n");}else{printf("Switching\n");switch(k){case 1:printf("1\n");break;case2:printf("2\n");break;}}}
Программа GNU indent выдает следующий результат, когда ее просят сделать отступ в соответствии с правилами GNU :
intfoo (int k){ if (k < 1 || k > 2) { printf ("out of range\n"); printf ("this function requires a value of 1 or 2\n"); } else { printf ("Switching\n"); switch (k) { case 1: printf ("1\n"); break; case 2: printf ("2\n"); break; } }}
Он выдает следующий результат при форматировании в соответствии с правилами BSD:
intfoo(int k) { if (k < 1 || k > 2) { printf("out of range\n"); printf("this function requires a value of 1 or 2\n"); } else { printf("Switching\n"); switch (k) { case 1: printf("1\n"); break; case 2: printf("2\n"); break; } }}
См. также
[ редактировать ]Связанные понятия
- Elastic tabstop — функция многих редакторов исходного кода, которая обнаруживает и поддерживает выровненные отступы.
- Минимизация : сделать исходный код компактным, даже если людям становится труднее его понимать.
- Обфускация , намеренное усложнение исходного кода для понимания людьми, особенно по мере того, как он становится более запутанным.
Утилиты
- enscript — конвертер текста в PostScript с удобными функциями печати.
Ссылки
[ редактировать ]- ^ «PrettyPrint — ticalc.org» . www.ticalc.org . Проверено 13 апреля 2022 г.
- ^ Барон, Л. Дэвид. «Пробелы в DOM» . Сеть разработчиков Mozilla . Проверено 27 августа 2012 г.
- ^ разметка.ts
- ^ Столлман, Ричард М. «Отступы для программ» . Руководство по GNU Emacs . Фонд свободного программного обеспечения . Проверено 20 октября 2011 г.
- ^ Ира Гольдштейн, «Красивая печать: преобразование списка в линейную структуру», Памятка по искусственному интеллекту 279, Массачусетский технологический институт, февраль 1973 г., полный текст
- ^ Ричард К. Уотерс, «Использование нового обычного принтера Lisp», ACM SIGPLAN Lisp Pointers 5 : 2: 27-34, апрель – июнь 1992. полный текст
- ^ Файл жаргона , sv Grind
- ^ Стили GNU
- ^ Стиль BSD
Внешние ссылки
[ редактировать ]- Алгоритм 268: Редактор эталонного языка ALGOL 60 Уильям М. МакКиман : Commun. АКМ 8 (11): 667–668 (1965).
- lgrind , Комплексная сеть архивов TEX
- NEATER2: реформатор заявления об источнике PL/I Кеннет Конроу, Рональд Г. Смит : Commun. АКМ 13 (11): 669–675 (1970).
- SOAP - Упрощение малоизвестных программ на Алголе Р. С. Скоуэн, Д. Аллин, А. Л. Хиллман, М. Шимелл : Отчет центрального компьютерного подразделения Национальной физической лаборатории CCU6 (апрель 1969 г.) Включает форматированный список исходного кода SOAP.
- SOAP — программа, которая документирует и редактирует программы ALGOL 60. Р. С. Скоуэн, Д. Аллин, А. Л. Хиллман, М. Шимелл : Comput. Дж. 14 (2): 133–135 (1971).
- Оригинальный исходный код SOAP из KDF9
- Руководство пользователя SOAP. (для Эдинбургского IMP ) Питер Салкельд Робертсон (1976)
- Исходный код SOAP в/для IMP9
- Soap80: программа для форматирования исходных программ IMP80. Дж. М. Мьюрисон, Эдинбургский региональный компьютерный центр (1980)
- Исходный код SOAP для IMP80 Э. Н. Грегори, Кентский университет в Кентербери; Питер Д. Стивенс, Эдинбургский региональный компьютерный центр
- PRETTYP.PAS Ранний Pascal Prettyprinter. Ледгард и др.
- Паскаль со стилем (1979)
- style(9) Рекомендации по стилю FreeBSD
- vgrind , Проект семейной реликвии [Unix]
- Форматирование исходного кода. Рекомендации по стилю GNU.