LINUX.ORG.RU
ФорумTalks

Укуренный SVG

 how to not design like a faggot,


1

1

Ковыряю сий чудесный формат и диву даюсь. Какой укурок это придумал?

Мало того, что xml, но с этим ладно. Пытаюсь разобрать path для одной своей поделки.

Первое, что бросается в глаза — разделителя координат может не быть, если они негативные.

Т.е. «100,200,300,400» — если они позитивные, и «100-200-300,400» — если некоторые из них негативные. Это конечно «очень упрощает» парзание этой ахинеи!

Далее, параметры bezier зависят от предыдущей комманды. Statefull format, WTF!!?

По хорошему там должно было быть 4 координаты. Имеем же сначала «move»: «Mx1,y1» и сразу за ней вторая комманда с тремя оставшимися параметрами «cx2,y2,x3,y3,x4,y4»

При этом circle и ellispe описаны отдельными атрибутами. У path же только один с выше указанной ахинеей.

Повырывать бы им всем все конечности и гениталии, что бы не размножались! Как оно вообще попало в upstream?

Выдохнул.

★★★★★

Последнее исправление: beastie (всего исправлений: 3)

Этот формат и стандарт вебмакаки делали. Чему тут можно удвиляться?

EXL ★★★★★
()
Ответ на: комментарий от EXL

Меня удивляет, что оно вообще работает. XML — не для людей. Так сделайте же и отальное для машин!

Разпарсить эту фигню — задача не тривиальная. Какого чёрта, спрашивается?

beastie ★★★★★
() автор топика
Последнее исправление: beastie (всего исправлений: 1)
Ответ на: комментарий от beastie

тамже еще можно координаты команды то относительно то абсолютно указывать в path , и зависит от регистра буквы

Deleted
()
Ответ на: комментарий от Deleted

Это тоже, но это ok — у многих плоттеров есть абсолютные и относительные комманды. Меня больше удивляет, зачем это сделано так, что бы машинно это было сложно разпарсить? Всё равно ведь люди это читать не будут. А если и будут, то и им проще будет.

beastie ★★★★★
() автор топика
Последнее исправление: beastie (всего исправлений: 1)

Statefull format, WTF!!?

так вроде так делали еще в 80х, чтобы сэкономить байтики. Н-р хочешь ты показывать этот SVG спектрумом..

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

И с одной, и с двумя, и через e, и бог знает как ещё.

ilammy ★★★
()
Ответ на: комментарий от stevejobs

Я пытаюсь написать драйвер для одного плоттера.

Точнее «драйвер» уже есть, осталось скармливать ему данные. PS — совсем не хочется. Думал припилить SVG, но понимаю, что это дурная затея.

beastie ★★★★★
() автор топика
Ответ на: комментарий от beastie

машины распарсят и не поперхнутся, применив необходимый алгоритм, а вот программист повесится, это да.

mm3 ★★★
()

ждем тега «how to not moderate like a faggot»

x0r ★★★★★
()
Ответ на: комментарий от stevejobs

с двумя буквами

Больше тебя в этом кулингсао-никсбрейновском(забанили хоть или он ещё готовит ответный удар?) стиле правописания ничего не удивило?

Stahl ★★☆
()

Сочувствую. Когда смотрел на svg у меня возникали те же чувства.

Нечто подобное я испытываю по отношению к go.

true_admin ★★★★★
()
Ответ на: комментарий от beastie

Секция «Troubleshooting» в гайде для новичков-разработчиков Chromium состоит всего из одного предложения:

In open source no one can hear your scream

:3

stevejobs ★★★★☆
()
Ответ на: комментарий от PolarFox

Хм, спасибо за hint. Гляну.

Моя проблема: я отреверсил набор комманд (gp-gl) для плоттера. Могу уже рисовать, что хочу.

Осталось как-то привязать это к распространённым форматам (PS/PDF/AI/SVG). И вот тут-то меня и настигает полное уныние.

На что ни глянь — треш и угар.

beastie ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

Плоттер? А почему не HPGL?

Потому, что оно глотает только GPGL. Конвертацию HPGL->GPGL написать могу, но этот HPGL тоже от куда-то брать надо.

beastie ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

Мой найдёныш (нашёл на улице — если всё устаканится, будет screenshot), к сожалению его ещё не понимает. (Более старшые собраты могут, а он нет.)

beastie ★★★★★
() автор топика
Последнее исправление: beastie (всего исправлений: 2)
Ответ на: комментарий от stevejobs

На самом деле я уже заюзал pstoedit — он может уже многое, кроме ... того, что мне надо. ;)

Конвертю в PIC формат, а тот уже читаю. Но это костыль, хотельсь бы без.

В принципе, из распространённых форматов — только PS и SVG. Первый сразу отпадает — там уже не один PhD зубы съел. Думал второй лучше будет. Да не тут то было.

beastie ★★★★★
() автор топика
Последнее исправление: beastie (всего исправлений: 1)

Т.е. «100,200,300,400» — если они позитивные, и «100-200-300,400» — если некоторые из них негативные. Это конечно «очень упрощает» парзание этой ахинеи!

Ваш комментарий огорчает осиливших scala parser combinators.

Выдохнул

Даю подсказку:

import org.apache.batik.dom.svg.SAXSVGDocumentFactory
import org.apache.batik.util.XMLResourceDescriptor

val is: InputStream = new FileInputStream("./test.svg")
try {
  val parser = XMLResourceDescriptor.getXMLParserClassName
  val factory = new SAXSVGDocumentFactory(parser)
  val doc = factory.createSVGDocument("http://localhost/test.svg", is)
  // ... всё распарсилось уже, дерево элементов готово ...

} finally {
  is.close()
}

shahid ★★★★★
()

420 BLAZE IT FGT

Как оно вообще попало в upstream?

Мне бы тоже хотелось знать, почему твои любимые технологии маргинальны.

olibjerd ★★★★★
()
Последнее исправление: olibjerd (всего исправлений: 1)
Ответ на: комментарий от shahid

Скаклу не знаю, мну лабит на Го (привет true_admin ;)

Готового ничего не нашёл, поэтому приходится смотреть самому и приходить в ужас. :(

beastie ★★★★★
() автор топика
Последнее исправление: beastie (всего исправлений: 1)
Ответ на: комментарий от beastie

приходится смотреть самому и приходить в ужас

Исходники batik рапортуют, что batik различает чуть менее ~117 svg-тегов (элементов).
Вы таки действительно всё ещё хотите написать свой парсер для SVG?
Такой парсер по трудоемкости тянет на отдельный проЭкт.

ИМХО, быстрее осилить джаву за 15 минут и просто обойти все распарсенные batik'ом теги, генеря какие-то данные для плоттера...

Но если реально нечем больше заняться в жизни, то можно еще взять сорцы linux emc2, быстренько накодить EMC HAL драйвер и подцепить плоттер к AXIS, как станок с одним инструментом. Там же можно гуй через pyvcp xml быстренько запилить с лампочками и индикаторами! А SVG конвертить в CNC-код для ЧПУ-станка.

shahid ★★★★★
()
Последнее исправление: shahid (всего исправлений: 1)

Неосилятор плачется на ЛОРе :}

Deleted
()

Мсье наверное заржался. Я вроде не особо в говнах ковырялся, но описанное в ОП мне кажется ещё вполне нормальным.

vurdalak ★★★★★
()
Ответ на: комментарий от beastie

нашёл на улице

о_0 человек, живущий в rpg-игре. у вас там, небось, ещё и сундуки с золотом на каждом шагу )

next_time ★★★★★
()

100-200-300,400

vector<int> nums;
while(true)
{
  nums.push_back(strtoll(str, curr, 10));
  if(**curr == ',') 
  { str = (*curr) + 1; continue;
  }
  if(**curr == '-')
  { str = (*curr); continue;
  }
  break;
}

как-то так?

next_time ★★★★★
()

100-200-300,400

А пыхпыхер уже сделал бы

$coords = explode(',', str_replace(['-', ',,'], [',-', ','], $s));

и говнокодил бы дальше :)

static_lab ★★★★★
()
Ответ на: комментарий от static_lab

и говнокодил бы дальше :)

Поэтому пыхпых и не любят.

h578b1bde ★☆
()

Нет ли здесь антисемитизма и геефобии?

how not to design

heilkitty ★★
()
Последнее исправление: heilkitty (всего исправлений: 1)
Ответ на: комментарий от vurdalak

Бывают вещи и похуже.

Ну так-то всегда бывают вещи похуже) А так, ТС - молодец, предупредил, чтобы неокрепшие умы с svg не связывались. Впрочем, XML-based формат для, блин, картинок сам за себя говорит безо всяких лишних слов)

next_time ★★★★★
()
Ответ на: комментарий от next_time

А так, ТС - молодец, предупредил, чтобы неокрепшие умы с svg не связывались.

Почему? Формат как формат, ну может чуть сложнее чем другие. В упор не вижу проблемы, ТС просто нытик-неосилятор.

vurdalak ★★★★★
()
Ответ на: комментарий от beastie

Конвертай в hpgl штатными средствами. Для плоттеров именно он.

ncrmnt ★★★★★
()
Ответ на: комментарий от i-rinat

Нет. Дофига плоттеров жрут проприетарщину, тот же graphtec - свой gpgl. Но грфтек хороший тем, что по первому вопросу заданному скорее для лулзов ожидая посыл на три буквы, отправили pdf'ку с документацией по формату.

ncrmnt ★★★★★
()
Ответ на: комментарий от vurdalak

Я просто удивляюсь от излишней сложности.

Возьмём, первый попавшийся, пример:

M178.431,138.673c-12.059,1.028-21.916,15.366-15.646,26.709c8.303,15.024,26.836-1.329,38.379,0.203
		c13.285,0.272,24.17,14.047,34.84,2.49c11.867-12.854-5.109-25.373-18.377-30.97L178.431,138.673z

  • M178.431,138.673 — двигаемся, запоминаем координату
  • c-12.059,1.028-21.916,15.366-15.646,26.709 — рисуем bezier, основываясь на предыдущей координате, последняя точка — начало следующего куска, запоминаем
  • c8.303,15.024,26.836-1.329,38.379,0.203 — тоже самое, запоминаем
  • ... ещё 2 раза тоже самое
  • z — возвращается к самой первой координате. (Мы её запомнили? А, её отдельно хранить надо...)

В общем, да, бывает хуже. Но... зачем такое для машинного формата?

Ещё в basic'е учили вместо «n times i += 1.1» делать «i = n * 1.1»! (не накапливать ошибку)

beastie ★★★★★
() автор топика
Последнее исправление: beastie (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.