spamsink: (lenin)
[personal profile] spamsink
Есть набор ГОСТов, как бы регулирующих правила подготовки программной документации, ноги у которых растут из ЕСКД (единая система конструкторской документации), т.е. чем сильнее похоже на чертёж, тем лучше.
В былые времена (лет, скажем, 20 назад) с этим делом было строго, но чертить и писать чертежным шрифтом уже никому не хотелось, и документация готовилась с помощью форматирующих программ (одна из них, например, называлась СИПРОД - видимо, что-то типа "СИстема ПРОграммной Документации"), а входной язык выглядел примерно так:
*RED                                                                               
*0STA*RG*NN*1RL*0MCS1 67                                                           
*ST4 35 42 67                                                                      
 1)*MDCOГЛACOBAHO                                                                  
*MDПPEДCTABИTEЛЬ ЗAKAЗЧИKA N2272                                                   
*/*10C А.Б.ПЕТРОВ*/                                                           
 2)*MDУTBEPЖДAЮ                                                                    
*MDPУKOBOДИTEЛЬ ПPEДПPИЯTИЯ                                                        
*/*10C В.Г.ВАСЕЧКИН*/                                                                 
$                                                                                  
*0MCS5 63                                                                          
*3/                                           
...
*P*0RL*0MCS1 67                                                                    
*2/*D.-----------------------------------------------------------------.           
*/*DI                    ЛИCT PEГИCTPAЦИИ ИЗMEHEHИЙ                   I            
*/*DI-----------------------------------------------------------------I            
*/*DI   IHOMEPA ЛИCTOB (CTPAHИЦ)IBCEГO I        I          I      I   I            
*/*DI И I-----------------------IЛИCTOBI        I BXOДЯЩИЙ I      I   I            
*/*DI З I ИЗ- I ЗA- I     IAHHУ-I(CTP.)I HOMEP  I   HOMEP  I ПOД- I Д I            
*/*DI M I ME- I ME- I HO- IЛИPO-I  B   I ДOKУ-  ICOПPOBOДИ-I ПИCЬ I A I            
*/*DI . I HEH-I HEH-I BЫX IBAH- IДOKУ- I MEHTA  I TEЛЬHOГO I      I T I            
*/*DI   I HЫX I HЫX I     IHЫX  IMEHTE I        IДOKУMEHTA I      I A I            
*SL1 5 11 17 23 29 36 45 56 63 67                                                  
 1)*2/ 1)*2/ 1)*2/ 1)*2/ 1)*2/ 1)*2/                                               
 1)*2/ 1)*2/ 1)*2/ 1)*2/ 1)*2/ 1)*2/                                               
 1)*2/ 1)*2/ 1)*2/ 1)*2/ 1)*2/ 1)*2/                                               
 1)*2/ 1)*2/ 1)*2/ 1)*2/ 1)*2/                                                     
$                                                                                  
*E                                                                                 
*END

(Люди были серьёзные, до формата вида HTML или markdown не дотумкали.)

Нашлось несколько документов в подобном виде, в общей сложности под 9 тысяч строк, которые хотелось бы превратить в что-то красивое с минимумом затрат времени. По очевидным причинам гуглить слово "сипрод" или "siprod" не помогает (попробуйте, посмейтесь). Кто-нибудь пользовался подобной лабудой и помнит ли этот птичий язык?

Originally posted by [livejournal.com profile] spamsink at Единая система программной документации

Date: 2016-10-29 12:59 am (UTC)
From: [identity profile] kcmamu.livejournal.com
Предположительно:
*0MCS<n1 n2> -- установить начало и конец строк
*ST<n1 n2 ...> -- задать позиции табуляции
*SL<n1 n2 ...> -- задать позиции вертикальной разграфки
*/ -- CR+LF
*<n>/ -- CR + n раз LF
<пробел><n>) -- установить левую границу по n-й позиции табуляции
*D<текст> -- напечатать строку
*MD<текст> -- напечатать строку курсивом
*<n>C -- вывести n пробелов
$ -- сброс всех параметров
Edited Date: 2016-10-29 01:00 am (UTC)

Date: 2016-10-29 01:04 am (UTC)
From: [identity profile] spamsink.livejournal.com
*<n>/ -- CR + n раз LF

Это вряд ли. Каждое
1)*2/ 1)*2/ 1)*2/ 1)*2/ 1)*2/ 1)*2/
по идее печатает одну строку с буквами I в качестве вертикальных отрезков.

Date: 2016-10-29 01:53 am (UTC)
From: [identity profile] kcmamu.livejournal.com
В моей версии -- шесть пустых строк через два интервала, в которых вертикальные отрезки заданы форматом *SL.

При наличии текста вместо соответствующего

 1)*2/

было бы, видимо,

 1)*D<текст 1-й колонки>
 2)*D<текст 2-й колонки>
...
 n)*D<текст n-й колонки>
*2/

Date: 2016-10-29 02:02 am (UTC)
From: [identity profile] spamsink.livejournal.com
"n)", похоже, инкрементное, раз везде 1) ... 1) ...

В остальном Вы правы, n) *m/ - это n раз <td> и m раз <br>. А когда счетчик полей достигает максимума, заданного в формате таблицы, происходит <tr>.

Date: 2016-10-29 02:05 am (UTC)
From: [identity profile] kcmamu.livejournal.com
Но палок-то надо ставить не шесть, а одиннадцать.

Date: 2016-10-29 02:12 am (UTC)
From: [identity profile] spamsink.livejournal.com
Группировка по строкам, по-моему, red herring. В таблице 10 колонок, так что если если бы "1)*2/" было в общей сложности 20 штук, я бы удовлетворился своей гипотезой. Но их и не 20, и не 22, а 23.

Date: 2016-10-29 02:17 am (UTC)
From: [identity profile] kcmamu.livejournal.com
9 строк шапки + 23 эти штуки = 32, вполне на число строк на странице похоже.

UPD: $ -- скорее Form Feed.

Date: 2016-10-29 02:34 am (UTC)
From: [identity profile] spamsink.livejournal.com
Строк на странице фальцованной бумаги АЦПУ было порядка 60, так что еще +23 горизонтальных разделителя, и получается что надо.

Date: 2016-10-29 08:04 am (UTC)
From: [identity profile] spamsink.livejournal.com
Я про количество строк на странице по ЕСПД.

Date: 2016-10-29 08:20 am (UTC)
From: [identity profile] b0p0h0k.livejournal.com
"Строк на странице фальцованной бумаги АЦПУ было порядка 60".

Date: 2016-10-29 08:55 am (UTC)
From: [identity profile] spamsink.livejournal.com
Неужели ты думаешь, что я не помню, что их там было 72? Это следует из того простого факта, что высота страницы была ровно фут, а кегль - 12.

Date: 2016-10-29 10:05 pm (UTC)
From: [identity profile] b0p0h0k.livejournal.com
Да, мне показалось маловероятным чтобы ты такого не помнил, но, согласись, закавыченная фраза не оставляет слишком много места для интерпретации.

Date: 2016-10-29 02:30 am (UTC)
From: [identity profile] spamsink.livejournal.com
Или они там хотят аж 23 пустых строки в таблице? Тогда выходит, что каждое n), меньшее или равное предыдущему n) - это <<tr><td colspan=n-1>. Тоже вариант.

Date: 2016-10-29 02:46 am (UTC)
vak: (Default)
From: [personal profile] vak
Я когда-то решал подобную задачу форматирования документов в формате АСПИД.
Методом проб и ошибок получился достаточно небольшой скрипт на Питоне: https://app.assembla.com/spaces/vak-opensource/subversion/source/HEAD/trunk/languages/python/aspid.py

Date: 2016-10-29 08:05 am (UTC)
From: [identity profile] spamsink.livejournal.com
Показывает пустую страницу.

Date: 2016-10-29 07:00 pm (UTC)
vak: (Default)
From: [personal profile] vak
Что-то там у них сломалось. Вообще этот ассембловский хостинг не радует в последнее время. Перетащу я всё хозяйство на гитхаб, пожалуй.

Смотри здесь: https://github.com/sergev/vak-opensource/blob/master/languages/python/aspid.py
Edited Date: 2016-10-29 07:38 pm (UTC)

Date: 2016-10-30 12:24 am (UTC)
From: [identity profile] spamsink.livejournal.com
Сипрод посложнее будет.

Date: 2016-10-29 03:46 am (UTC)
From: [identity profile] fatoff.livejournal.com
Люди были серьёзные, до формата вида HTML или markdown не дотумкали.

Интересно, был ли HTML лучшей альтернативой с точки зрения использование вычислительных ресурсов тех времён.

Date: 2016-10-29 08:57 am (UTC)
From: [identity profile] spamsink.livejournal.com
Не был. Обработка формата со стеком тегов и автоматической коррекцией ошибок могла быть дороговата по сравнению с более простой альтернативой. А markdown мог быть.

Date: 2016-10-29 09:05 am (UTC)
From: [identity profile] janatem.livejournal.com
А где и в какое время это использовалось? Могло ли использоваться в ИПМ (http://www.keldysh.ru/)? Я бы мог в понедельник порыться в одном шкафу, где много всяких смешных названий типа ДИМОН, АСПИД...

Date: 2016-10-29 02:37 pm (UTC)
From: [identity profile] spamsink.livejournal.com
В конце 80-х - начале 90-х, а то и до середины как минимум.
В принципе могло - зависит от того, были ли договоры с "заказчиками номер такой-то", требующими документацию в данной форме.

Если есть, то где-то рядом с АСПИДом (Автоматизированная Система Подготовки Инженерной Документации, ЕМНИП) оно должно быть. В этом шкафу, наверное, только документация, или какие-нибудь чудом сохранившиеся распечатки исходников или ленточки, может, тоже лежат? Смею ли просить об одолжении обзорного фото титульных листов?

Date: 2016-10-29 04:52 pm (UTC)
From: [identity profile] janatem.livejournal.com
По-хорошему, надо этим систематически заниматься, и, возможно, уже кто-то катологизировал всё хозяйство. Если нет, то будет очень непросто собрать ленты и перегнать в электронную цифру (я даже не знаю, если потребная аппаратура для этого). А фото корешков или избранных титульных листов — не проблема.

Date: 2016-10-31 04:57 pm (UTC)
From: [identity profile] janatem.livejournal.com
Оказалось не так просто: там после переезда еще не разложили по шкафам, поэтому к некоторым стопкам просто не добраться. Кроме того, я ожидал, что у этих препринтов есть корешки, так что можно было бы быстро просмотреть полку, ничего не вытаскивая, но это воспоминание оказалось ложным (действительно, препринты ведь обычно бывают совсем тонкими книжечками).

Потом пришла мысль обратиться к интернетам, оказалось, что препринты ИПМ собраны и доступны (http://library.keldysh.ru/preprints/), правда полнота, особенно для ранних лет, вызывает сомнение (здесь (http://www.keldysh.ru/gorbunov/preprints.htm) про сам архив). Этот раздел, похоже, индексируется поисковиками, поэтому если бы оно был, то нашлось бы.

Date: 2016-10-31 05:44 pm (UTC)
From: [identity profile] spamsink.livejournal.com
Жаль; на сайте, действительно, маловато будет.
Page generated Apr. 26th, 2019 06:42 am
Powered by Dreamwidth Studios