• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Несколько вопросов по редактированию файла спецзнаков (SSS)

Автор Фанат Компаса, 08.11.22, 19:38:03

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Фанат Компаса

Сначала вопросы:
  1) Есть ли нормальный мануал по созданию описаний спецзнаков, включая структуру этих описаний и сущностей, с которыми он работает, типа габарит (curGabarit), BASEBOX (TxtRect), Italic, currentCoord и др. желательно с примерами применения или наоборот примеры с подробным описанием?
  2) Есть ли редактор файлов спецзнаков, чтобы как минимум проверял синтаксис, а в лучшем случае подсвечивал ошибки, предлагал автозавершение ввода, проверял сопряжение команд #BCOORD(n) и #ECOORD(n), отсутствие повторов номеров спецзнаков и как-то обеспечивал навигацию между описаниями спецзнаков.
  2а) Может можно настроить существующие редакторы типа Notepad++, чтобы подсвечивали синтаксис?
  3) Какое значение добавляет команда ADD_ITALIC(r), или лучше сказать как оно соотносится с высотой блока и как его корректно масштабировать (проблема описана ниже)?
  4) Как правильно изменять текущий габарит с помощью команд ADD_GAB_X и ADD_GAB_Y и что делать, если его надо уменьшить, а не увеличить?

  Теперь по пунктам:
  1) Особо добавить нечего кроме того, что первый раз я прикоснулся к файлу спецзнаков около 20 лет назад единожды и больше туда не лазил, спустя 20 лет попытался с налета решить простую задачу - сделать рамку в виде круглых скобок и сел в лужу, помимо сложного для восприятия и программирования языка похожего на ассемблер для программируемого калькулятора (если бы такой существовал  :o ) там еще и команды работают не так как от них ожидаешь. Кажется даже авторы поставочного набора знаков не знали как он будет работать. Спасибо авторам файла спецзнаков, они сопроводили его обильными комментариями, которые позволяют хотя бы понять их замысел, но вот для понимания того как это работает комментариев недостаточно, приходится много экспериментально проверять как работает тот или иной кусок кода, чтобы понять.
  2) В наборе несколько сотен спецзнаков и все их кто-то на чем-то писал :w: , не в блокноте же, уверен что в Асконе есть редактор этих спецзнаков или конвертер из высокоуровневого языка, почему они не делятся им с пользователями? Ну даже если такого нет, за 20 лет кто-то же мог его написать или адаптировать сторонний редактор. Кстати, магия, Notepad++ сам предлагает автозавершение имен команд, хоть что-то.
  3) Для примера я привел рамку, наклоненную на величину возвращаемую оператором ADD_ITALIC(r), видно, что сдвиг не учитывает наклон текста внутри рамки, но также он не параллелен вертикальным линиям символов, если относить его к высоте блока (про многострочные я молчу) и даже высоте заглавных букв и только если взять высоту заглавных букв с коэффициентом 0,7 (высота строчных букв) он станет параллелен. Но какой мне от этого толк, кто мне гарантирует, что в рамку будут вписаны только строчные буквы, не надо ли рассчитывать, что символы будут высоты заглавных букв или даже занимать всю высоту блока? :um:
ItalicBox.PNG
  4) ADD_GAB_X и ADD_GAB_Y. Я сразу не понял, что означают эти команды из описания, поэтому попытался изучить их на примерах, но даже с примерами я все равно ничего не понял.  :%: Поясню, габаритов у текстового блока четыре: возвращаются командами LBASEBOX, RBASEBOX, TBASEBOX, BBASEBOX, а команд для редактирования две и, магия, они работают во все стороны. Как интерпретатор понимает верхний или нижний, правый или левый габарит я хочу изменить? А если я хочу не увеличить, а уменьшить или сдвинуть габарит? Скажу лишь что, если определенным образом ошибиться в задании габарита он будет расти при каждом изменении текста, но не уменьшаться.

  На этом пока закончу, так как и без того много написал, позже напишу еще про выкрутасы со спецзнаками в компасе, которых хотелось бы избежать, но пока не удается.  :cl:

Фанат Компаса

Вот еще про мои злоключения с многострочным текстом в спецзнаке.
  1) Это стандартный текст в рамке:
A.TextInBox.PNG
Справа и слева один и тот же текст, справа к нему применен наклон. Видно, что стандартная рамка не захватывает текст внутри спецзнака, хотя ширину "угадывает" правильно и отодвигает следующий текст дальше. Но у меня вопрос, почему вообще текст внутри рамки сдвигается влево, да еще и сдвиг нарастает с каждой строкой?
  2) А это моя рамка построенная по границам BASEBOX, многие спецзнаки работают так же, только не отрисовывают рамку, она нужна чтобы показать реальные границы текстового блока:
B.BaseBox.PNG
Здесь еще хлеще, теперь текст после рамки начинается внутри нее, а следующая рамка также сдвигается влево, наезжая на текст перед ней. В варианте без наклона мы подобных артефактов не наблюдаем.
  3) И на сладкое.
C.FantomFields.PNG
Это снова обычный текст в рамке. Пример нет смысла изображать с наклоном, так как там все будет запутано, а в прямом варианте видно, что до и после многострочного текста появляется два поля, которые обозначены "YY" и "ZZ", второе однострочное, первое многострочное, но с прибабахами, текст в нем идет выше поля "ХХ" и только последняя строка находится слева. Если удалить все переносы в поле "XX", то все поля сольются в одно и будут помещены в поле "XX". Зачем эти поля сделаны, и как управлять ими, их взаимным расположением из файла описаний спецзнаков?
  Вообще, интересно, ведь "Индекс", "Дробь" и "Над/подстроки" по сути оперируют двумя и даже тремя текстовыми блоками. Это наводит на мысль, что и спецзнаки могут включать больше одного текстового поля, но как, с помощью каких конструкций?

p3452

Насколько я помню, "мануалом" является сам файл *.sss, в конце файла есть небольшое описание.

Писал простенький редактор для *.sss файлов, но заказчик "передумал"..., тогда, вроде, все получилось кроме предпросмотра.
Кстати, помнится и на форуме обсуждали...

Фанат Компаса

#3
Еще ряд вопросов возник.
  1) Можно ли из своей программы (может, как вариант, библиотеки) как-то загрузить в компас свой файл спецзнаков и получить спецзнак сгенерированный компасом?
  Если например делать свой просмотрщик спецзнаков, то язык вроде на вид простой, но дело в том что там много незадокументированных особенностей, о которых я писал выше. Отлавливать их очень долго и сложно, но если бы Компас сразу сам генерировал спецзнак в редакторе с учетом своих особенностей и пользователь видел реальную, а не смоделированную картинку, эти особенности можно было бы сразу видеть и учитывать при описании спецзнаков.
  2) Вообще язык описания файла спецзнаков как-то отражает внутреннее представление данных в компасе или он так сделан просто чтобы пользователи осмелившиеся сунуть туда свой любопытный нос не скучали? Почему там именно такой довольно странный даже в сравнении с программируемым калькулятором набор команд и почему он не расширяется? Например было бы неплохо как минимум добавить заливку области и толщину линии, а еще реализовать работу с несколькими блоками текста.
  3) Все же может кто подскажет, есть ли синтаксически близкие языки программирования, чтобы выбрать например в редакторе Notepad++, чтобы хоть как-то синтаксис подсвечивался.
  4) Как посмотреть коды спецзнаков уже вставленных в тексте в компасе, если они отсутствуют в выбранном файле спецзнаков или работают не так?
  5) И еще, что за параметр currentTextStyle.IsTrueType() в команде JMP_TT(label), чем он переключается? И соответственно в каких случаях используется шрифт FontVector в команде TEXT_ADDX_F("str|FontTT|FontVector"? (опять же чтобы протестировать как это работает)

p3452

Хотел ответить точно по пунктам, но читая Ваш п.5 - передумал...

Цитата: Фанат Компаса от 09.11.22, 20:49:045) И еще, что за параметр currentTextStyle.IsTrueType() в команде JMP_TT(label), чем он переключается?...
1. "if( currentTextStyle.IsTrueType() ) goto label" - это, всего лишь, комментарий к команде JMP_TT(label)...
Цитата: Фанат Компаса от 09.11.22, 20:49:045) ...И соответственно в каких случаях используется шрифт FontVector в команде TEXT_ADDX_F("str|FontTT|FontVector"? (опять же чтобы протестировать как это работает)
2. Какой тип шрифта использовать TrueType или Vector решаете Вы сами...