Chesee

Программа оформления исходников.

На данный момент, функции программы ограничиваются тем, что исходный текст (.cpp) преобразуется в .HTML или .tex файл. По замыслу данная программа, должна преобразовывать исходные тексты на Си, выдавая их в любом требуемом виде формате.

Пока что работа на программой приостановленна. Сделаны только основные системы. Но если у меня будет свободное время или необходимость оформления больших исходников, я обязательно её доделаю. Программу легко расширять.

Использование

Пока что вся работа осуществляется через перенаправление ввода вывода. Обязательно нужно указать формат выходного файла. Пример:
cheese.exe -out=tex -fmt=full < 1.cpp > 1.tex

Примеры

Исходный текст:
// hello !! ;)
void TEX::PrintChar(char sym)
{
	switch(sym) {
	case '_':  fprintf(out_file,"\\underline{ }"); break;
	case '{':  fprintf(out_file,"\\{"); break;
	case '}':  fprintf(out_file,"\\}"); break;
	case '\\': fprintf(out_file,"\\(\\backslash\\)"); break;
	default: fputc(sym,out_file); break;
	}
}

Результат:
// hello !! ;)
void TEX::PrintChar(char sym)
{
    switch(sym) {
    case '_':  fprintf(out_file,"\\underline{ }"); break;
    case '{':  fprintf(out_file,"\\{"); break;
    case '}':  fprintf(out_file,"\\}"); break;
    case '\\': fprintf(out_file,"\\(\\backslash\\)"); break;
    default: fputc(sym,out_file); break;
    }
}

Режим полного форматирования:
// hello !! ;)
void TEX::PrintChar(char sym)
{
    switch(sym)
    {
    case '_':
        fprintf(out_file,"\\underline{ }");
        break;
    case '{':
        fprintf(out_file,"\\{");
        break;
    case '}':
        fprintf(out_file,"\\}");
        break;
    case '\\':
        fprintf(out_file,"\\(\\backslash\\)");
        break;
    default:
        fputc(sym,out_file);
        break;
    }
}

Механизмы

К сожалению, описание абсолютно не подробное, потому как мне некогда.

Первоначальный текст, обрабатывается классом под названием Syntax_engine. Его назначение состоит в том чтобы выделить из текста отдельные токены и расстояния между ними. Различия между табуляцией и пробелами не делается, всё преобразуется в расстояние между словами.
Примеры токенов: <>, >=, :, ::, +, ++, =, break, l1, "fff" (строковые константы и коментарии являются цельными токенами).

Вторая стадия обработки: Format_engine. Данный класс осущетвляет форматирование текста. Т.е. изменение его исходного вида.

Последняя стадия: Output_interface. Интерфейс вывода. Преобразует подготовленный текст в файл с заданым форматом (TeX, Html и т.д.).

По сути Format_engine является вложенным классом Syntax_engine, а out_interface глобальной ссылкой на объект.

out_interface

Глобальная ссылка на объект осущевляющий конечное преобразование. Данный объект должен быть унаследован от объекта Output_interface
class Output_interface{
protected:
	bool isKeyWord(char*);
	virtual void PrintChar(char);
public:
	virtual void Start();
	virtual void Stop();
	virtual void Ident(int);
	virtual void Write(char*);
	virtual void ScanOptions(char**,int);
};

Format_engine

Download

chesee.zip

Hosted by uCoz