/** * @Программа: flangdoc.fln * @Версия:0.1 (draft) * @Автор: А.В. Манцивода * @Дата начала разработки: 12-10-2003 * @Дата последнего изменения: 14-10-2003 * @Описание: Программа автоматически формирует информацию о встроенных * функциях Флэнга в стиле JavaDoc на основе xml-описания встроенных * функций, подготовленных в системе Мета-1 (файл flangdoc.xml). * @Использование: Запустить программу и вызвать функцию main(). * * @Точка входа: main() */ main() :- contents := newVector(0), createChaptersPages(^chapEnum), createContents(), writeHTML("abc.html", genABC(^wholeList), "w") ; /* FUNCTIONS CHAPTER PAGES */ createChaptersPages(DocEnum) :- exhausted(DocEnum), !, true ; createChaptersPages(DocEnum) :- Chapter = eValue(DocEnum), Title = getXText(Chapter, "/item/title"), ChapID = getXAttr(Chapter, "identifier"), FileName = ChapID+".html", pageName := FileName, Conts = _Title;, vAdd(^contents, [Conts,
]), FuncEnum = eXElem(Chapter, "/item/item"), HTML = htmlPattern(createPage(FuncEnum, Title)), writeHTML(ChapID+".html", HTML, "w"), createChaptersPages(eNext(DocEnum)) ; createContents() :- writeHTML("fldocConts.html", htmlPattern([createHeader("Встроенные функции Флэнга", "", ""), ^contents]), "w"); createPage(FuncEnum, Title) :- overviewTab := newVector(0), FunCollection = collectFunc(FuncEnum), [ createHeader(Title, "", "") ,

_overviewTable(^overviewTab);

Описание функций

_FunCollection;
] ; overviewTable(Conts) :- _Conts;
Обзор функций
; overviewItem(FunctionType, FuncCall, Descr) :- _FunctionType; _FuncCall;
          _sNorm(Descr); ; collectFunc(Enum) :- exhausted(Enum), !, []; collectFunc(Enum) :- El1 = eValue(Enum), ID = getXAttr(El1, "identifier"), ( El = isIDREF(ID) /* reference to another description, has the form "ID-IDREF" */ ## El = El1 ), [functionDescr(El) | collectFunc(eNext(Enum))]; /* FUNCTION DESCRIPTION */ functionDescr(FuncArticle):- ID = getXAttr(FuncArticle, "identifier"), Name = getXText(FuncArticle, "/item/title"), DetailFile = ID+".html", DetailsLink = "detail/"+DetailFile, writeHTML(DetailsLink, underConstruction(Name), "w"), ArgsEnum = eXElem(FuncArticle, "/item/metadata/lom/general/Arguments"), ArgList = functionArgList(ArgsEnum), write(Name+nl()), FT = getXText(FuncArticle, "/item/metadata/lom/general/ResultType"), FuncType = functionType(FT), FunCall = functionCall(Name, FuncType, ArgList), FunDescr = getXText(FuncArticle, "/item/metadata/lom/general/FunDescr"), Notes = getXText(FuncArticle, "/item/metadata/lom/general/Notes"), vAdd(^overviewTab, overviewItem(FuncType, funcOverviewCall(Name, ArgList, "#"+ID), FunDescr)), hPut(^wholeList, Name, ^pageName+"#"+ID), FunctionArgumentList = foreach X in ArgList [ [_, Var, Des] = X, functionArgument(Var, Des) ],
_"";

_Name;

_FunCall;
_FunDescr+" "+Notes;

Аргументы:
_FunctionArgumentList;
Подробнее...

; functionArgList(ArgEnum) :- ArgVector = foreach Arg in ArgEnum [ Name = getXText(Arg, "/Arguments/Argument"), Type = getXText(Arg, "/Arguments/Type"), Descr = getXText(Arg, "/Arguments/Desription"), [functionType(Type), Name, Descr] ], vToL(enum(ArgVector)); /* формат вызова функции в статье */ functionCall(FunName, FunType, ArgList) :- Pos = sIndexOf(FunName, "/"), Pos>>0, !, ShortName = subString(FunName, 0, Pos),
_[FunType," "];_ShortName;(_showArgs(ArgList);)
    
; /* infix */ functionCall(FunName, FunType, [[T1, N1, _], [T2, N2, _]]) :-
_[FunType," (", T1, ")", N1, " ", FunName, " (", T2, ")", N2];
    
; /* prefix */ functionCall(FunName, FunType, [[T1, N1, _]]) :-
_[FunType, " ", FunName, "(", T1, ")", N1];
    
; /* constant */ functionCall(FunName, FunType, []) :-
_[FunType, " ", FunName];
    
; /* формат вызова функции в обзорной таблице */ funcOverviewCall(FunName, ArgList, Ref) :- Pos = sIndexOf(FunName, "/"), Pos>>0, !, ShortName = subString(FunName, 0, Pos), _ShortName;(_showArgs(ArgList);) ; /* infix */ funcOverviewCall(FunName, [[T1, N1, _], [T2, N2, _]], Ref) :- _["(", T1, ")", N1, " ", _FunName;, " (", T2, ")", N2]; ; /* prefix */ funcOverviewCall(FunName, [[T1, N1, _]], Ref) :- _[_FunName;, "(", T1, ")", N1]; ; /* constant */ funcOverviewCall(FunName, [], Ref) :- _[_FunName;]; ; showArgs([]) :- !, ""; showArgs([[Type, Name, _]]) :- !, [Type, " ", Name]; showArgs([[Type, Name, _] | Rest]) :- [Type, " ", Name+", " | showArgs(Rest)]; functionType(Type) :- Pos = sIndexOf(Type, "/"), Pos>>0, !, Type1 = subString(Type, 0, Pos), Rest = subString(Type, Pos+1, sLength(Type)), TypeLink = hGet(^typesHash, Type1), [_Type1;, "/" | functionType(Rest)] ; functionType(Type) :- TypeLink = hGet(^typesHash, Type), [_Type;] ; /* Формат описания переменной для функции */ functionArgument(Variable, Descr) :-
_Variable; - _Descr;
; argumentInCall(ArgName, ArgType) :- 1; /* GENERATE ABC */ genABC(H) :- List = vToL(eKeys(H)), Sorted = qsort(List), Conts = genABChtml(Sorted, H), Флэнг. Встроенные функции

Функции по алфавиту

_Conts; ; genABChtml([], H) :- []; genABChtml([X|Y], H) :- [_X;,
| genABChtml(Y, H)]; /* PARAMETERS AND ACCESS FUNCTIONS*/ /* загружаем XML-документ с описанием Флэнга */ ?- document := readXML("flangdoc.xml", "w"); /* выделяем блок организаций "встроенные функции Флэнга" */ ?- builtins:=getXElem(^document,"//organization[@identifier='builtins']"); /* организуем перечисление по главам блока встроенных функций */ ?- chapEnum:= eXElem(^builtins, "/organization/item"); /* хэш для коллекционирования полного списка функций */ ?- wholeList := newHash([]); /* создаем таблицу типов данных с линками на информацию о типах */ typesHashCreate():- typesHash := newHash( [ "Hash"/"./types/hash.html", "Vector"/"./types/vector.html", "Integer"/"./types/Integer.html", "Float"/"./types/float.html", "Enumeration"/"./types/enum.html", "List"/"./types/list.html", "Object"/"./types/object.html", "Boolean"/"./types/boolean.html", "String"/"./types/string.html" ]) ; ?- typesHashCreate(); getFunctionsEnum(Chapter) :- eXElem(Chapter, "/item/item") ; /* vToL формирует элементы перечисления в виде списка */ vToL(Enum) :- exhausted(Enum), !, []; vToL(Enum) :- El = eValue(Enum), [El|vToL(eNext(Enum))]; htmlPattern(Conts) :- Флэнг. Встроенные функции _Conts; ; createHeader(Title, Back, Forward) :- [
,
,

Встроенные функции Флэнга
_Title;

,
,

,

] ; under1Construction(Fun) :- Подробная информация по функции '_Fun;'_" "; разрабатывается ; underConstruction(Fun) :- Flang Page Under Construction

Подробное описание функции '_Fun;'_" "; разрабатывается

flang@teaCode.com
; /* СОРТИРОВКА */ qsort(List) :- qsort(List, Res, []), !, Res; qsort([X|L], R, R0) :- partition(L, X, L1, L2), qsort(L2, R1, R0), qsort(L1, R, [X|R1]) ; qsort([], R, R); partition([X|L],Y, Res1, Res2) :- X <= Y, Res1 = [X|L1], partition(L,Y,L1,Res2) ## Res2 = [X|L2], partition(L,Y,Res1,L2) ; partition([],X,[],[]); /* description reference check */ isIDREF(Str) :- sMatch("/(\w+)-IDREF/", Str), getByREF(sGroup(1)); getByREF(Str) :- XPath = "//item[@identifier='"+Str+"']", getXElem(^builtins, XPath); /* getByREF(Str) :- XPath = "//item", getXElem(^builtins, "//item"); */ /************* ОТЛАДОЧНЫЕ ФУНКЦИИ ***********/ ?- f:=getFunctionsEnum(eValue(^chapEnum)); t(X) :- trace("level", X); w() :- writeHTML("ff.htm", functionDescr(eValue(^f)), "w"); w1() :- writeHTML("ff.htm", htmlPattern(createPage(^f)), "w"); w2() :- writeHTML("fff.htm", overviewTable(), "w"); w3() :- writeHTML("fff.htm", htmlPattern(createHeader("hehe", "haha", "hoho")), "w"); r() :- reload(fd); ?- defaultEnc("a");