/*
  генерирование информационной системы об УДК в виде web-ресурса
*/

main(X) :- 
        XML = readXML("tree"+X+".xml"),
        numnum := X,
        itemTable := newHash(),
        getItemTable(eXElem(XML, "//item")),
        getXElem(XML, "//UDC") = xElem("UDC", _, C, _),
        [IT | Rest] = C,
        toHTML(IT, _, _, _, _)
        ;

getItemTable(Enum) :- exhausted(Enum), !;
getItemTable(Enum) :-
        El = eValue(Enum),
        ID = getXText(El, "//identifier"),
        write(ID+nl()),
        hPut(^itemTable, ID, El),
        getItemTable(eNext(Enum))
        ;

toHTML(CurItem, ID, Descr, SubSize, SubRef) :-
        ID = getXText(CurItem, "//identifier"),
        Title = sNorm(getXText(CurItem, "//title")),
        Father = sNorm(getXText(CurItem, "//isPartOf")),
        Descr = sNorm(getXText(CurItem, "//description")),
        SubVec = newVector([]),
        SubRef = newVector([]),
        subItems(getXConts(CurItem), SubVec, SubRef),
        SubSize = vLength(SubVec),
(
        SubSize = 0, ! 
##
        HTML =

<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=windows-1251"></META>
<title>УДК _Title;</title>
</head>
<body BGCOLOR="WHITE">

<TABLE WIDTH="600">
<TR><TD ALIGN="RIGHT">
<h1 ALIGN="RIGHT">УДК _ID;</h1>
<h3 ALIGN="RIGHT" style="margin-top : 0px; margin-bottom : 0px">_Descr;</h3>
<FONT SIZE="-1"><a href=_correctID(Father)+".html";>вверх</a>&#160;&#160;<a href="../index.html">домой</a><br/></FONT>
<FONT SIZE="-1">

</FONT>
</TD>
</TR>
<TR>
<TD ALIGN="RIGHT">
<TABLE CELLSPACING="2" CELLPADDING="3" BORDER="0" WIDTH="500">
<TR BGCOLOR="#663399">
	<TD ALIGN="RIGHT"><FONT SIZE="-2" COLOR="White">код УДК</FONT></TD>
	<TD ALIGN="RIGHT"><FONT SIZE="-2" COLOR="White">описание</FONT></TD>
        <TD ALIGN="RIGHT"><FONT SIZE="-2" COLOR="White">примечания</FONT></TD>
</TR>
_SubVec;
<TR BGCOLOR="#663399">
	<TD COLSPAN="4"><FONT COLOR="#cc3300" SIZE="-2">&#160;</FONT></TD>
</TR>

</TABLE>
</TD>
</TR>
<TR><TD ALIGN="RIGHT">
<FONT SIZE="-1">Сгенерировано <a href="http://teacode.com/flang">Флэнг-системой</a> из метаописания УДК в формате <a href="../dc.html">Dublin Core</a> <br></br>
&#169; 2004 <a href="http://teacode.com">TeaCode.com</a> </FONT>


</TD></TR>
</TABLE>
</body>
</html>,

        writeHTML("D:\educ\igu\chair\workgroup\chekhova\new\"+ ^numnum+"\"+correctID(ID)+".html", HTML, "w"),
        write(ID+nl())
)
        ;


subItems([], SubVec, SubRef) :- !
        ;
subItems([xElem("item", A, C, NS)|Rest], SubVec, SubRef) :-
        xElem("item", A, C, NS) = Item,
        Status = getXAttr(Item, "status"),
        (
          Status = "valid", !, Color = "#eaeaea"
         ##
          Color = "#c0c0c0"
         ),
        toHTML(Item, ID, Descr, SubSize, SubSubRef), !,
        (
           SubSize = 0, !, HREF = ID
         ##
           HREF = <a href=_correctID(ID)+".html";>_ID;</a>
        ),
        LI = 
          <TR BGCOLOR= _Color;>
	    <TD><FONT SIZE="-1">_HREF;</FONT></TD>
	    <TD ALIGN="LEFT"><FONT SIZE="-1">_Descr;</FONT></TD>
            <TD ALIGN="LEFT"><FONT SIZE="-1">_SubSubRef;</FONT></TD>
          </TR>,
        vAdd(SubVec, LI),
        subItems(Rest, SubVec, SubRef)
        ;
subItems([xElem("references", A, C, NS)|Rest], SubVec, SubRef) :-
        Str = getXText(xElem("references", A, C, NS)),
        vAdd(SubRef, <p style="margin-top : 0px; margin-bottom : 0px">_createRefs(Str);</p>),
        subItems(Rest, SubVec, SubRef)
        ;
subItems([xElem("isReplacedBy", A, C, NS)|Rest], SubVec, SubRef) :-
        vAdd(SubRef, <p style="margin-top : 0px; margin-bottom : 0px">_C;</p>),
        subItems(Rest, SubVec, SubRef)
        ;
subItems([_ | Rest], SubVec, SubRef) :- 
        subItems(Rest, SubVec, SubRef)
        ;


getItems([xElem("item", _, _, _) | Rest]) :- xElem(_,_, _, _), !, [El | getItems(Rest)];
getItems([_ | Rest]) :- getItems(Rest);
getItems([]) :- [];

correctID(Str) :- V = sToU(Str), corr(V, vLength(V)-1), uToS(V);

corr(_, -1) :- true;
corr(V, I) :- C = vGet(V, I), (C = ':' ## C = '/'), !, vSet(V, I, '_'), corr(V, I-1);
corr(V, I) :- corr(V, I-1);


createRefs(Str) :-
    V = sToU(Str),
    ResVec = newVector([]),
    checkCode(V, 0, vLength(V), ResVec),
    ResVec
    ;
   
checkCode(Vect, null, LL, _) :- !, true
    ;
checkCode(Vect, N, LL, _) :- N>=LL, !, true
    ;
checkCode(Vect, N, LL, ResVec) :- 
   checkNum(vGet(Vect, N)), !,
   Code = newVector([]),
   NN = getCode(Vect, N, LL, Code),
   C = uToS(Code),
   Item = hGet(^itemTable, C),
   (
     Item = null, !, 
     vAdd(ResVec, C)
    ##
      (
       null = getXElem(Item, "/item/item"),!,
       CC = getXText(Item, "//isPartOf"),
       vAdd(ResVec, <a href=_CC+".html";>_C;</a>)
      ##
       vAdd(ResVec, <a href=_C+".html";>_C;</a>)
      )
     ),
   checkCode(Vect, NN, LL, ResVec)
   ;
checkCode(Vect, N, LL, ResVec) :- 
   Text = newVector([]),
   NN = getText(Vect, N, LL, Text),
   vAdd(ResVec, uToS(Text)),
   checkCode(Vect, NN, LL, ResVec)
   ;


checkNum(X) :- X>=49, X<=57;
checkText(X) :- (X<<49 ## X>>57);

checkNext(X) :- (X=45 ## X=46 ## X>=48, X<=57);

getCode(Vect, N, LL, Code) :- N>=LL, !, null;
getCode(Vect, N, LL, Code) :-
    Cha = vGet(Vect, N),
    checkNext(Cha), !,
    vAdd(Code, Cha),
    getCode(Vect, N+1, LL, Code)
    ;
getCode(Vect, N, LL, Code) :- N;

getText(Vect, N, LL, Text) :- N>=LL, !, null;
getText(Vect, N, LL, Text) :-
    Cha = vGet(Vect, N),
    checkText(Cha), !,
    vAdd(Text, Cha),
    getText(Vect, N+1, LL, Text)
    ;
getText(Vect, N, LL, Text) :- N;

t(X) :- trace("level", 2);





t(N) :- trace("level", N);
