интерпретатор языка PostScript для 2D графики
Содержание
Задача — написать интерпретатор ограниченного подмножества формального языка PostScript. Интерпретатор должен представлять из себя оконное приложение, которое получает в аргументах командной строки путь к файлу со скриптом на языке PostScript, и затем показывает в окне изображение — результат интерпретации скрипта.
Техническое задание
- Ознакомиться с языком PostScript, его синтаксисом и возможностями
- Составить список отдельных возможностей (features) интерпретатора, которые, предположительно, будут реализованы, и составить набор проверочных изображений — по 2-3 на каждую возможность.
- Составить дорожную карту (roadmap) проекта в виде таблицы, которая бы ответила на вопросы
- сколько итераций и каковы их сроки сдачи (deadline)?
- что получает пользователь в конце каждой итерации?
- как это выглядит?
- какие задачи надо выполнить в итерации, чтобы пользователь смог получить обещанное?
Язык PostScript
Интерпретируемый язык PostScript разработан для использования в принтерах как альтернатива растровым изображениям. Вместо объёмной карты пикселей принтер может получить небольшую серию текстовых команд, и интерпретировать их для получения графического рисунка, который затем будет напечатан.
В данном примере однострочные комментарии начинаются с символа “%”:
100 100 moveto % перемещаем начальную точку к левому нижнему углу прямоугольника 172 100 lineto % добавляем к фигуре отрезок, ведущий в правый нижний угол 172 172 lineto % добавляем к фигуре отрезок, ведущий в правый верхний угол 100 172 lineto % добавляем к фигуре отрезок, ведущий в левый верхний угол closepath % добавляем к фигуре отрезок, ведущий назад к начальной точке stroke % рисуем по контуру последнюю заданную фигуру showpage % печатаем страницу и затем выталкиваем из принтера
Заметим, что в PostScript команда появляется после её аргументов. Такой формат записи выражений называется обратной польской нотацией (в честь польского математика Яна Лукашевича), и он хорош тем, что не требует скобок для указания приоритета операций.
При интерпретации скрипта получим прямоугольник внизу страницы:
Интерпретация PostScript с помощью Ghostscript
Открытый кроссплатформенный пакет программ Ghostscript содержит в себе интерпретатор PostScript, способный в том числе вывести результат выполнения скрипта в JPEG или в PNG. На Unix-платформах можно использовать вспомогательный Shell-скрипт ps_to_png.sh
:
#/usr/bin/env bash # Интерпретирует переданный параметром скрипт на языке PostScript. # Результат выводит как 32-битный PNG с alpha-каналом в "page-%d.png", # где '%d' - номер страницы. # См. также документацию по использованию ghostscript из командной строки: # http://www.ghostscript.com/doc/doc/Use.htm gs "-sDEVICE=pngalpha" "-sOutputFile=page-%d.png" -dBATCH -dNOPAUSE "$@"
Использовать ps_to_png.sh
из оболочки командной строки можно так:
$ ./ps_to_png.sh rect.ps GPL Ghostscript 9.18 (2015-10-05) Copyright (C) 2015 Artifex Software, Inc. All rights reserved. This software comes with NO WARRANTY: see the file PUBLIC for details. $ xdg-open page-1.png
Аналогичный скрипт можно оформить с помощью Batch или PowerShell для Windows.
PostScript вычисляется с помощью стека
В языке PostScript операнды складываются в стек.
Примеры скриптов на PostScript
Вывод текста
Вывод надписи “I love PostScript!” со шрифтом “Times New Roman” размера 15pt:
/Times-Roman findfont 15 scalefont setfont 100 500 moveto (I love PostScript!) show showpage
Отображение той же надписи со шрифтом “Times New Roman” в наклонном начертании (также известном как italic) размера 20pt:
/Times-Italic findfont 20 scalefont setfont 100 450 moveto (I love PostScript!) show showpage
2D трансформации
![Иллюстрация](img/postscript-transform2d.png) ```ps %!PS-Adobe-1.0 % По умолчанию, постскрипт использует единицу измерения 1 пункт=1/72 дюйма, % а нам нравятся миллиметры. 72 25.4 div % 1 мм = 72/25.4 пунктов dup % дублировать значение на вершине стека scale % растянуть в это количество раз по обеим координатам 100 100 translate % установить начало координат в (100мм, 100мм) /Times-Roman findfont % взять шрифт Times-Roman 10 scalefont % растянуть до размера 10 (у нас - мм!) setfont % установить выбранный шрифт 0 30 330 { % цикл для углов от 0 до 330 с шагом 30 gsave % запомнить текущее преобразование координат rotate % повернуть систему координат (угол в градусах берём с вершины стека) 15 0 moveto % перейти в точку (15мм, 0мм) (Wikipedia) show % написать слово текущим шрифтом grestore % вернуть преобразование координат } for % конец цикла for showpage % вывести страницу
Градации серого
0.2 setgray 10 setlinewidth 100 700 moveto 200 0 rlineto stroke newpath 0.3 setgray 100 600 moveto 200 0 rlineto stroke newpath 0. 4 setgray 100 500 moveto 200 0 rlineto stroke newpath 0.5 setgray 100 400 moveto 200 0 rlineto stroke newpath 0.6 setgray 100 300 moveto 200 0 rlineto stroke newpath 0.7 setgray 100 200 moveto 200 0 rlineto stroke newpath 0.8 setgray 100 100 moveto 200 0 rlineto stroke showpage
Объявление процедур (def)
В примере используется объявление процедур (def), параметры которых лежат в стеке в момент вызова. Объявлены процедуры /inch
, /box
и fillgray
% Переводит дюймы в точки (points) /inch { 72 mul } def % Рисует прямоугольник % параметры в стеке: [x, y] /box { newpath moveto 1 inch 0 rlineto 0 1 inch rlineto -1 inch 0 rlineto closepath } def % Заливает прямоугольник серым цветом % параметры в стеке: [уровень серого цвета] /fillgray { setgray fill } def % Основная программа 2 inch 3 inch box .9 fillgray 2.5 inch 3.5 inch box .7 fillgray showpage
Объявление процедур, пример 2
% Выполняет поворот осей координат, % тем самым модифицирует состояние интерпретатора. /neworigin { 250 150 translate 60 rotate } def % Выполняет рисование треугольника. /treangl { newpath 0 0 moveto 90 0 lineto 20 70 lineto closepath fill } def treangl neworigin treangl neworigin treangl showpage
Объявление процедур, пример 3
%%% Определение процедур /pagewidth 8 72 mul def % Ширина страницы /circle { % Рисование круга x y radius 0 360 arc stroke } def /new-x { % Новая позиция для следующего круга x radius add % Это эквивалентно: /x exch def % х=х+radius } def /DoLineOfCrle { % Рисуем линию из окружностей /y exch def % заносим значения из стека в переменные /radius exch def /x 0 def { % условный цикл x pagewidth le % центр нового круга в пределах границы? {circle new-x} % да: рисуем и вычисляем новую позицию {exit} % иначе - выход из цикла ifelse } loop } def %%%% Рисуем две линии кругов 15 200 DoLineOfCrle 25 200 DoLineOfCrle showpage
Сохранение и восстановление состояния (gsave/grestore)
/cmm { 72. 0 mul 25.4 div } def % перевод из миллиметров в пункты % звезда - штриховка и контур (слева на рисунке) newpath % начинаем путь 20 cmm 180 cmm moveto 20 cmm 0 rlineto 10 cmm 20 cmm rlineto -10 cmm 20 cmm rlineto -20 cmm 0 rlineto -10 cmm -20 cmm rlineto 10 cmm -20 cmm rlineto gsave % сохраняем текущие графические параметры clip % устанавливаем путь как маску 0.4 setgray 0.1 setlinewidth % устанавливаем цвет линии и толщину линии -70 2 70 {newpath cmm 180 cmm moveto 50 cmm 50 cmm rlineto stroke} for % цикл grestore % восстанавливаем графические параметры "до штриховки" stroke % рисуем контур вдоль пути % звезда - заливка, штрих и границы (справа на рисунке) gsave % сохраняем графические параметры newpath % начинаем путь 120 cmm 180 cmm moveto 20 cmm 0 rlineto 10 cmm 20 cmm rlineto -10 cmm 20 cmm rlineto -20 cmm 0 rlineto -10 cmm -20 cmm rlineto 10 cmm -20 cmm rlineto gsave % сохраняем текущие графические параметры 0.9 setgray fill % зальем фигуру светло-серым grestore % восстанавливаем графические параметры "до заливки" gsave % и сохраняем их опять clip % устанавливаем путь как маску 2 10 120 {newpath 0 setgray 0.5 setlinewidth 130 cmm exch 200 cmm exch 0 360 arc stroke} for % цикл рисования окружностей grestore % восстанавливаем графические параметры "до штриховки" 0 setgray 2.0 setlinewidth stroke % рисуем контур вдоль пути (граница) grestore % восстанавливаем графические параметры "до пути" showpage
Литература
- Статья “Язык PostScript” (linuxfocus.org)
- PostScript language reference от Adobe Systems Inc. (adobe.com, PDF)
- Книга “PostScript BlueBook” от Adobe Systems Inc. (fnal.gov, PDF)
- Серия русскоязычных статей на базе “PostScript BlueBook” (narod.ru)
- Статья “Первые уроки по языку PostScript” (narod.ru)
- Пакет с 6,500 скриптов изображений на языке PostScript (sourceforge.net)
Выбор и установка интерпретаторов Python — Visual Studio (Windows)
- Статья
Область применения:Visual StudioVisual Studio для Mac Visual Studio Code
По умолчанию при установке рабочей нагрузки Python для разработки в Visual Studio 2017 и более поздних версий также устанавливается Python 3 (64-разрядная версия). При необходимости вы можете установить 32-разрядную и 64-разрядную версии Python 2, Python 3 вместе с Miniconda (Visual Studio 2019) или Anaconda 2/Anaconda 3 (Visual Studio 2017), как описано в руководстве по установке.
Кроме того, вы можете установить стандартные интерпретаторы из диалогового окна Add Environment (Добавление среды). Выберите команду Add Environment (Добавление среды) в окне Python Environments (Среды Python) или в панели инструментов Python, выберите вкладку Python installation (Установка Python), укажите интерпретаторы для установки и нажмите Install (Установить).
Кроме того, любой интерпретатор из приведенной ниже таблицы можно установить вручную, не используя Visual Studio Installer. Например, если вы установили Anaconda 3 еще до установки Visual Studio, нет необходимости снова устанавливать этот дистрибутив с помощью Visual Studio Installer. Вы также можете установить интерпретатор вручную, если, например, доступна новая версия, которая пока что не отображается в установщике Visual Studio.
Примечание
Visual Studio поддерживает Python 3.7. Visual Studio можно использовать для редактирования кода, написанного на языке Python других версий, но эти версии официально не поддерживаются, а функции, такие как IntelliSense и отладка, могут не работать.
Для Visual Studio 2015 и более ранних версий нужно вручную установить один из интерпретаторов.
Примечание
Хотя в Visual Studio предлагается установить дистрибутив Anaconda, на использование дистрибутива и дополнительных пакетов из Anaconda Repository распространяются условия предоставления услуг Anaconda. Согласно этим условиям, некоторым организациям может потребоваться приобрести коммерческую лицензию Anaconda или настроить средства для доступа к другому репозиторию. Дополнительные сведения см. в документации по каналам Conda.
Visual Studio (любой версии) автоматически обнаруживает все установленные интерпретаторы Python и окружения для них, проверяя значения в реестре (согласно описанию регистрации Python в реестре Windows 514 PEP). Установки Python обычно находятся в разделе HKEY_LOCAL_MACHINE\SOFTWARE\Python (32-разрядная версия) и HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Python (64-разрядная версия), затем в узлах для распределения, таких как PythonCore (CPython) и ContinuumAnalytics (Anaconda).
Если Visual Studio не сможет обнаружить установленное окружение, см. раздел Указание существующего окружения вручную.
Visual Studio отображает все известные окружения в окне Окружения Python и автоматически обнаруживает обновления для существующих интерпретаторов.
Интерпретатор | Описание |
---|---|
CPython | Собственный и самый используемый интерпретатор доступен в 32- и 64-разрядных версиях (рекомендуется 32-разрядная). Он предоставляет последние возможности языка, максимальную совместимость пакета Python, полную поддержку отладки и взаимодействие с IPython. См. также статью о сравнении Python 2 и Python 3. Visual Studio 2015 и более ранние версии не поддерживают Python 3.6+, и в них может появиться ошибка Неподдерживаемая версия Python 3.6. Используйте Python 3.5 или более раннюю версию. |
IronPython | Реализация .NET для Python (доступна 32- и 64-разрядная версия), обеспечивающая взаимодействие с C#, F# и Visual Basic, доступ к API-интерфейсам .NET, стандартную отладку Python (но не отладку в смешанном режиме C++) и отладку в смешанном режиме IronPython и C#. Однако IronPython не поддерживает виртуальные среды. |
Anaconda | Открытая платформа для анализа и обработки данных на базе Python, которая включает в себя последнюю версию CPython и большинство пакетов со сложной установкой. Если вы не можете сделать выбор, рекомендуется использовать Anaconda. |
PyPy | Реализация JIT для Python с высокопроизводительной трассировкой, которая хорошо подходит для долго выполняющихся программ и ситуаций, когда вы обнаружили проблемы с производительностью, которые не удается устранить другими способами. Работает с Visual Studio, но имеет ограниченную поддержку расширенных возможностей отладки. |
Jython | Реализация Python на виртуальной машине Java (JVM). Как и в IronPython, код, выполняемый в Jython, может взаимодействовать с классами и библиотеками Java. Однако многие библиотеки, предназначенные для CPython, могут быть недоступны. Работает с Visual Studio, но имеет ограниченную поддержку расширенных возможностей отладки. |
Сведения о новых способах обнаружения сред Python см. в статье PTVS Environment Detection (Обнаружение среды PTVS) на сайте github.com.
Перемещение интерпретатора
Если вы переместите существующий интерпретатор в новое расположение с помощью средств файловой системы, Visual Studio не сможет отследить изменение автоматически.
Если изначально вы указали расположение интерпретатора в окне Окружения Python, укажите новое расположение, изменив параметры окружения на вкладке Настройка в этом же окне. См. раздел Указание существующего окружения вручную.
Если вы установили интерпретатор с помощью установщика, выполните следующие действия для переустановки интерпретатора в новом расположении:
- Верните интерпретатор Python в исходное расположение.
- Удалите интерпретатор с помощью установщика, который очистит записи в реестре.
- Повторно установите интерпретатор в новом расположении.
- Перезапустите Visual Studio. Вместо старого расположения должно автоматически определиться новое.
Такой процесс позволяет гарантировать, что в реестре правильно обновятся записи о расположении интерпретатора, которое использует Visual Studio. Также установщик устраняет все возможные побочные эффекты.
См. также
- Управление средами Python
- Выбор интерпретатора для проекта
- Использование файла requirements.txt для зависимостей
- Пути поиска
- Справочная информация по окну «Окружения Python»
Услуги устного перевода по телефону | LanguageLine Solutions
arrow-rightarrow-leftplaysearchuseryoutubefacebooklinkedintwittercloseПерейти к основному содержаниюСовременные организации признают, что лицо нашей нации меняется и что мы вступаем в период беспрецедентного разнообразия. Уже 64 миллиона жителей США говорят дома не на английском языке. Ожидается, что это число будет быстро увеличиваться, поскольку к 2045 году в США преобладает этническое большинство9.0003
Преимущества LanguageLine Телефон
LanguageLine была основана в 1982 году офицером полиции, который стремился преодолеть языковой барьер, с которым он столкнулся в полевых условиях. Сегодня мы гордимся тем, что являемся важным партнером в управлении и развитии современных организаций, которые приветствуют всех людей, независимо от языка, культуры или способностей.
У нас есть опыт, команда и технологии, чтобы превратить сложности языкового ландшафта нашей страны в мощный бизнес-актив для вас.
Сегодня мы являемся крупнейшим поставщиком устных переводов по телефону — больше, чем у наших следующих 10 конкурентов вместе взятых, с более чем 16 000 высококвалифицированных профессиональных устных переводчиков, доступных по запросу. Это означает, что мы можем масштабироваться в соответствии с вашими потребностями, какими бы неожиданными они ни были. Мы обрабатываем около 40 миллионов взаимодействий в год, отвечая на каждый звонок в течение нескольких секунд.
240+
Язык
40 М
Взаимодействия, проводимые ежегодно
8,3 сек.
Ср. время соединения для испанских звонков
0,012%
Соотношение жалоб и обращений
16 000
Профессиональные переводчики доступны по запросу
99,99%
Доступность платформы
16,1 сек.
Ср. время соединения для всех звонков
Мой арабский переводчик проделал большую работу, помогая мне. Мы собирали историю болезни с членом, не говорящим по-английски. Звонок был долгим и отнимал много времени. Переводчик был очень терпелив. Меня удивило, что мне не пришлось повторять ей медицинские вопросы, которые я задавал клиенту.
Медсестра крупной медицинской страховой компании
Мы понимаем, что нет двух одинаковых людей и двух одинаковых организаций. В отличие от любого провайдера в нашей отрасли, LanguageLine обладает гибкостью, предлагая самые современные, настраиваемые потоки вызовов. Эти изобретательные и доступные по цене решения доставят удовольствие вашим клиентам при одновременном снижении затрат.
Проиграть видео
«Это общественная полиция на стероидах»
Узнайте, как полицейские Нью-Йорка используют мобильный перевод по требованию на местах для устранения пробелов в общении.
Приблизительно 130 000 из 1,4 миллиона жителей округа Нассау считаются ограниченно владеющими английским языком. В округе почти 16 процентов латиноамериканцев, а почти 9 процентов жителей идентифицируют себя как азиаты.
Окружная полиция оборудует 177 полицейских машин приложением LanguageLine на смартфонах, позволяющим им по запросу обращаться к профессиональным переводчикам более чем с 240 языков. В конечном итоге во всем отделе будет 650 телефонов с приложением.
«Мы взаимодействуем с общественностью более миллиона раз в год», — сказал представитель. «Вы можете себе представить уровень разочарования полицейского и (представителей общественности), когда они не могут общаться. Это ставит их на уровень комфорта».
Разница в решениях LanguageLine
Узнайте больше о телефонном переводе LanguageLine
Лингвисты мирового класса
Мы ищем лучших устных переводчиков по всему миру, а затем обеспечиваем непрерывное обучение и обучение
Круглосуточная поддержка
Оказываем круглосуточную помощь в установке и оптимизации
Оборудование и вспомогательные материалы
Мы предлагаем ряд продуктов, расширяющих сеансы, которые обеспечивают быстрый и легкий доступ, экономят время и повышают производительность
Надежная отчетность
Узнайте больше об использовании и улучшите языковую программу
электронные книги
Пять основных критериев выбора партнера по устному переводу по запросу
Примите наиболее взвешенное решение при выборе поставщика лингвистических услуг.
Загрузить сейчас
Проконсультируйтесь с нами
LanguageLine превращает лингвистические и культурные проблемы в возможности.
Давайте поговорим о возможностях, которые перевод по требованию может создать в вашей организации.
Языковые услуги Propio — преобразование коммуникации
Мультиплатформенные услуги устного перевода
В Propio мы предоставляем безопасные, многоплатформенные услуги устного перевода и локализации, которые устраняют разрыв между людьми, которых мы обслуживаем, и ресурсами, в которых они нуждаются.
Начало работы
Что делает Propio лучшим в своем классе?
Приверженность качеству переводчиков
Компания Propio обеспечивает честность и качество работы переводчиков с помощью собственного процесса проверки, постоянного обучения, контроля качества и возможностей карьерного роста.
Неограниченный доступ, когда вам это нужно
Благодаря быстрому подключению, доступности услуг 24 часа в сутки, 7 дней в неделю, 365 дней в неделю и индивидуальным параметрам учетной записи наша специальная команда по работе с клиентами поможет вам с легкостью преодолеть языковые барьеры.
Непревзойденная отраслевая ценность
Ориентируясь на потребности клиентов, в течение 25 лет мы использовали передовые технологии, чтобы предоставить клиентам простой процесс и значительную экономию средств.
Удаленный перевод по запросу в 1 клик
Propio ONE — это наше проприетарное мобильное приложение по запросу для удаленного видеоперевода (VRI) и услуг устного перевода по телефону (OPI). Благодаря самому быстрому времени подключения использование нашего приложения является простым, быстрым и экономичным. *Также доступно на любом компьютере через браузер Google Chrome.
Узнать больше
Отрасли
Мы обслуживаем
В течение 25 лет компания Propio является надежным партнером в различных отраслях, причем большую часть нашей клиентской базы составляет здравоохранение. Независимо от того, в какой отрасли работают наши клиенты, для нас важно, чтобы наши услуги были быстрыми, профессиональными и легко доступными. Независимо от того, используют ли клиенты телефон, планшет или настольный компьютер, они могут быть уверены, что Propio Language Services будет готова к использованию, где бы они ни находились.
Здравоохранение и телездравоохранение:
Наш подход, не зависящий от платформы, позволяет нам подключать и предоставлять беспрепятственный доступ более чем 10 000 квалифицированных медицинских переводчиков по запросу.
Бизнес для бизнеса:
Партнерские отношения с Propio позволяют нам выступать в качестве расширения вашей компании, удовлетворяя ваши потребности в языковых услугах из-за кулис.
Государственные службы:
От штатов до контрактов округов, наши услуги устного перевода связывают государственные учреждения с людьми, которые в них больше всего нуждаются.
Образовательная поддержка:
Содействуя родительским собраниям, электронному обучению и индивидуальным планам обучения, мы поддерживаем связь педагогов с семьями с ограниченным знанием английского языка.
Наши услуги
Мы предлагаем полный набор услуг удаленного и личного устного перевода, а также услуги письменного перевода и локализации на более чем 350 языков, используя нашу сеть квалифицированных переводчиков, но при этом будучи простыми в использовании — с высочайшим качеством и стоимостью.
Услуги удаленного перевода
Получите доступ к аудио-, видео-, веб-конференциям и телемедицинским переводам по запросу от опытных переводчиков за считанные секунды. Доступен 24 часа в сутки, 365 дней в году.
Узнать больше
Надежные услуги устного перевода
Высококачественные услуги устного перевода, предназначенные для предотвращения языковых барьеров и обеспечения доступа к медицинской помощи. Доступно в районе метро Канзас-Сити и по всей стране.
Узнать больше
Услуги по переводу и локализации документов по всей стране
Инвестируйте в точные, согласованные услуги по письменному переводу и локализации документов, предоставляемые эксклюзивной сетью из более чем 100 000 профессиональных сертифицированных лингвистов.
Узнать больше
Языковые услуги для бизнеса по всей стране
Расширьте возможности языковых услуг, предоставляемых вашей организацией, работая в качестве партнера White Label с Propio. Ваши клиенты увидят ваш бренд, наслаждаясь простым и эффективным интерфейсом.
Узнать больше
Оценка и тестирование переводчиков в США
Компания Propio разработала программу оценки и обучения для определения готовности двуязычных сотрудников или компетентности переводчиков. Нажмите, чтобы узнать больше о нашей академии переводчиков.
Узнать больше
Последние моменты
Узнайте нашу историюPropio приобретает Vocalink Global
Это третья и крупнейшая компания по оказанию лингвистических услуг, которую приобрела Propio.
«Благодаря этому приобретению я считаю, что теперь мы действительно можем реализовать наши амбиции по преобразованию коммуникаций, помогая нашим клиентам добиться значительной экономии средств, улучшая качество обслуживания пациентов и потребителей».
Марко Ассис, партнер и генеральный директор Propio.
Propio ONE запускает
Компания Propio запустила проприетарное приложение, которое позволяет пользователям подключаться через аудио или видео к переводчику или присоединяться к виртуальному конференц-залу для совещаний или телемедицины.
Узнайте больше о Propio one
Propio переезжает в новую штаб-квартиру
Осенью 2020 года Пропио перерос свое прежнее помещение и переехал в новое место, расположенное в Корпоративном лесу.