Содержание

интерпретатор языка PostScript для 2D графики


Содержание

Задача — написать интерпретатор ограниченного подмножества формального языка PostScript. Интерпретатор должен представлять из себя оконное приложение, которое получает в аргументах командной строки путь к файлу со скриптом на языке PostScript, и затем показывает в окне изображение — результат интерпретации скрипта.

Техническое задание

  1. Ознакомиться с языком PostScript, его синтаксисом и возможностями
  2. Составить список отдельных возможностей (features) интерпретатора, которые, предположительно, будут реализованы, и составить набор проверочных изображений — по 2-3 на каждую возможность.
  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)

Twitter LinkedIn Facebook Адрес электронной почты

  • Статья

Область применения: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, укажите новое расположение, изменив параметры окружения на вкладке Настройка в этом же окне. См. раздел Указание существующего окружения вручную.

  • Если вы установили интерпретатор с помощью установщика, выполните следующие действия для переустановки интерпретатора в новом расположении:

    1. Верните интерпретатор Python в исходное расположение.
    2. Удалите интерпретатор с помощью установщика, который очистит записи в реестре.
    3. Повторно установите интерпретатор в новом расположении.
    4. Перезапустите 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 года Пропио перерос свое прежнее помещение и переехал в новое место, расположенное в Корпоративном лесу.