|
|
||
В помощь наивным Сишным Хтмльщикам: "автомагические" опусы за 5 минут. |
' BEWARE! ACHTUNG! АЛАРМА! прога (далее SUBJ) не самая оптимальная и безопасная,
' но простая (делалась методами Copy-Paste & Mind Storm & Brute Force)
' в частности, исходя из принципов брутального программирования, похерены все
' проверки входных данных и действий пользователя -
' меня просто задрало в очередной раз ручками заполнять ХТМЛ-ную болванку
' и расставлять бесконечные <br>, <p>, etc
' ***************************** Раздел отмазок ***************************
' Полный "AS IS", НИКАКИЕ ПРЕТЕНЗИИ, В СЛУЧАЕ ИСПОЛЬЗОВАНИЯ SUBJ,
' (потеря данных, повреждения "железа" и нервные срывы при попытке
' самостоятельно пофиксить кривое рег. выражение) НЕ ПРИНИМАЮТСЯ!
' Со своей стороны автор не требует никаких лицензионных и иных отчислений,
' допускает "хранение в памяти ЭВМ-загрузку-исполнение-трассировку" SUBJ,
' и прочую шнягу, за которую честных хакеров и простых юзеров теперь
' преследуют, типа копирования, модификациий и расширений (последние можно
' только приветствовать). Пользовайтесь, почем зря... И не говорите потом,
' что LabRat вас не предупреждал: это кривая прога ;)
' *************************************************************************
' Известные (задуманные мной) фишки:
' - полуавтоматическая сборка опуса в публикабельный формат
' - автоматическое реферирование "больших опусов", если главы(части) в них
' соответствуют формату "##. <название главы>" (понятно, без кавычек,
' ## - двузначный номер главы. Те, кто может дописаться до трехзначных -
' см. раздел отмазок)
' Известные (мне) баги:
' - отсутствие проверок входных данных (на самом деле так и задумано,
' так что это не баг - это фишка... шутки прогр. юмора)
' Информация для добровольных камикадзе-испытателей:
' - инфу о багах можно оставлять в гостевой данного текста
' - багами считаются только сбои ДАННОЙ ВЕРСИИ скрипта, при соблюдении
' текущих правил заливки, т.е. отладка самостоятельных модификаций - проблемка
' самих... шибко самостоятельных: для меня это факультативный интерес, в части
' улучшений (улучшить можно любую прогу... только неплохо понимать, что делаешь)
' 1. Все абзацы и пустые строки должны содержать концевой символ табуляции
' 1.1 Началом абзаца считается лидирующий пробел в строке
' 2. Вызов скрипта: start makehtml2.vbs <outputname> <f_bignovel>
' 2.1 outputname - имя выходного файла (результат заливки: outputname.html)
' 2.2 f_bignovel - признак деления на главы (для рассказов обычно равен 0)
' Если больше нуля - создается список глав и вставляется,
' как "Содержание" опуса.
' 3. Входные данные:
' В текущем каталоге должны быть следующие файлы (подготавливаются ручками)
' head - файл шапки в ХТМЛе ("титул", сюда будет подставлено название
' и, возможно, инфа об авторе (на СИ не актуально, мной используется
' для ведения единого индекса опусов))
' body - файл с текстом опуса (без названия, готовится... автором опуса ;)
' rear - файл "подвала" в ХТМЛе (подставляется инфа о дате создания документа)
' spec - файл описания ("выходные данные" документа)
' head и rear можно взять готовые или создать самостоятельно,
' "распилив" выходной файл любого html-редактора между тегами
' <body></body>. "Исторически сложилось", что я использую табличную
' разметку. Так что, в качестве болванки удобно использовать
' какую-нибудь ХТМЛ-таблицу (конвертер "Самиздата" сам подставит
' всякие <head>, <title> и <body> - пользовательские он, по-моему,
' просто удаляет).
' Самостоятельным придется подумать, где разместить
' маски выходных данных opus_title, opus_index и opus_date - они
' соответствуют строкам файла spec и автоматически заменяются скриптом
' в выходном файле.
' 4. Файл spec должен содержать три строки
' Название опуса
' Автор (или индексная номенклатура в любой удобной вам нотации)
' Дата создания документа
' Читаем ввод, открываем файлы... скрестив пальцы на удачу ;)
outstr=WScript.Arguments(0) bignovel=WScript.Arguments(1) set fso=createobject("scripting.filesystemobject") set txtdate = fso.opentextfile("spec",1) i_title=txtdate.readline i_index=txtdate.readline i_date=txtdate.readline set txtFile2 = fso.opentextfile("body",1) set txtFilehead = fso.opentextfile("head",1) set txtfilerear = fso.opentextfile("rear",1) set txtFile1 = fso.createtextfile(outstr & ".html",1)
'Если большой опус, реферируем части и/или главы
if bignovel = 1 then Dim oReg1 Set oReg1 = New RegExp ' Create regular expression. oReg1.Global = True ' All matches oReg1.IgnoreCase = True ' Make case insensitive.
set txtfilecont = fso.createtextfile("contents",8) txtfilecont.writeline("<div align=""justify"">Содержание</div>" & cr) txtfilecont.writeline("<ul>" & cr) 'txtfilecont.writeline("<ol>" & cr) 'Для тех, кому лень ставить номера line_id=0
do while txtfile2.atendofstream <> true i_line=txtfile2.readline 'читаем строку "тела" oReg1.Pattern = "^ [1-90-9].* " 'Set pattern. (маска поиска) oReg1.Global = True ' All matches (поиск... по всему телу ;) if oreg1.test(i_line) then 'нашли заголовок главы line_id=Line_id+1 i_line = oReg1.Replace(i_line, "<li><a href=""#spec" & line_id & """>" & i_line & "</a></li>") txtfilecont.writeline(i_line & cr) 'пишем в contents строчку в ХТМЛе end if loop ' txtfilecont.writeline("</ol>") 'Для тех, кому лень ставить номера txtfilecont.writeline("</ul>") ' txtfilecont.close set txtFilecont = fso.opentextfile("contents",1) txtfile2.close set txtFile2 = fso.opentextfile("body",1) end if
do while txtfilehead.atendofstream <> true i_line=txtfilehead.readline MakeHtmlCode i_line,i_title,i_index,i_date,0 txtfile1.writeline(i_line) loop txtfilehead.close
if bignovel > 0 then do while txtfilecont.atendofstream <> true i_line = txtfilecont.readline txtfile1.writeline(i_line) loop txtfilecont.close end if
chaps_num=Line_id line_id =0 ' WScript.Echo Line_id & " " & chaps_num do while txtfile2.atendofstream <> true i_line=txtfile2.readline MakeHtmlCode i_line,i_title,i_index,i_date,1 if bignovel > 0 then if chaps_num >= Line_id then oReg1.Pattern = "^<DD>[1-90-9].* " ' Set pattern. oReg1.Global = True ' All matches if oreg1.test(i_line) then Line_id=Line_id+1 i_line = oReg1.Replace(i_line, i_line & "<A NAME=""spec" & Line_id &"""></A>") WScript.Echo Line_id end if end if end if txtfile1.writeline(i_line) loop txtfile2.close
do while txtfilerear.atendofstream <> true i_line=txtfilerear.readline MakeHtmlCode i_line,i_title,i_index,i_date,0 txtfile1.writeline(i_line) loop txtfilerear.close txtfile1.close Sub MakeHTMLCode(txt, op_title, op_index, op_date, flag)
Dim oReg Set oReg = New RegExp ' Create regular expression. oReg.Global = True ' All matches oReg.IgnoreCase = True ' Make case insensitive. if flag = 1 then ' Replace all < with <. oReg.Pattern = "<" ' Set pattern. txt = oReg.Replace(txt, "<") ' Replace all > with ">" oReg.Pattern = ">" ' Set pattern. txt = oReg.Replace(txt, ">") ' end if oReg.Pattern = "\? " oReg.Global = true txt = oReg.Replace(txt, "?<br>") oReg.Pattern = "! " ' Exl+Tab oReg.Global = True ' All matches txt = oReg.Replace(txt, "!<br>") oReg.Pattern = "\. " ' Dot+Tab (special symbol) oReg.Global = True ' All matches txt = oReg.Replace(txt, ".<br>") ' oReg.Pattern = "/" ' NOW OMITED, UNUSED (BEWARE) ' oReg.Global = True ' All matches ' txt = oReg.Replace(txt, "<br>") oReg.Pattern = "^ " ' EmptyLn+TAB Set pattern. oReg.Global = True ' All matches txt = oReg.Replace(txt, "<p>" & vblf) oReg.Pattern = "^ " ' Paragraph FEED Set pattern. oReg.Global = True ' All matches txt = oReg.Replace(txt, "<DD>") end if
if flag = 0 then oReg.Pattern = "opus_title" ' Set pattern. oReg.Global = True ' All matches txt = oReg.Replace(txt, op_title) oReg.Pattern = "opus_index" ' Set pattern. oReg.Global = True ' All matches txt = oReg.Replace(txt, op_index) oReg.Pattern = "opus_date" ' Set pattern. oReg.Global = True ' All matches txt = oReg.Replace(txt, op_date) End If if flag = 2 then
end if End Sub
|
Новые книги авторов СИ, вышедшие из печати:
О.Болдырева "Крадуш. Чужие души"
М.Николаев "Вторжение на Землю"