From 9d2526d6985abc1b5c87255a9bbe03eb1094b5ef Mon Sep 17 00:00:00 2001 From: Linux User Date: Thu, 26 May 2011 10:14:42 +0800 Subject: [PATCH] Initial commit. --- Architecture.tex | 28 + Implementation.tex | 7 + Makefile | 6 + Master.tex | 24 + Model.tex | 13 + Objectives.tex | 12 + Review.tex | 35 ++ Terminology.tex | 30 + Theme.tex | 3 + Titlepage.tex | 146 +++++ Topicality.tex | 1 + bibliography.bib | 168 ++++++ utf8gost780u.bst | 1428 ++++++++++++++++++++++++++++++++++++++++++++ 13 files changed, 1901 insertions(+) create mode 100644 Architecture.tex create mode 100644 Implementation.tex create mode 100644 Makefile create mode 100644 Master.tex create mode 100644 Model.tex create mode 100644 Objectives.tex create mode 100644 Review.tex create mode 100644 Terminology.tex create mode 100644 Theme.tex create mode 100644 Titlepage.tex create mode 100644 Topicality.tex create mode 100644 bibliography.bib create mode 100644 utf8gost780u.bst diff --git a/Architecture.tex b/Architecture.tex new file mode 100644 index 0000000..cec15c3 --- /dev/null +++ b/Architecture.tex @@ -0,0 +1,28 @@ +\chapter{Структура и архитектура информационной системы} + +Модуль вызова системы включает в себя пользовательский интерфейс. Он отвечает за ввод и представление данных. + +Главный класс Source (модуль source.rb) отвечает за основную логику. + +Класс Translator (translator.rb) содержит функцию перевода слов. Логика программы не зависит от языка исходного текста, так как ударения указываются вручную, но словари готовы только для английского языка. + +Класс Morphology сожержит функцию, которая вызывает библиотеку phpmorphy, чтобы получить все словоформы заданного слова. Библиотека phpmorphy распространяется по лицензии LGPL и использует словари Ispell, а также пытается угадать склонение слов. + +Система рассчитана на работу с латинским алфавитом и использует кодировку UTF-8. + +Система получает на входе текстовый документ и выдаёт переведённый текстовый документ. + +\subsection{Формат словарей} + +Словари имеют расширение .txt + +Переводы слов идут сразу после слов. Перед переводами ставится ровно два пробела. + +Количество переводов не ограничено, но выбирается только один. Это поведение может измениться в будущем. + +\begin{verbatim} +cлово + перевод1 + перевод2 + ... +\end{verbatim} \ No newline at end of file diff --git a/Implementation.tex b/Implementation.tex new file mode 100644 index 0000000..1a49d92 --- /dev/null +++ b/Implementation.tex @@ -0,0 +1,7 @@ +\chapter{Реализация} + +​Оболочкой для программы является фреймворк Kohana 3.1. + +Отличительной особенностью Kohana 3.1 является его исключительная модульность. Он реализует модель HMVC. + +На части страниц также используется фреймворк jQuery. Это мощная Javascript библиотека, позволяющая проводить запросы AJAX, реализовывать визуальные эффекты и работать с DOM без оглядки на совместимость браузеров и разницу в вызовах событий. \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..7256f34 --- /dev/null +++ b/Makefile @@ -0,0 +1,6 @@ +all: + xelatex -interaction=nonstopmode Master.tex + bibtex Master.aux + xelatex -interaction=nonstopmode Master.tex + xelatex -interaction=nonstopmode Master.tex + rm -f *.aux *.log *.toc *.bbl *.blg *.out *.idx *.ind *.ilg *~ diff --git a/Master.tex b/Master.tex new file mode 100644 index 0000000..84e5172 --- /dev/null +++ b/Master.tex @@ -0,0 +1,24 @@ +\documentclass[a4paper,14pt]{extreport} +\input{Titlepage} + +\input{Theme} +\input{Objectives} +\input{Terminology} +\input{Review} +\input{Topicality} +\input{Model} +\input{Architecture} +\input{Implementation} + +\chapter{Заключение и перспективы развития} + +Ввиду ограничения по времени полномасштабного тестирования ИС не проводилось. Следовательно, априори предполагается существование серьёзных ошибок, которые будет необходимо исправить. + +Сейчас интерфейс реализован на HTML 5. Это значит, что такие браузеры, как Internet Explorer 8, Firefox 3, Opera 10 не смогут его отобразить нужным образом. Необходимо улучшение интерфейса, повышение совместимости с Internet Explorer 6. + +Также будет полезно совмещение отчётов и управления семинарами в одной Rich Internet Application. + +\bibliographystyle{utf8gost780u} +%\nocite{*} %раскомментировать чтобы получить ВСЮ библиографию +\bibliography{bibliography} +\end{document} diff --git a/Model.tex b/Model.tex new file mode 100644 index 0000000..dbf301a --- /dev/null +++ b/Model.tex @@ -0,0 +1,13 @@ +\chapter{Модель продукта} + +% \begin{figure}[ht] +% \centering +% \includegraphics[angle=90,height=0.7\textheight]{diagram0.jpeg} +% \caption{} +% \end{figure} +% +% \begin{figure}[ht] +% \centering +% \includegraphics[angle=90,width=\textwidth]{diagram1.jpeg} +% \caption{} +% \end{figure} diff --git a/Objectives.tex b/Objectives.tex new file mode 100644 index 0000000..4df6b43 --- /dev/null +++ b/Objectives.tex @@ -0,0 +1,12 @@ +\chapter{Постановка задачи} +Разработать ИС, предоставляющую инструментарий для управления семинарами, проводимыми в КРИПКиПРО. + +Для достижения цели необходимо: + +\begin{enumerate} +\item Собрать пользовательские требования к ИС +\item Провести обзор и анализ существующих ИС, решающих смежные задачи +\item Построить функциональные и ER модели +\item Разработать ИС +\item Протестировать ИС +\end{enumerate} \ No newline at end of file diff --git a/Review.tex b/Review.tex new file mode 100644 index 0000000..b6bd46b --- /dev/null +++ b/Review.tex @@ -0,0 +1,35 @@ +\chapter{Обзор сходных информационных систем} + +​Изучение предметной области дало следующие требования к внедряемой информационной системе: + +Информационная система должна быть написана на языке PHP и использовать базу данных MySQL в качестве хранилища данных. + +ИС должна быть бесплатной. + +ИС должна поддерживать управление событиями. + +В ИС должна быть предусмотрена эскалация привилегий, распространяемая на события. + +ИС должна поддерживать Unicode, чтобы не возникло проблем с кириллицей и совместимостью кодировок. + +ИС должна использовать WYSIWYG редактор. + +По данным критериям было отобрано три программных продукта: + + +Tiki Wiki CMS Groupware +Midgard CMS +Sitellite CMS +(таблица) + +Наличие русскоязычного интерфейса (Tiki - неполный перевод, Midgard - выдаётся по запросу, Sitellite - нет) + + +Возможность представления календаря мероприятий в электронном виде + +Возможность представления календаря мероприятий в печатном виде + +Относительная скорость генерации страниц — базовая конфигурация по сравнению со статической страницей + +\subsection{Выводы} +Ни одна из рассмотренных ИС не удовлетворила предъявленные требования. Было принято решение о разработке собственной системы. diff --git a/Terminology.tex b/Terminology.tex new file mode 100644 index 0000000..5ef3e81 --- /dev/null +++ b/Terminology.tex @@ -0,0 +1,30 @@ +\chapter{Терминология} +\section{AJAX} + +Asynchronous JavaScript and XML, \textit{англ.} Асинхронный JavaScript и XML -- группа не связанных между собой техник, используемых на стороне клиента для создания интерактивных интернет-программ, \cite{ajax}. Термин был введён в 2005м году в статье Джессе Джеймса Гарретта, \cite{ajax-origin}. + +Идея AJAX в том, чтобы расширить роль браузера от ультратонкого клиента, который содержит минимум логики и почти не выполняет вычислений, исключительно представляя информацию пользователю, до толстого клиента, который может самостоятельно работать с данными, полученными от сервера. + +В традиционной модели «тонкий клиент-сервер» клиент должен выполнить запрос (GET или POST) каждый раз для изменения данных. В течение выполнения запроса работа с веб-страницей невозможна, так как после выполнения запроса загружается новая страница. + +Модель AJAX предлагает асинхронное выполнение запросов, не прерывающее работу с данными во время их изменения. Каждый запрос HTTP заменяется запросом к Javascript; всё, что не требует соединения с сервером — проверка данных, редактирование данных, возможно навигация — проводится на стороне клиента. + +Слово «AJAX» было введено как короткий аналог фразы «Асинхронный JavaScript, CSS, DOM и XMLHttpRequest». + +Важнейшей технологией из группы AJAX является вызов Javascript XML\-HttpRequest. Он был реализован в различных браузерах в 2000-2005м годах; в версиях Internet Explorer 5, 5.5 и 6 его роль выполнял модуль ActiveX библиотеки MSXML. В настоящее время ведётся работа над черновиком XMLHttpRequest уровня 2. + +По соображениям безопасности запросы к другим доменам с данного запрещены; это ограничение обходится разными путями, самым простым из которых является HTTP заголовок \verb/Access-Control-Allow-Origin/. + +\section{DOM} +Document Object Model, \textit{англ.} объектная модель документа. + +В языке Javascript это -- объект, содержащий всю информацию о странице (документе). Через манипуляции с DOM сценарии могут управлять страницей и блоками на ней. + +\section{HMVC} +Hierarchical Model-View-Controller, \textit{англ.} иерархические Модель-Вид-Контроллер. + +Каждая тройка модель-вид-контроллер называется триадой. Каждая триада независима и отвечает за один объект, описываемый Моделью. + +Модель и только Модель имеет знания о природе объекта, например, где хранятся данные и как их необходимо проверять. Контроллер отвечает за логику работы с объектом. Он вычисляет значения переменных, инициирует изменение данных, передаёт данные в Вид. Вид отвечает за представление и только за представление данных; в Виде не производится никаких вычислений. + +Каждая триада совершенно независима и может выполняться при отсутствии любой другой. Все запросы к триадам идут через их контроллеры. Любая часть системы может выполнить запрос к любой триаде. Так, вид триады главной страницы может вызвать запросы к триаде рекламного блока, к триаде текстового блока и триаде навигационного блока. При этом модификация, например, навигационного блока сможет проходить независимо от других — а изменения отразятся во всех видах, вызывающих эту триаду. \ No newline at end of file diff --git a/Theme.tex b/Theme.tex new file mode 100644 index 0000000..6636585 --- /dev/null +++ b/Theme.tex @@ -0,0 +1,3 @@ +\chapter{Тема дипломной работы} + +Разработка информационной системы (ИС), предоставляющей инструментарий для управления семинарами, проводимыми в КРИПКиПРО. \ No newline at end of file diff --git a/Titlepage.tex b/Titlepage.tex new file mode 100644 index 0000000..967af2e --- /dev/null +++ b/Titlepage.tex @@ -0,0 +1,146 @@ +\usepackage[T2A]{fontenc} +\usepackage{fontspec} +\usepackage{xunicode} +\usepackage{mathtext} +\usepackage{amsmath} %текст в формулах +\usepackage{xltxtra} +\usepackage{polyglossia}%вместо babel +\setdefaultlanguage{russian} +\defaultfontfeatures{Mapping=tex-text, Scale=MatchLowercase} +\setmainfont{FreeSerif} +\newfontfamily{\cyrillicfont}{FreeSerif} +\setromanfont{FreeSerif} +\setsansfont{FreeSans} +\setmonofont{FreeMono} +\frenchspacing +\usepackage[labelsep=period]{caption} +\usepackage{indentfirst} +\usepackage{rotating} +\usepackage{graphicx} +%\usepackage{listings} +%\lstloadlanguages{Ruby} +%\lstset{extendedchars=false,%надо ставить false всегда при работе с UTF-8 +% commentstyle=\it, +% stringstyle=\bf, +% belowcaptionskip=5pt, +% numbers=left, %нумерация строк +% numberstyle=\tiny, +% stepnumber=3, +% numbersep=5pt, +% breaklines=true, %автоперенос длинных линий +% breakatwhitespace=true}%перенос ТОЛЬКО по пробелам и табуляциям +%\renewcommand{\lstlistingname}{Листинг} + +\usepackage{multirow} + +\usepackage{fncychap} +\ChNameVar{\large} +\ChTitleVar{\Large \rm \bfseries} +%\ChTitleUpperCase %- почему-то не работает +\ChNameUpperCase + +\makeatletter +\let\ps@plain\ps@myheadings%необходимо для содержания; иначе оно всё равно будет использовать стиль plain +\renewcommand{\DOTI}[1]{\CTV\FmTi{#1}\par\nobreak\medskip} +\makeatother + +\setcounter{secnumdepth}{-1} % не хочу нумеровать главы +\setcounter{tocdepth}{2} % глубина оглавления + +\usepackage{geometry} % Меняем поля страницы +\geometry{left=3cm}% левое поле +\geometry{right=2cm}% правое поле +\geometry{top=2cm}% верхнее поле +\geometry{bottom=2cm}% нижнее поле + +\marginparwidth=0cm +%\geometry{right=4cm} + +% Меняем везде перечисления на цифра.цифра +\renewcommand{\theenumi}{\arabic{enumi}.} +\renewcommand{\labelenumi}{\arabic{enumi}.} +\renewcommand{\theenumii}{\arabic{enumii}.} +\renewcommand{\labelenumii}{\arabic{enumi}.\arabic{enumii}.} +\renewcommand{\theenumiii}{\arabic{enumiii}.} +\renewcommand{\labelenumiii}{\arabic{enumi}.\arabic{enumii}.\arabic{enumiii}.} + +\renewcommand{\baselinestretch}{1.5}%если поставить меньше, то дроби на строках будут сливаться друг с другом +\righthyphenmin=2 % Минимальное число символов при переносе - 2. + +\pagestyle{myheadings} + +\begin{document} +\renewcommand{\contentsname}{Содержание}%Строго говоря, Оглавление - это когда текст разбит на главы. Когда текст разбит на секции - это Содержание. + +%\begin{titlepage} +{ +\thispagestyle{empty} +\newpage +\centering + +\textbf{ +МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ\\ +ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ\\ +КЕМЕРОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ\\* +Математический факультет\\ +Кафедра ЮНЕСКО по Новым информационным технологиям} + +\vfill + +{\large ДИПЛОМНАЯ РАБОТА} + +\vfill + +<<Автоматизированная система регистрации на семинары в КРИПКиПРО>> + +студента пятого курса, М-065 группы + +Яковлева Александра Яковлевича + +Специальность 010503 - <<Математическое обеспечение и администрирование информационных систем>> + +\vfill + +\begin{flushleft} +Научный руководитель: \\ +К.п.н., доцент \\ +Л. Е. Шмакова\\ +\makebox[5cm]{\hrulefill} +\end{flushleft} + +\vfill + +\begin{table}[ht] +\begin{minipage}[t]{0.5\linewidth}\centering + Работа допущена к защите:\\ + << \makebox[1cm]{\hrulefill} >> \makebox[3cm]{\hrulefill} \number\year г.\\ +Зав. кафедрой ЮНЕСКО по НИТ,\\ +д.-р физ.-мат.наук, профессор\\ +К. Е. Афанасьев\\ +\makebox[5cm]{\hrulefill} +\vspace{\fill} +\end{minipage} +\hspace{0.5cm} +\begin{minipage}[t]{0.5\linewidth}\centering + Работа защищена:\\ +<< \makebox[1cm]{\hrulefill} >> \makebox[3cm]{\hrulefill} \number\year г.\\ +c оценкой \makebox[3.6cm]{\hrulefill} \\ +Председатель ГАК\\ +\makebox[5cm]{\hrulefill}\\ +Члены ГАК:\\ +\makebox[5cm]{\hrulefill}\\ +\makebox[5cm]{\hrulefill}\\ +\makebox[5cm]{\hrulefill} +\end{minipage} +\end{table} + +\vspace{\fill} + +Кемерово \number\year +\clearpage +} +%\end{titlepage} + +\setlength{\parskip}{0ex plus 0.5ex minus 0.2ex} +\tableofcontents +\clearpage diff --git a/Topicality.tex b/Topicality.tex new file mode 100644 index 0000000..6725902 --- /dev/null +++ b/Topicality.tex @@ -0,0 +1 @@ +\chapter{Актуальность работы} diff --git a/bibliography.bib b/bibliography.bib new file mode 100644 index 0000000..e644a3b --- /dev/null +++ b/bibliography.bib @@ -0,0 +1,168 @@ +@BOOK{ajax, +author = "Маклафлин, Б.", +address = "СПб.", +title = "Изучаем Ajax", +publisher = "Питер", +year = 2007, +numpages = 448, +isbn = "978-5-91180-322-3", +language = "russian" +} +@BOOK{rosental, +author = "Розенталь, Д. Э. and Джанджакова, Е. В. and Кабанова, Н. П.", +title = "Справочник по правописанию, произношению, литературному редактированию", +address = "М.", +publisher = "ЧеРо", +year = 1999, +language = "russian" +} +@MISC{ajax-origin, +title = "[Электронный ресурс]", +url = "\underline{http://www.adaptivepath.com/ideas/e000385}" +} +@BOOK{holshevnikov, +author = "Холшевников, В. Е.", +title = "Мысль, вооруженная рифмами", +address = "Л.", +publisher = "ЛГУ", +year = 1987, +language = "russian" +} +@BOOK{gasparov, +author = "Гаспаров, М. Л.", +title = "Современный русский стих: Метрика и ритмика", +address = "М.", +publisher = "ЛГУ", +year = 1974, +language = "russian" +} +@MISC{google-translate-help, +title = "[Электронный ресурс] Переводчик Google -- Часто задаваемые вопросы", +url = "\underline{http://www.google.ru/intl/ru/help/faq\_translation.html}" +} +@MISC{longfellow-wikipedia, +title = "[Электронный ресурс]", +url = "\underline{http://en.wikipedia.org/wiki/Henry\_Wadsworth\_Longfellow}" +} +@MISC{babelfish-wikipedia, +title = "[Электронный ресурс]", +url = "\underline{http://en.wikipedia.org/wiki/Yahoo!\_Babel\_Fish}" +} +@MISC{knight, +author = "Knight K.", +title = "A Statistical MT Tutorial Workbook", +url = "\underline{http://www.clsp.jhu.edu/ws99/projects/mt/mt-workbook.htm}", +year = 1999 +} +@BOOK{onufriev, +author = "Онуфриев, В. В.", +title = "Словарь разновидностей рифмы", +address = "М.", +year = 2002, +language = "russian" +} +@Article{computerra, +author = "Ножов, И.", +title = "Синтаксический анализ", +journal = "Компьютерра", +year = 2002, +number = 21, +language = "russian" +} +@INBOOK{langlais, + author = "Langlais P. and Simard M. and Véronis J.", + title = "Methods and Practical Issues in Evaluating Alignment Techniques", + booktitle = "Proceedings of COLING-ACL 98", + address = "Montreal, Canada", + year = 1998, + language = "english" +} +@INBOOK{gale, + author = "Gale W. and Church K.", + title = "A Program for Aligning Sentences in Bilingual Corpora", + booktitle = "Proceedings of the 29th Annual Meeting of the ACL", + address = "Berkeley, California", + year = 1991, + language = "english" +} +@INBOOK{melamed, + author = "Melamed I. D.", + title = "Automatic Construction of Clean Broad-Coverage Translation Lexicons", + booktitle = "Proceedings of 2nd Conference of the Association for Machine Translation in the America", + address = "Montreal, Canada", + year = 1996, + language = "english" +} +@INBOOK{han, + author = "Han B.", + title = "Building a Bilingual Dictionary with Scarce Resources: A Genetic Algorithm Approach", + booktitle = "Student Research Workshop, the Second Meeting of the North American Chapter of the Association for Computational Linguistics", + address = "Pittsburgh, USA", + year = 2001, + language = "english" +} +@INBOOK{slabin, +author = "Чистяков, А. and Скрябнёв, А.", +title = "Компьютерный перевод как инструмент межкультурной коммуникации", +booktitle = "Сб. научных статей", +editor = "к.п.н. У. К. Слабин", +address = "Витебск", +year = 2005, +pages = "202-206", +language = "russian" +} + +@INBOOK{basylev1, +author = "Базылев, В. Н.", +title = "Поиск смысла в практике переводчика", +booktitle = "Смысл и выражение: контроверзы современного гуманитарного знания", +address = "Самара", +publisher = "21 век", +year = 2001, +pages = "233-235", +language = "russian" +} +@INBOOK{basylev2, +author = "Базылев, В. Н.", +title = "Аналитический перевод (из опыта новейших русских переводов австрийской лирической поэзии)", +booktitle = "Композиционная семантика", +address = "Тамбов", +publisher = "Тамбовский ГУ", +year = 2002, +pages = "163-165", +language = "russian" +} +@PHDTHESIS{chudinova, +author = "Чудинова, Е. А.", +title = " Широко развитая многозначность в лексике современного русского языка: лингвостатистическое исследование по данным лексикографии", +type = "Автореф. дис\ldots\ канд. филол. наук", +address = "Пермь", +year = 1998, +language = "russian" +} +@PHDTHESIS{rahimberdiev, +author = "Рахимбердиев, Б. Н.", +title = "Эволюция семантики экономической терминологии русского языка в XX веке", +type = "Дисс. на соиск. уч. степ. канд. филол. наук.", +address = "М.", +year = 2003, +numpages = 188, +language = "russian" +} +@BOOK{beckman, +author = "Beckman, M. E.", +title = "Stress and Non-Stress Accent", +address = "Dordrecht", +publisher = "Foris", +year = 1986, +isbn = "90-6765-243-1", +language = "english" +} +@BOOK{literature-rosman, +editor = "проф. Горкина А.П.", +title = "Литература и язык. Современная иллюстрированная энциклопедия", +address = "М.", +publisher = "Росмэн", +year = 2006, +language = "russian" +} diff --git a/utf8gost780u.bst b/utf8gost780u.bst new file mode 100644 index 0000000..35ba3f5 --- /dev/null +++ b/utf8gost780u.bst @@ -0,0 +1,1428 @@ +%% +%% This is file `utf8gost780u.bst', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% utf8gost.dtx (with options: `utf8gost780u') +%% +%% Copyright 1996-2005 Maksym Polyakov. +%% Version 2005.08.12 +%% +%% This file may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.2 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.2 or later is part of all distributions of LaTeX +%% version 1999/12/01 or later. +%% +%% Please, send bug reports via e-mail: +%% polyama at auburn dot edu +%% +%% 2005.08.12 Bug fix (long annote) +%% +%% 2003.06.06 contributions by Konstantin Vorontsov: +%% New ENTRY "annote" added for output annotations. +%% New commands BibUrl, BibAnnote added for customize urls and annotations. +%% +%% 2003.08.10 +%% New command BibEmph added for customize emphasizing. +%% +%% 2003.10.07 +%% Some bug fixes in names and date formatting. +%% +%% 2003.10.07 +%% Bug fix in INPROCEEDINGS. +%% +%% +%% This bibliography style attempts +%% to format bibliography according to +%% GOST 7.1-84 and GOST 7.80-00 +%% +%% For the Ukrainian|Russian bibliographic entries +%% you need to create field +%% language = {ukrainian|russian}. +%% Default language is English. +%% Field numpages for books must contain number of pages. +%% Optional field url will format url (using hyperref, if loaded). +%% +%% See examples in gost71.pdf and gost780.pdf +%% +%% Requires 8-bit bibtex with switch -B and csf file supporting cyrillic. +%% bibtex8 -B -c .csf +%% + +ENTRY + { address + annote + author + booktitle + bookauthor + chapter + edition + editor + compiler + howpublished + institution + journal + key + month + note + number + organization + pages + numpages + publisher + school + series + title + type + volume + year + language + booklanguage + url + } + {} + { label } + +INTEGERS { output.state before.all mid.sentence after.sentence after.block +after.dblslash after.slash after.column after.semicolumn} + +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := + #4 'after.dblslash := + #5 'after.slash := + #6 'after.column := + #7 'after.semicolumn := +} + +STRINGS { s t } + +STRINGS { curlanguage } + +FUNCTION {change.language} +{ booklanguage empty$ + {""} + {booklanguage 'curlanguage := + "\selectlanguageifdefined{" + curlanguage * + "}" * + } + if$ +} + +FUNCTION {output.nonnull} +%%%{ 's := +{ swap$ + output.state mid.sentence = + { ", " * write$ } + { output.state after.block = + { add.period$ write$ + " " "--- " * write$ + newline$ + "\newblock " write$ + } + { output.state before.all = + 'write$ + { output.state after.dblslash = + { "~//" * change.language * " " * write$ } + { output.state after.slash = + { "~/ " * write$ } + { output.state after.column = + { ": " * write$ } + { output.state after.semicolumn = + { "; " * write$ } + { add.period$ " " * write$ } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ +%%% s +} + +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} + +FUNCTION {output.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} + +FUNCTION {fin.entry} +{ add.period$ + write$ + newline$ +} + +FUNCTION {new.block} +{ output.state before.all = + 'skip$ + { after.block 'output.state := } + if$ +} + +FUNCTION {new.dblslash} +{ output.state before.all = + 'skip$ + { after.dblslash 'output.state := } + if$ +} + +FUNCTION {new.slash} +{ output.state before.all = + 'skip$ + { after.slash 'output.state := } + if$ +} + +FUNCTION {new.column} +{ output.state before.all = + 'skip$ + { after.column 'output.state := } + if$ +} + +FUNCTION {new.semicolumn} +{ output.state before.all = + 'skip$ + { after.semicolumn 'output.state := } + if$ +} + +FUNCTION {new.sentence} +{ output.state after.block = + 'skip$ + { output.state before.all = + 'skip$ + { after.sentence 'output.state := } + if$ + } + if$ +} + +FUNCTION {add.blank} +{ " " * before.all 'output.state := +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} + +FUNCTION {non.stop} +{ duplicate$ + "}" * add.period$ + #-1 #1 substring$ "." = +} + +FUNCTION {new.block.checka} +{ empty$ + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.sentence.checka} +{ empty$ + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {new.sentence.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { "\BibEmph{" swap$ * "}" * } + if$ +} + +FUNCTION {space.word} +{ " " swap$ * " " * } + +FUNCTION {bbl.edby} % { "\bbledby{}" } +{ curlanguage "english" = + {"Ed. by "} + { curlanguage "ukrainian" = + {"{Під ред. }"} + { curlanguage "russian" = + {"{Под ред. }"} + {"language is not defined: " language "edited by" * * warning$ "edited by"} + if$} + if$} + if$ +} + +FUNCTION {bbl.cmplr} +{ curlanguage "english" = + {"Compiler "} + { curlanguage "ukrainian" = + {"{Укл. }"} + { curlanguage "russian" = + {"{Сост. }"} + {"language is not defined: " language "compiler" * * warning$ "compiler"} + if$} + if$} + if$ +} + +FUNCTION {bbl.edition} % { "\bbledition{}" } +{ curlanguage "english" = + {"edition"} + { curlanguage "ukrainian" = + {"{вид.}"} + { curlanguage "russian" = + {"{изд.}"} + {"language is not defined: " language "edition" * * warning$ "edition"} + if$} + if$} + if$ +} + +FUNCTION {bbl.vvolume} % { "\bblVolume{}" } +{ curlanguage "english" = + {"Volume"} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"Том"} + {"language is not defined: " language "Volume" * * warning$ "Volume"} + if$} + if$ +} + +FUNCTION {bbl.vvol} % { "\bblVol{}" } +{ curlanguage "english" = + {"Vol."} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"Т."} + {"language is not defined: " language "Vol." * * warning$ "Vol."} + if$} + if$ +} + +FUNCTION {bbl.iissue} % { "\bblIssue{}" } +{ curlanguage "english" = + {"Issue"} + { curlanguage "ukrainian" = + {"Випуск"} + { curlanguage "russian" = + {"Выпуск"} + {"language is not defined: " language * warning$ "Issue"} + if$} + if$} + if$ +} + +FUNCTION {bbl.iiss} % { "\bblIss{}" } +{ curlanguage "english" = + {"Iss."} + { curlanguage "ukrainian" = + {"Вип."} + { curlanguage "russian" = + {"Вып."} + {"language is not defined: " language * warning$ "Issue"} + if$} + if$} + if$ +} + +FUNCTION {bbl.of} % { "\bblof{}" } +{ curlanguage "english" = + {"of"} + { curlanguage "ukrainian" = + {"{із}"} + { curlanguage "russian" = + {"{из}"} + {"language is not defined: " language "of" * * warning$ "of"} + if$} + if$} + if$ +} + +FUNCTION {bbl.etal} % { "\bblof{}" } +{ curlanguage "english" = + {"et~al."} + { curlanguage "ukrainian" = + {"{та~ін.}"} + { curlanguage "russian" = + {"{и~др.}"} + {"language is not defined: " language "at al" * * warning$ "at al."} + if$} + if$} + if$ +} + +FUNCTION {bbl.nnumber} % { "\bblNumber{}" } +{ curlanguage "english" = + {"Number"} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"Номер"} + {"language is not defined: " language "Number" * * warning$ "Number"} + if$} + if$ +} + +FUNCTION {bbl.number} % { "\bblnumber{}" } +{ curlanguage "english" = + {"number"} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"{номер}"} + {"language is not defined: " language "number" * * warning$ "number"} + if$} + if$ +} + +FUNCTION {bbl.nr} % { "\bblno{}" } +{ curlanguage "english" = + {"no."} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"{№}"} + {"language is not defined: " language "no." * * warning$ "no."} + if$} + if$ +} + +FUNCTION {bbl.nnr} % { "\bblno{}" } +{ curlanguage "english" = + {"No."} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"{№}"} + {"language is not defined: " language "No." * * warning$ "No."} + if$} + if$ +} + +FUNCTION {bbl.in} % { "\bblin{}" } +{ curlanguage "english" = + {"in"} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"{в}"} + {"language is not defined: " language "in" * * warning$ "in"} + if$} + if$ +} + +FUNCTION {bbl.iin} % { "\bblIn{}" } +{ curlanguage "english" = + {"In"} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"В"} + {"language is not defined: " language "In" * * warning$ "In"} + if$} + if$ +} + +FUNCTION {bbl.pages} % { "\bblpp." } +{ curlanguage "english" = + {"pp."} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"{с.}"} + {"language is not defined: " language "pp." * * warning$ "pp."} + if$} + if$ +} + +FUNCTION {bbl.page} % { "\bblp." +{ curlanguage "english" = + {"p."} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"{с.}"} + {"language is not defined: " language "p." * * warning$ "p."} + if$} + if$ +} + +FUNCTION {bbl.ppages}% { "\bblPp." } +{ curlanguage "english" = + {"Pp."} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"{С.}"} + {"language is not defined: " language "Pp." * * warning$ "Pp."} + if$} + if$ +} + +FUNCTION {bbl.ppage} % { "\bblP." } +{ curlanguage "english" = + {"P."} + { curlanguage "ukrainian" = curlanguage "russian" = or + {"{С.}"} + {"language is not defined: " language "P." * * warning$ "P."} + if$} + if$ +} + + +FUNCTION {bbl.techrep} { "Tech. Rep." } +FUNCTION {bbl.mthesis} { "Master's thesis" } +FUNCTION {bbl.phdthesis} { "Ph.D. thesis" } + +INTEGERS { nameptr namesleft numnames } + + +FUNCTION {format.names} +{ + #1 "{vv~}{ll}{~jj}{,~ff}" format.name$ +} + + +FUNCTION {format.names.rev} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{ff}{~vv}{~ll}{, jj}" + format.name$ 't := + nameptr #1 > + { + nameptr #4 = + numnames #4 > and + { "others" 't := + #1 'namesleft := } + 'skip$ + if$ + namesleft #1 > + { ", " * t * } + { + t "others" = + t "~others" = + or + { " " * bbl.etal * } + { ", " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {format.authors} +{ author empty$ + { "" } + { author format.names emphasize} + if$ +} + +FUNCTION {format.bookauthors} +{ bookauthor empty$ + { "" } + { bookauthor format.names} + if$ +} + +FUNCTION {format.authors.after} +{ author empty$ + { "" } + { author format.names.rev} + if$ +} + +FUNCTION {format.bookauthors.after} +{ bookauthor empty$ + { "" } + { bookauthor format.names.rev} + if$ +} + +FUNCTION {format.editors.after} +{ editor empty$ + { "" } + { bbl.edby editor format.names.rev * + } + if$ +} + +FUNCTION {format.compiler.after} +{ compiler empty$ + { "" } + { bbl.cmplr compiler format.names.rev * + } + if$ +} + +FUNCTION {format.title} +{ title empty$ + { "" } + { title + } + if$ +} + +FUNCTION {format.date} +{ year empty$ + { month empty$ + { "" } + { "there's a month but no year in " cite$ * warning$ + month + } + if$ + } + { month empty$ + 'year + { year ". " "--- " month * * * } + if$ + } + if$ +} + +FUNCTION {output.address.publisher.date} +{ + address empty$ + 'skip$ + { address output + publisher empty$ + 'skip$ + { new.column + } + if$ + } + if$ + publisher output + format.date output +} + +FUNCTION {output.bibitem} +{ newline$ + "\bibitem{" write$ + cite$ write$ + "}" write$ + newline$ + language empty$ + {"english" 'curlanguage :=} + {language 'curlanguage :=} + if$ + "\selectlanguageifdefined{" write$ + curlanguage write$ + "}" write$ newline$ + "" + before.all 'output.state := +} + +FUNCTION {n.dashify} +{ 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +FUNCTION {word.in} +{ bbl.iin + " " * } + +FUNCTION {format.btitle} +{ title +} + +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ * * +} + +FUNCTION {tie.connect} + {"~" + swap$ * * + } + +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + +FUNCTION {format.bvolume} +{ volume empty$ + { "" } + { bbl.vvol volume tie.connect + series empty$ + 'skip$ + { bbl.of space.word * series emphasize * } + if$ + "volume and number" number either.or.check + } + if$ +} + +FUNCTION {format.number.series} +{ volume empty$ + { number empty$ + { series field.or.null } + { series empty$ + { "there's a number but no series in " cite$ * warning$ + bbl.nnr } + { + %new.dblslash + new.sentence + series + bbl.nr + tie.or.space.connect} + if$ + number tie.or.space.connect + } + if$ + } + { "" } + if$ +} + +FUNCTION {is.num} +{ chr.to.int$ + duplicate$ "0" chr.to.int$ < not + swap$ "9" chr.to.int$ > not and +} + +FUNCTION {extract.num} +{ duplicate$ 't := + "" 's := + { t empty$ not } + { t #1 #1 substring$ + t #2 global.max$ substring$ 't := + duplicate$ is.num + { s swap$ * 's := } + { pop$ "" 't := } + if$ + } + while$ + s empty$ + 'skip$ + { pop$ s } + if$ +} + + +FUNCTION {convert.edition} +{ edition +} + +FUNCTION {format.edition} +{ edition empty$ + { "" } + { output.state mid.sentence = + { convert.edition " " * bbl.edition * } + { convert.edition " " * bbl.edition * } + if$ + } + if$ +} + +INTEGERS { multiresult } + +FUNCTION {multi.page.check} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} + +FUNCTION {format.pages} +{ pages empty$ + { "" } + { pages multi.page.check + { bbl.ppages pages n.dashify tie.connect } + { bbl.ppage pages tie.connect } + if$ + } + if$ +} + +FUNCTION {format.pages.page} +{ pages empty$ + { numpages empty$ + { "" } + { numpages bbl.pages tie.connect } + if$} + { format.pages} + if$ +} + +FUNCTION {format.vol.num.pages} +{ volume field.or.null + number empty$ + 'skip$ + { + ", no." number tie.or.space.connect * + volume empty$ + { "there's a number but no volume in " cite$ * warning$ } + 'skip$ + if$ + } + if$ + pages empty$ + 'skip$ + { duplicate$ empty$ + { pop$ format.pages } + { ": " * pages n.dashify * } + if$ + } + if$ +} + +FUNCTION {format.volume} +{ volume empty$ + { "" } + { bbl.vvol volume tie.or.space.connect } + if$ +} + +FUNCTION {format.number} +{ number empty$ + { "" } + { bbl.nr number tie.or.space.connect } + if$ +} + + +FUNCTION {empty.misc.check} +{ author empty$ title empty$ howpublished empty$ + month empty$ year empty$ note empty$ + and and and and and + key empty$ not and + { "all relevant fields are empty in " cite$ * warning$ } + 'skip$ + if$ +} + +FUNCTION {format.thesis.type} +{ type empty$ + 'skip$ + { pop$ + type + } + if$ +} + +FUNCTION {format.tr.number} +{ type empty$ + { bbl.techrep } + 'type + if$ + number empty$ + { "" } + { number tie.or.space.connect } + if$ +} + +FUNCTION {author.before} +{ + author empty$ + 'skip$ + {author num.names$ #4 < + {format.authors output + new.sentence} + 'skip$ + if$} + if$ +} + +FUNCTION {bookauthor.before} +{ + bookauthor empty$ + 'skip$ + {bookauthor num.names$ #4 < + {format.bookauthors output + new.sentence} + 'skip$ + if$} + if$ +} + + +FUNCTION {author.after} +{ + author empty$ + 'skip$ + {format.authors.after output + new.semicolumn } + if$ +} +FUNCTION {bookauthor.after} +{ + bookauthor empty$ + 'skip$ + {format.bookauthors.after output + new.semicolumn } + if$ +} + +FUNCTION {editor.organization.after} +{ + compiler empty$ + {} + { format.compiler.after output + new.semicolumn + } + if$ + editor empty$ + {} + { format.editors.after output + new.semicolumn + } + if$ + organization empty$ + {} + {organization output + new.semicolumn + } + if$ +} + +FUNCTION {format.url} +{ url empty$ + { "" } + { after.sentence 'output.state := + "\BibUrl{ " url * "}" * + } + if$ +} + +FUNCTION {format.annote} +{ annote empty$ + { "" } +{ after.sentence 'output.state := + "\BibAnnote{" annote add.period$ * "}" * +} + if$ +} + +FUNCTION {article} +{ output.bibitem + author.before + format.btitle "title" output.check + new.slash + author.after + new.dblslash + journal emphasize "journal" output.check + new.block + format.date output + new.block + format.volume output + format.number output + new.block + format.pages.page output + new.block + note output + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {book} +{ output.bibitem + author.before + format.btitle "title" output.check + new.slash + author.after + editor.organization.after + new.sentence + format.number.series output + new.block + format.edition output + new.block + output.address.publisher.date + new.block + format.bvolume output + new.block + format.pages.page output + new.block + note output + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {booklet} +{ output.bibitem + author.before + format.title "title" output.check + new.slash + author.after + editor.organization.after + new.block + howpublished output + address output + format.date output + new.block + note output + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {inbook} +{ output.bibitem + author.before + format.btitle "title" output.check + new.slash + author.after + new.dblslash + bookauthor.before + booktitle "booktitle" output.check + new.slash + bookauthor.after + editor.organization.after + new.block + format.edition output + new.block + format.number.series output + new.sentence + output.address.publisher.date + new.block + format.bvolume output + new.block + format.pages.page output + new.block + note output + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {incollection} +{ output.bibitem + author.before + new.sentence + format.btitle "title" output.check + new.slash + author.after + new.dblslash + booktitle "booktitle" output.check + new.slash + editor.organization.after + new.block + output.address.publisher.date + new.block + format.bvolume output + format.number.series output + new.block + format.pages.page output + new.block + note output + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {inproceedings} +{ output.bibitem + author.before + new.sentence + format.title "title" output.check + new.slash + author.after + new.dblslash + booktitle "booktitle" output.check + new.slash + editor.organization.after + new.block + format.bvolume output + format.number.series output + new.block + address empty$ + { publisher output + format.date "year" output.check + } + { address output.nonnull + new.column + publisher output + format.date "year" output.check + } + if$ + new.block + format.pages.page output + new.block + note output + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {manual} +{ output.bibitem + author empty$ + { organization empty$ + 'skip$ + { organization output.nonnull + address output + } + if$ + } + { format.authors output.nonnull } + if$ + new.block + format.btitle "title" output.check + author empty$ + { organization empty$ + { + address new.block.checka + address output + } + 'skip$ + if$ + } + { + organization address new.block.checkb + organization output + address output + } + if$ + format.edition output + format.date output + new.block + note output + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {mastersthesis} +{ output.bibitem + format.authors "author" output.check + new.block + format.btitle "title" output.check + new.block + bbl.mthesis format.thesis.type output.nonnull + school "school" output.check + address output + format.date "year" output.check + new.block + note output + new.block + format.url output + format.annote output + fin.entry +} + +FUNCTION {misc} +{ output.bibitem + format.authors output + title howpublished new.sentence.checkb + format.btitle output + howpublished new.block.checka + howpublished output + new.block + format.date output + new.block + note output + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {phdthesis} +{ output.bibitem + format.authors "author" output.check + new.sentence + format.btitle "title" output.check + new.column + bbl.phdthesis format.thesis.type output.nonnull + new.slash + school "school" output.check + new.block + output.address.publisher.date + new.block + format.pages.page output + note output + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {proceedings} +{ output.bibitem + format.btitle "title" output.check + new.slash + editor.organization.after + new.block + format.bvolume output + format.number.series output + address empty$ + { publisher output + format.date "year" output.check + } + { address output.nonnull + format.date "year" output.check + new.sentence + publisher output + } + if$ + new.block + note output + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {techreport} +{ output.bibitem + author.before + new.sentence + format.title "title" output.check + new.column + format.tr.number output.nonnull + new.slash + author.after + editor.organization.after + new.block + address output + new.column + institution "institution" output.check + format.date "year" output.check + new.block + note output + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {unpublished} +{ output.bibitem + author.before + format.btitle "title" output.check + new.slash + author.after + editor.organization.after + new.block + note "note" output.check + new.sentence + format.url output + format.annote output + fin.entry +} + +FUNCTION {default.type} { misc } + +MACRO {jan} {"\bbljan{}"} + +MACRO {feb} {"\bblfeb{}"} + +MACRO {mar} {"\bblmar{}"} + +MACRO {apr} {"\bblapr{}"} + +MACRO {may} {"\bblmay{}"} + +MACRO {jun} {"\bbljun{}"} + +MACRO {jul} {"\bbljul{}"} + +MACRO {aug} {"\bblaug{}"} + +MACRO {sep} {"\bblsep{}"} + +MACRO {oct} {"\bbloct{}"} + +MACRO {nov} {"\bblnov{}"} + +MACRO {dec} {"\bbldec{}"} + +MACRO {acmcs} {"ACM Computing Surveys"} + +MACRO {acta} {"Acta Informatica"} + +MACRO {cacm} {"Communications of the ACM"} + +MACRO {ibmjrd} {"IBM Journal of Research and Development"} + +MACRO {ibmsj} {"IBM Systems Journal"} + +MACRO {ieeese} {"IEEE Transactions on Software Engineering"} + +MACRO {ieeetc} {"IEEE Transactions on Computers"} + +MACRO {ieeetcad} + {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} + +MACRO {ipl} {"Information Processing Letters"} + +MACRO {jacm} {"Journal of the ACM"} + +MACRO {jcss} {"Journal of Computer and System Sciences"} + +MACRO {scp} {"Science of Computer Programming"} + +MACRO {sicomp} {"SIAM Journal on Computing"} + +MACRO {tocs} {"ACM Transactions on Computer Systems"} + +MACRO {tods} {"ACM Transactions on Database Systems"} + +MACRO {tog} {"ACM Transactions on Graphics"} + +MACRO {toms} {"ACM Transactions on Mathematical Software"} + +MACRO {toois} {"ACM Transactions on Office Information Systems"} + +MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} + +MACRO {tcs} {"Theoretical Computer Science"} + +READ + + +STRINGS { longest.label } + +INTEGERS { number.label longest.label.width } + +FUNCTION {initialize.longest.label} +{ "" 'longest.label := + #1 'number.label := + #0 'longest.label.width := +} + +FUNCTION {longest.label.pass} +{ number.label int.to.str$ 'label := + number.label #1 + 'number.label := + label width$ longest.label.width > + { label 'longest.label := + label width$ 'longest.label.width := + } + 'skip$ + if$ +} + +EXECUTE {initialize.longest.label} + +ITERATE {longest.label.pass} + +FUNCTION {begin.bib} +{ "\begin{thebibliography}{" longest.label * "}" * write$ newline$ + "\def\selectlanguageifdefined#1{" write$ newline$ + "\expandafter\ifx\csname date#1\endcsname\relax" write$ newline$ + "\else\language\csname l@#1\endcsname\fi}" write$ newline$ + "\ifx\undefined\url\def\url#1{{\small #1}}\else\fi" write$ newline$ + "\ifx\undefined\BibUrl\def\BibUrl#1{\url{#1}}\else\fi" write$ newline$ + "\ifx\undefined\BibAnnote\long\def\BibAnnote#1{}\else\fi" write$ newline$ + "\ifx\undefined\BibEmph\def\BibEmph#1{\emph{#1}}\else\fi" write$ newline$ + preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ +} + +EXECUTE {begin.bib} + +EXECUTE {init.state.consts} + +ITERATE {call.type$} + +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} + +EXECUTE {end.bib} + +%% +%% End of file `utf8gost780u.bst'.