Annotation of Amaya/amaya/HTMLbook.c, revision 1.46

1.1       cvs         1: /*
                      2:  *
                      3:  *  (c) COPYRIGHT MIT and INRIA, 1996.
                      4:  *  Please first read the full copyright statement in file COPYRIGHT.
                      5:  *
                      6:  */
                      7: 
                      8: /*
                      9:  * Initialization functions and button functions of Amaya application.
                     10:  *
                     11:  * Authors: V. Quint, I. Vatton
1.26      cvs        12:  *          R. Guetari (W3C/INRIA) - Windows routines.
1.1       cvs        13:  */
                     14: 
                     15: 
                     16: /* Included headerfiles */
                     17: #define THOT_EXPORT
                     18: #include "amaya.h"
1.44      cvs        19: #include "AHTURLTools_f.h"
1.1       cvs        20: #include "print.h"
                     21: 
                     22: #define NumFormPrint       1
                     23: #define NumMenuOptions     2
                     24: #define NumMenuPaperFormat 3
                     25: #define NumMenuSupport     4
                     26: #define NumZonePrinterName 5
                     27: #define PRINT_MAX_REF     6
                     28: 
1.25      cvs        29: /* structure to register sub-documents in MakeBook function*/
                     30: typedef struct _SubDoc
                     31:   {
                     32:      struct _SubDoc  *SDnext;
                     33:      Element          SDel;
1.36      cvs        34:      STRING           SDname;
1.25      cvs        35:   }SubDoc;
                     36: 
1.29      cvs        37: /* the structure used for the GetIncludedDocuments_callback function */
                     38: typedef struct _GetIncludedDocuments_context {
                     39:   Element              link, next;
                     40:   Attribute            RelAttr, HrefAttr;
1.36      cvs        41:   STRING               url, ptr, text;
1.29      cvs        42:   Document             document;
                     43: } GetIncludedDocuments_context;
                     44: 
1.25      cvs        45: static struct _SubDoc  *SubDocs;
1.2       cvs        46: static int              PaperPrint;
                     47: static int              ManualFeed;
                     48: static int              PageSize;
1.43      cvs        49: static CHAR_T             PSdir[MAX_PATH];
                     50: static CHAR_T             pPrinter[MAX_PATH];
1.1       cvs        51: static Document                docPrint;
                     52: static boolean         numberLinks;
                     53: static boolean         withToC;
1.34      cvs        54: static boolean          printURL;
1.1       cvs        55: static int              basePrint;
                     56: 
                     57: #include "init_f.h"
                     58: #include "HTMLactions_f.h"
                     59: #include "HTMLbook_f.h"
                     60: #include "HTMLedit_f.h"
1.25      cvs        61: #include "HTMLhistory_f.h"
1.1       cvs        62: 
1.31      cvs        63: #ifdef _WINDOWS 
1.37      cvs        64: #include "wininclude.h"
1.31      cvs        65: #endif /* _WINDOWS */
                     66: 
1.29      cvs        67: /*-----------------------------------------------------------------------
                     68:   Function prototypes
                     69:   ----------------------------------------------------------------------*/
                     70: #ifdef __STDC__
                     71: static void         GetIncludedDocuments (Element el, Document document);
                     72: void                MakeBook_callback (Document document);
                     73: #else
                     74: static void         GetIncludedDocuments (/* el, document */);
                     75: void                MakeBook_callback (/* Document document */);
                     76: #endif
1.1       cvs        77: 
                     78: /*----------------------------------------------------------------------
1.16      cvs        79:   RegisterSubDoc adds a new entry in SubDoc table.
                     80:   ----------------------------------------------------------------------*/
                     81: #ifdef __STDC__
1.36      cvs        82: static void         RegisterSubDoc (Element el, STRING url)
1.16      cvs        83: #else
                     84: static void         RegisterSubDoc (el, url)
                     85: Element             el;
1.36      cvs        86: STRING              url;
1.16      cvs        87: #endif
                     88: {
                     89:   struct _SubDoc  *entry, *last;
                     90: 
                     91:   if (url == NULL || url[0] == EOS)
                     92:     return;
                     93: 
                     94:   entry = TtaGetMemory (sizeof (struct _SubDoc));
                     95:   entry->SDnext = NULL;
                     96:   entry->SDel = el;
                     97:   entry->SDname = TtaStrdup (url);
                     98: 
                     99:   if (SubDocs == NULL)
                    100:     SubDocs = entry;
                    101:   else
                    102:     {
                    103:       last = SubDocs;
                    104:       while (last->SDnext != NULL)
                    105:        last = last->SDnext;
                    106:       last->SDnext = entry;
                    107:     }
                    108: }
                    109: 
                    110: 
                    111: /*----------------------------------------------------------------------
                    112:   SearchSubDoc searches whether a document name is registered or not
                    113:   within the SubDoc table.
                    114:   Return the DIV element that correspond to the sub-document or NULL.
                    115:   ----------------------------------------------------------------------*/
                    116: #ifdef __STDC__
1.36      cvs       117: static Element      SearchSubDoc (STRING url)
1.16      cvs       118: #else
                    119: static Element      SearchSubDoc (url)
1.36      cvs       120: STRING              url;
1.16      cvs       121: #endif
                    122: {
                    123:   Element          el;
                    124:   struct _SubDoc  *entry;
                    125:   boolean          docFound;
                    126: 
                    127:   if (url == NULL || url[0] == EOS)
                    128:     return (NULL);
                    129: 
                    130:   entry = SubDocs;
                    131:   docFound = FALSE;
                    132:   el = NULL;
                    133:   while (!docFound && entry != NULL)
                    134:     {
1.36      cvs       135:       docFound = (ustrcmp (url, entry->SDname) == 0);
1.16      cvs       136:       if (!docFound)
                    137:        entry = entry->SDnext;
                    138:       else
                    139:        /* document found -> return the DIV element */
                    140:        el = entry->SDel;
                    141:     }
                    142:   return (el);
                    143: }
                    144: 
                    145: /*----------------------------------------------------------------------
                    146:   FreeSubDocTable frees all entries in SubDoc table.
                    147:   ----------------------------------------------------------------------*/
                    148: static void         FreeSubDocTable ()
                    149: {
                    150:   struct _SubDoc  *entry, *last;
                    151: 
                    152:   entry = SubDocs;
                    153:   while (entry != NULL)
                    154:     {
                    155:       last = entry;
                    156:       entry = entry->SDnext;
                    157:       TtaFreeMemory (last->SDname);
                    158:       TtaFreeMemory (last);
                    159:     }
                    160:   SubDocs = NULL;
                    161: }
                    162: 
                    163: 
                    164: 
                    165: /*----------------------------------------------------------------------
1.1       cvs       166:   SetInternalLinks
1.8       cvs       167:   Associate an InternalLink attribute with all anchor (A) elements of the
                    168:   document which designate an element in the same document.
1.1       cvs       169:   InternalLink is a Thot reference attribute that links a source and a
                    170:   target anchor and that allows P schemas to display and print cross-references
                    171:   ----------------------------------------------------------------------*/
                    172: #ifdef __STDC__
1.4       cvs       173: void             SetInternalLinks (Document document)
1.1       cvs       174: #else
1.4       cvs       175: void             SetInternalLinks (document)
1.1       cvs       176: Document                document;
                    177: #endif
                    178: {
1.32      cvs       179:   Element              el, div, link, target, sibling;
                    180:   ElementType          elType, linkType;
1.16      cvs       181:   Attribute            HrefAttr, IntLinkAttr;
1.17      cvs       182:   Attribute             attr, ExtLinkAttr;
1.16      cvs       183:   AttributeType                attrType;
1.36      cvs       184:   STRING               text, ptr, url; 
1.43      cvs       185:   CHAR_T                  number[10];
                    186:   CHAR_T                  value[MAX_LENGTH];
1.25      cvs       187:   int                  length, i, volume;
                    188:   int                   status, position;
1.16      cvs       189:   boolean               split;
1.1       cvs       190: 
1.16      cvs       191:   /* Remember the current status of the document */
                    192:   status = TtaIsDocumentModified (document);
1.32      cvs       193:   el = TtaGetMainRoot (document);
                    194:   volume = TtaGetElementVolume (el);
                    195:   elType = TtaGetElementType (el);
                    196:   elType.ElTypeNum = HTML_EL_AnyLink;
1.16      cvs       197:   attrType.AttrSSchema = elType.ElSSchema;
1.32      cvs       198:   /* looks for all links in the document */
1.16      cvs       199:   link = el;
                    200:   while (link != NULL)
                    201:     {
1.25      cvs       202:       /* display the progression of the work */
                    203:       el = link;
                    204:       position = 0;
                    205:       while (el != NULL)
                    206:        {
                    207:          sibling = el;
                    208:          do
                    209:            {
                    210:              /* add volume of each previous element */
                    211:              TtaPreviousSibling (&sibling);
                    212:              if (sibling != NULL)
                    213:                position += TtaGetElementVolume (sibling);
                    214:            }
                    215:          while (sibling != NULL);
                    216:          el = TtaGetParent (el);
                    217:        }
                    218:       sprintf (number, "%d", position*100/volume);
                    219:       TtaSetStatus (document, 1, TtaGetMessage (AMAYA, AM_UPDATED_LINK), number);
                    220:       TtaHandlePendingEvents ();
1.16      cvs       221:       link = TtaSearchTypedElement (elType, SearchForward, link);
                    222:       if (link != NULL)
1.32      cvs       223:        /* a link has been found */
1.16      cvs       224:        {
1.32      cvs       225:          linkType = TtaGetElementType (link);
                    226:          if (linkType.ElTypeNum == HTML_EL_Anchor)
                    227:             attrType.AttrTypeNum = HTML_ATTR_HREF_;
                    228:          else
                    229:             attrType.AttrTypeNum = HTML_ATTR_cite;
1.16      cvs       230:          HrefAttr = TtaGetAttribute (link, attrType);
                    231:          attrType.AttrTypeNum = HTML_ATTR_InternalLink;
                    232:          IntLinkAttr = TtaGetAttribute (link, attrType);
                    233:          attrType.AttrTypeNum = HTML_ATTR_ExternalLink;
                    234:          ExtLinkAttr = TtaGetAttribute (link, attrType);
                    235:          if (HrefAttr == NULL)
1.32      cvs       236:            /* this element is not a link (no href or cite attribute) */
1.16      cvs       237:            /* remove attributes InternalLink and ExternalLink if they
                    238:               are present */
                    239:            {
1.8       cvs       240:              if (IntLinkAttr != NULL)
1.16      cvs       241:                TtaRemoveAttribute (link, IntLinkAttr, document);
                    242:              if (ExtLinkAttr != NULL)
                    243:                TtaRemoveAttribute (link, ExtLinkAttr, document);          
                    244:            }
                    245:          else
1.32      cvs       246:            /* this element has an HREF or cite attribute */
1.16      cvs       247:            {
                    248:              length = TtaGetTextAttributeLength (HrefAttr);
                    249:              text = TtaGetMemory (length + 1);
                    250:              TtaGiveTextAttributeValue (HrefAttr, text, &length);
                    251: 
                    252:              /* does an external link become an internal link ? */
1.25      cvs       253:              if (document == DocBook && SubDocs != NULL)
1.16      cvs       254:                {
1.36      cvs       255:                  ptr = ustrrchr (text, '#');
1.16      cvs       256:                  url = text;
1.18      cvs       257:                  split = FALSE;
1.16      cvs       258:                  if (ptr == text)
                    259:                      /* a local link */
                    260:                      url = NULL;
1.17      cvs       261:                  else if (ptr != NULL)
1.16      cvs       262:                    {
                    263:                      /* split url and name part */
                    264:                      ptr[0] = EOS;
                    265:                      split = TRUE;
                    266:                    }
                    267: 
                    268:                  /* Is it a sub-document */
                    269:                  div = SearchSubDoc (url);
                    270:                  if (split)
                    271:                    /* retore the mark */
                    272:                    ptr[0] = '#';
                    273: 
                    274:                  if (div == NULL)
                    275:                    {
                    276:                      /* it's not a sub-document */
                    277:                      if (url == NULL)
                    278:                        /* a local link */
                    279:                        ptr = &text[1];
                    280:                      else
                    281:                        /* still an externa; link */
                    282:                        ptr = NULL;
                    283:                    }
                    284:                  else
                    285:                    {
                    286:                      /* this link becomes internal */
1.17      cvs       287:                      if (ptr != NULL)
1.16      cvs       288:                        {
1.17      cvs       289:                          /* get the target name */
1.36      cvs       290:                          ustrcpy (value, ptr);
                    291:                          length = ustrlen (value);
1.17      cvs       292:                          /* check whether the name changed */
                    293:                          i = 0;
                    294:                          target = SearchNAMEattribute (document, &value[1], NULL);
                    295:                          while (target != NULL)
1.16      cvs       296:                            {
1.17      cvs       297:                              /* is it the right NAME */
                    298:                              if (TtaIsAncestor (target, div))
                    299:                                target = NULL;
                    300:                              else
                    301:                                {
                    302:                                  /* continue the search */
                    303:                                  i++;
                    304:                                  sprintf (&value[length], "%d", i);
1.32      cvs       305:                                  target = SearchNAMEattribute (document,
                    306:                                                        &value[1], NULL);
1.17      cvs       307:                                }
1.16      cvs       308:                            }
                    309:                        }
1.17      cvs       310:                      else
                    311:                        {
                    312:                          /* get the DIV name */
                    313:                          attrType.AttrTypeNum = HTML_ATTR_ID;
                    314:                          attr = TtaGetAttribute (div, attrType);
                    315:                          length = 200;
                    316:                          value[0] = '#';
                    317:                          TtaGiveTextAttributeValue (attr, &value[1], &length);
                    318:                        }
1.16      cvs       319:                      ptr = &value[1];
                    320:                      TtaSetAttributeText (HrefAttr, value, link, document);
                    321:                    }
                    322:                }
                    323:              else if (text[0] == '#')
                    324:                  ptr = &text[1];
                    325:              else
                    326:                ptr = NULL;
                    327: 
                    328:              if (ptr != NULL)
                    329:                /* it's an internal link. Attach an attribute InternalLink */
                    330:                /* to the link, if this attribute does not exist yet */
                    331:                {
                    332:                  if (IntLinkAttr == NULL)
                    333:                    {
                    334:                      attrType.AttrTypeNum = HTML_ATTR_InternalLink;
                    335:                      IntLinkAttr = TtaNewAttribute (attrType);
                    336:                      TtaAttachAttribute (link, IntLinkAttr, document);
                    337:                    }
                    338:                  /* looks for the target element */
                    339:                  target = SearchNAMEattribute (document, ptr, NULL);
                    340:                  if (target != NULL)
                    341:                    /* set the Thot link */
1.32      cvs       342:                    TtaSetAttributeReference (IntLinkAttr, link, document,
                    343:                                              target, document);
1.16      cvs       344:                }
                    345:              else
                    346:                /* it's an external link */
                    347:                {
                    348:                  /* Remove the InternalLink attribute if it is present */
                    349:                  if (IntLinkAttr != NULL)
                    350:                    TtaRemoveAttribute (link, IntLinkAttr, document);
                    351:                  /* create an ExternalLink attribute if there is none */
                    352:                  if (ExtLinkAttr == NULL)
                    353:                    {
                    354:                      attrType.AttrTypeNum = HTML_ATTR_ExternalLink;
                    355:                      ExtLinkAttr = TtaNewAttribute (attrType);
                    356:                      TtaAttachAttribute (link, ExtLinkAttr, document);
                    357:                    }
                    358:                }
                    359:              TtaFreeMemory (text);
                    360:            }
                    361:        }
                    362:     }
                    363:   /* Reset document status */
                    364:   if (!status)
                    365:     TtaSetDocumentUnmodified (document);
1.3       cvs       366: }
                    367: 
                    368: /*----------------------------------------------------------------------
                    369:   CheckPrintingDocument reinitialize printing parameters as soon as
                    370:   the printing document changes.
                    371:   ----------------------------------------------------------------------*/
                    372: #ifdef __STDC__
                    373: static void         CheckPrintingDocument (Document document)
                    374: #else
                    375: static void         CheckPrintingDocument (document)
                    376: Document            document;
                    377: #endif
                    378: {
1.43      cvs       379:    CHAR_T             docName[MAX_LENGTH];
1.36      cvs       380:    STRING           ptr; 
1.43      cvs       381:    CHAR_T             suffix[MAX_LENGTH];
1.3       cvs       382:    int              lg;
                    383: 
                    384:    if (docPrint != document)
                    385:      {
                    386:        /* initialize print parameters */
                    387:        docPrint = document;
                    388: 
                    389:        /* define the new default PS file */
                    390:        ptr = TtaGetEnvString ("TMPDIR");
                    391:        if (ptr != NULL && TtaCheckDirectory (ptr))
1.44      cvs       392:             ustrcpy(PSdir,ptr);
                    393:        else
                    394:             ustrcpy (PSdir, TtaGetDefEnvString ("TMPDIR"));
1.36      cvs       395:           lg = ustrlen(PSdir);
1.3       cvs       396:           if (PSdir[lg - 1] == DIR_SEP)
1.44      cvs       397:             PSdir[--lg] = EOS;
                    398: 
1.36      cvs       399:        ustrcpy (docName, TtaGetDocumentName (document));
1.3       cvs       400:        ExtractSuffix (docName, suffix);
1.44      cvs       401:        sprintf (&PSdir[lg], "%c%s.ps", DIR_SEP, docName);
1.3       cvs       402:        TtaSetPsFile (PSdir);
                    403:        /* define the new default PrintSchema */
                    404:        numberLinks = FALSE;
                    405:        withToC = FALSE;
1.34      cvs       406:        printURL = TRUE;
1.3       cvs       407:        TtaSetPrintSchema ("");
                    408:        /* no manual feed */
                    409:        ManualFeed = PP_OFF;
                    410:        TtaSetPrintParameter (PP_ManualFeed, ManualFeed);
                    411:      }
                    412: }
                    413: 
                    414: 
                    415: /*----------------------------------------------------------------------
                    416:    PrintAs prints the document using predefined parameters.
                    417:    ----------------------------------------------------------------------*/  
                    418: #ifdef __STDC__
1.45      cvs       419: static void         PrintDocument (Document doc, View view)
1.3       cvs       420: #else  /* __STDC__ */
1.45      cvs       421: static void         PrintDocument (doc, view)
1.38      cvs       422: Document            doc;
1.3       cvs       423: #endif /* __STDC__ */
                    424: {
1.34      cvs       425:   AttributeType      attrType;
                    426:   Attribute          attr;
                    427:   Element            el;
1.43      cvs       428:   CHAR_T               viewsToPrint[MAX_PATH];
1.38      cvs       429:   boolean            status, textFile;
1.3       cvs       430: 
1.38      cvs       431:   textFile = (DocumentTypes[doc] == docText ||
                    432:              DocumentTypes[doc] == docTextRO ||
                    433:              DocumentTypes[doc] == docCSS ||
                    434:              DocumentTypes[doc] == docCSSRO);
                    435: 
                    436:    CheckPrintingDocument (doc);
1.36      cvs       437:    ustrcpy (viewsToPrint, "Formatted_view ");
1.38      cvs       438:    if (!textFile && withToC)
1.36      cvs       439:      ustrcat (viewsToPrint, "Table_of_contents ");
1.38      cvs       440:    if (!textFile && numberLinks)
1.8       cvs       441:      /* display numbered links */
1.3       cvs       442:      {
1.8       cvs       443:        /* associate an attribute InternalLink with all anchors refering
                    444:          a target in the same document.  This allows P schemas to work
                    445:          properly */
                    446:        SetInternalLinks (docPrint);
1.3       cvs       447:        if (PageSize == PP_A4)
                    448:         TtaSetPrintSchema ("HTMLPLP");
                    449:        else
                    450:         TtaSetPrintSchema ("HTMLPLPUS");
1.36      cvs       451:        ustrcat (viewsToPrint, "Links_view ");
1.32      cvs       452:      }
                    453:    else
                    454:      {
                    455:        if (PageSize == PP_A4)
1.38      cvs       456:         {
                    457:           if (textFile)
                    458:             TtaSetPrintSchema ("TextFilePP");
                    459:           else
                    460:             TtaSetPrintSchema ("HTMLPP");
                    461:         }
1.32      cvs       462:        else
1.38      cvs       463:         {
                    464:           if (textFile)
                    465:             TtaSetPrintSchema ("TextFilePPUS");
                    466:           else
                    467:             TtaSetPrintSchema ("HTMLPPUS");
                    468:         }    
1.3       cvs       469:      }
1.34      cvs       470:    /* post or remove the PrintURL attribute */
1.38      cvs       471:    el =  TtaGetMainRoot (doc);
                    472:    status = TtaIsDocumentModified (doc);
                    473:    attrType.AttrSSchema = TtaGetDocumentSSchema (doc);
                    474:    if (textFile)
                    475:      attrType.AttrTypeNum = TextFile_ATTR_PrintURL;
                    476:    else
                    477:      attrType.AttrTypeNum = HTML_ATTR_PrintURL;
1.34      cvs       478:    attr = TtaGetAttribute (el, attrType);
                    479:    if (attr == 0 && printURL)
                    480:      {
                    481:        attr = TtaNewAttribute (attrType);
1.38      cvs       482:        TtaAttachAttribute (el, attr, doc);
1.34      cvs       483:      }
                    484:    if (attr != 0 && !printURL)
1.38      cvs       485:      TtaRemoveAttribute (el, attr, doc);
1.3       cvs       486:    TtaPrint (docPrint, viewsToPrint);
1.34      cvs       487:    if (!status)
1.38      cvs       488:      TtaSetDocumentUnmodified (doc);
1.1       cvs       489: }
                    490: 
1.45      cvs       491: /*----------------------------------------------------------------------
                    492:    PrintAs prints the document using predefined parameters.
                    493:    ----------------------------------------------------------------------*/  
                    494: #ifdef __STDC__
                    495: void                PrintAs (Document doc, View view)
                    496: #else  /* __STDC__ */
                    497: void                PrintAs (doc, view)
                    498: Document            doc;
                    499: #endif /* __STDC__ */
                    500: {
                    501: #ifdef _WINDOWS 
                    502:   SetupAndPrint (doc, view);
                    503: #else /* _WINDOWS */
                    504:   PrintDocument (doc, view);
                    505: #endif /* _WINDOWS */
                    506: }
1.1       cvs       507: 
                    508: /*----------------------------------------------------------------------
                    509:    CallbackImage manage returns of Picture form.                   
                    510:   ----------------------------------------------------------------------*/
                    511: #ifdef __STDC__
1.36      cvs       512: void                CallbackPrint (int ref, int typedata, STRING data)
1.1       cvs       513: #else  /* __STDC__ */
                    514: void                CallbackPrint (ref, typedata, data)
                    515: int                 ref;
                    516: int                 typedata;
1.36      cvs       517: STRING              data;
1.1       cvs       518: #endif /* __STDC__ */
                    519: {
                    520:   int                 val;
                    521: 
                    522:   val = (int) data;
                    523:   switch (ref - basePrint)
                    524:     {
                    525:     case NumFormPrint:
                    526:       TtaDestroyDialogue (basePrint+NumFormPrint);
                    527:       switch (val)
                    528:        {
                    529:        case 1:
                    530:          /* confirms the paper print option */
                    531:          /* the other options are not taken into account without this
                    532:             confirmation */
1.2       cvs       533:          TtaSetPrintParameter (PP_Destination, PaperPrint);
                    534:          TtaSetPrintParameter (PP_ManualFeed, ManualFeed);
                    535:          TtaSetPrintParameter (PP_PaperSize, PageSize);
                    536:          TtaSetPrintCommand (pPrinter);
                    537:          TtaSetPsFile (PSdir);
1.40      cvs       538:          /* update the environment variable */
                    539:          TtaSetEnvString ("THOTPRINT", pPrinter, TRUE);
                    540:          TtaSetEnvInt ("PAPERSIZE", PageSize, TRUE);
1.46    ! cvs       541:          PrintDocument (docPrint, 1);
1.1       cvs       542:          break;
1.2       cvs       543:        case 0:
1.40      cvs       544:          PaperPrint = (TtaGetPrintParameter (PP_Destination)) ? PP_PRINTER : PP_PS;
1.2       cvs       545:          ManualFeed = TtaGetPrintParameter (PP_ManualFeed);
                    546:          PageSize = TtaGetPrintParameter (PP_PaperSize);         
                    547:          TtaGetPrintCommand (pPrinter);
                    548:          TtaGetPsFile (PSdir);
                    549:          break;
1.1       cvs       550:        default:
                    551:          break;
                    552:        }
                    553:       break;
                    554:     case NumMenuOptions:
                    555:       switch (val)
                    556:        {
                    557:        case 0:
                    558:          /* Manual feed option */
1.2       cvs       559:          if (ManualFeed == PP_ON)
                    560:            ManualFeed = PP_OFF;
                    561:          else
                    562:            ManualFeed = PP_ON;
1.1       cvs       563:          break;
                    564:        case 1:
                    565:          /* Toc option */
                    566:          withToC = !withToC;
                    567:          break;
                    568:        case 2:
1.3       cvs       569:          /* numberLinks option */
1.1       cvs       570:          numberLinks = !numberLinks;
1.34      cvs       571:        case 3:
                    572:          /* URL option */
                    573:          printURL = !printURL;
1.1       cvs       574:          break;
                    575:        }
                    576:       break;
                    577:     case NumMenuPaperFormat:
                    578:       /* page size submenu */
                    579:       switch (val)
                    580:        {
                    581:        case 0:
1.2       cvs       582:          PageSize = PP_A4;
1.1       cvs       583:          break;
                    584:        case 1:
1.2       cvs       585:          PageSize = PP_US;
1.1       cvs       586:          break;
                    587:        }
                    588:       break;
                    589:     case NumMenuSupport:
                    590:       /* paper print/save PostScript submenu */
                    591:       switch (val)
                    592:        {
                    593:        case 0:
1.2       cvs       594:          if (PaperPrint == PP_PS)
1.1       cvs       595:            {
1.2       cvs       596:              PaperPrint = PP_PRINTER;
1.1       cvs       597:              TtaSetTextForm (basePrint+NumZonePrinterName, pPrinter);
                    598:            }
                    599:          break;
                    600:        case 1:
1.2       cvs       601:          if (PaperPrint == PP_PRINTER)
1.1       cvs       602:            {
1.2       cvs       603:              PaperPrint = PP_PS;
1.1       cvs       604:              TtaSetTextForm (basePrint+NumZonePrinterName, PSdir);
                    605:            }
                    606:          break;
                    607:        }
                    608:       break;
                    609:     case NumZonePrinterName:
                    610:       if (data[0] != '\0')
1.2       cvs       611:        if (PaperPrint == PP_PRINTER)
1.40      cvs       612:            /* text capture zone for the printer name */
                    613:            ustrncpy (pPrinter, data, MAX_PATH);
1.1       cvs       614:        else
                    615:          /* text capture zone for the name of the PostScript file */
1.36      cvs       616:          ustrncpy (PSdir, data, MAX_PATH);
1.1       cvs       617:       break;
                    618:     }
                    619: }
                    620: 
                    621: /*----------------------------------------------------------------------
                    622:   ----------------------------------------------------------------------*/
                    623: #ifdef __STDC__
                    624: void                InitPrint (void)
                    625: #else  /* __STDC__ */
                    626: void                InitPrint ()
                    627: #endif /* __STDC__ */
                    628: {
1.36      cvs       629:   STRING ptr;
1.1       cvs       630: 
                    631:    basePrint = TtaSetCallback (CallbackPrint, PRINT_MAX_REF);
                    632:    docPrint = 0;
                    633: 
                    634:    /* init printer variables */
                    635:    /* read default printer variable */
                    636:    ptr = TtaGetEnvString ("THOTPRINT");
                    637:    if (ptr == NULL)
1.36      cvs       638:      ustrcpy (pPrinter, "");
1.1       cvs       639:    else
1.36      cvs       640:      ustrcpy (pPrinter, ptr);
1.40      cvs       641:    TtaGetEnvInt ("PAPERSIZE", &PageSize);
1.2       cvs       642:    PaperPrint = PP_PRINTER;
1.35      cvs       643:    printURL = TRUE;
1.2       cvs       644:    TtaSetPrintParameter (PP_Destination, PaperPrint);
                    645:    TtaSetPrintParameter (PP_PaperSize, PageSize);
                    646:    TtaSetPrintCommand (pPrinter);
1.1       cvs       647: }
                    648: 
                    649: /*----------------------------------------------------------------------
1.3       cvs       650:   SetupAndPrint sets printing parameters and starts the printing process
1.1       cvs       651:   ----------------------------------------------------------------------*/
                    652: #ifdef __STDC__
1.38      cvs       653: void                SetupAndPrint (Document doc, View view)
1.1       cvs       654: #else
1.38      cvs       655: void                SetupAndPrint (doc, view)
                    656: Document            doc;
1.1       cvs       657: View                view;
                    658: #endif
                    659: {
1.10      cvs       660: #  ifndef _WINDOWS
1.43      cvs       661:    CHAR_T             bufMenu[MAX_LENGTH];
1.3       cvs       662:    int              i;
1.27      cvs       663: #  endif /* !_WINDOWS */
1.44      cvs       664:    boolean            textFile;
1.38      cvs       665: 
                    666:    textFile = (DocumentTypes[doc] == docText ||
                    667:               DocumentTypes[doc] == docTextRO ||
                    668:               DocumentTypes[doc] == docCSS ||
                    669:               DocumentTypes[doc] == docCSSRO);
1.1       cvs       670: 
                    671:    /* Print form */
1.38      cvs       672:    CheckPrintingDocument (doc);
1.40      cvs       673: 
                    674:    /* read the values that the user may have changed thru
                    675:       the configuration menu */
                    676:    TtaGetPrintCommand (pPrinter);
                    677:    PageSize = TtaGetPrintParameter (PP_PaperSize);       
1.27      cvs       678: 
                    679: #  ifndef _WINDOWS
1.38      cvs       680:    TtaNewSheet (basePrint+NumFormPrint, TtaGetViewFrame (doc, view), 
1.1       cvs       681:                TtaGetMessage (LIB, TMSG_LIB_PRINT),
1.3       cvs       682:           1, TtaGetMessage (AMAYA, AM_BUTTON_PRINT), FALSE, 2, 'L', D_CANCEL);
1.1       cvs       683:    i = 0;
                    684:    sprintf (&bufMenu[i], "%s%s", "T", TtaGetMessage (LIB, TMSG_MANUAL_FEED));
1.36      cvs       685:    i += ustrlen (&bufMenu[i]) + 1;
1.1       cvs       686:    sprintf (&bufMenu[i], "%s%s", "T", TtaGetMessage (AMAYA, AM_PRINT_TOC));
1.36      cvs       687:    i += ustrlen (&bufMenu[i]) + 1;
1.1       cvs       688:    sprintf (&bufMenu[i], "%s%s", "T", TtaGetMessage (AMAYA, AM_NUMBERED_LINKS));
1.36      cvs       689:    i += ustrlen (&bufMenu[i]) + 1;
1.34      cvs       690:    sprintf (&bufMenu[i], "%s%s", "T", TtaGetMessage (AMAYA, AM_PRINT_URL));
1.1       cvs       691:    TtaNewToggleMenu (basePrint+NumMenuOptions, basePrint+NumFormPrint,
1.34      cvs       692:                TtaGetMessage (LIB, TMSG_OPTIONS), 4, bufMenu, NULL, FALSE);
1.2       cvs       693:    if (ManualFeed == PP_ON)
1.1       cvs       694:       TtaSetToggleMenu (basePrint+NumMenuOptions, 0, TRUE);
                    695:    if (withToC)
                    696:       TtaSetToggleMenu (basePrint+NumMenuOptions, 1, TRUE);
                    697:    if (numberLinks)
                    698:       TtaSetToggleMenu (basePrint+NumMenuOptions, 2, TRUE);
1.34      cvs       699:    if (printURL)
                    700:       TtaSetToggleMenu (basePrint+NumMenuOptions, 3, TRUE);
1.1       cvs       701: 
                    702:    /* Paper format submenu */
                    703:    i = 0;
                    704:    sprintf (&bufMenu[i], "%s%s", "B", TtaGetMessage (LIB, TMSG_A4));
1.36      cvs       705:    i += ustrlen (&bufMenu[i]) + 1;
1.1       cvs       706:    sprintf (&bufMenu[i], "%s%s", "B", TtaGetMessage (LIB, TMSG_US));
                    707:    TtaNewSubmenu (basePrint+NumMenuPaperFormat, basePrint+NumFormPrint, 0,
                    708:             TtaGetMessage (LIB, TMSG_PAPER_SIZE), 2, bufMenu, NULL, FALSE);
1.2       cvs       709:    if (PageSize == PP_US)
1.1       cvs       710:       TtaSetMenuForm (basePrint+NumMenuPaperFormat, 1);
                    711:    else
                    712:       TtaSetMenuForm (basePrint+NumMenuPaperFormat, 0);
                    713: 
                    714:    /* Print to paper/ Print to file submenu */
                    715:    i = 0;
                    716:    sprintf (&bufMenu[i], "%s%s", "B", TtaGetMessage (LIB, TMSG_PRINTER));
1.36      cvs       717:    i += ustrlen (&bufMenu[i]) + 1;
1.1       cvs       718:    sprintf (&bufMenu[i], "%s%s", "B", TtaGetMessage (LIB, TMSG_PS_FILE));
                    719:    TtaNewSubmenu (basePrint+NumMenuSupport, basePrint+NumFormPrint, 0,
                    720:                   TtaGetMessage (LIB, TMSG_OUTPUT), 2, bufMenu, NULL, TRUE);
                    721:    /* text capture zone for the printer name */
                    722:    TtaNewTextForm (basePrint+NumZonePrinterName, basePrint+NumFormPrint, NULL, 30, 1, FALSE);
                    723: 
                    724:    /* initialization of the PaperPrint selector */
1.2       cvs       725:    if (PaperPrint == PP_PRINTER)
1.1       cvs       726:      {
                    727:        TtaSetMenuForm (basePrint+NumMenuSupport, 0);
                    728:        TtaSetTextForm (basePrint+NumZonePrinterName, pPrinter);
                    729:      }
                    730:    else
                    731:      {
                    732:        TtaSetMenuForm (basePrint+NumMenuSupport, 1);
                    733:        TtaSetTextForm (basePrint+NumZonePrinterName, PSdir);
                    734:      }
                    735: 
                    736:    /* activates the Print form */
1.10      cvs       737:     TtaShowDialogue (basePrint+NumFormPrint, FALSE);
                    738: #   else  /* _WINDOWS */
1.38      cvs       739:     CreatePrintDlgWindow (TtaGetViewFrame (doc, view), PSdir, basePrint, NumMenuSupport, NumMenuOptions, NumMenuPaperFormat, NumZonePrinterName, NumFormPrint); 
1.10      cvs       740: #   endif /* _WINDOWS */
1.38      cvs       741:     if (textFile)
                    742:       {
                    743:        /* invalid dialogue entries */
                    744:        TtaRedrawMenuEntry (basePrint+NumMenuOptions, 1, NULL, -1, FALSE);
                    745:        TtaRedrawMenuEntry (basePrint+NumMenuOptions, 2, NULL, -1, FALSE);            }
1.1       cvs       746: }
                    747: 
                    748: /*----------------------------------------------------------------------
                    749:   SectionNumbering
                    750:   Execute the "Section Numbering" command
                    751:   ----------------------------------------------------------------------*/
                    752: #ifdef __STDC__
1.38      cvs       753: void                SectionNumbering (Document doc, View view)
1.1       cvs       754: #else
1.38      cvs       755: void                SectionNumbering (doc, view)
                    756: Document            doc;
1.1       cvs       757: View                view;
                    758: #endif
                    759: {
1.38      cvs       760:    ChangeAttrOnRoot (doc, HTML_ATTR_SectionNumbering);
1.1       cvs       761: }
                    762: 
                    763: /*----------------------------------------------------------------------
                    764:   UpdateURLsInSubtree
                    765:   Update NAMEs and URLs in subtree of el element, to take into account
                    766:   the move from one document to another.
                    767:   If a NAME attribute already exists in the new document, it is changed
                    768:   to avoid duplicate names.
                    769:   Transform the HREF and SRC attribute to make them independent from their
                    770:   former base.
                    771:   ----------------------------------------------------------------------*/
                    772: #ifdef __STDC__
                    773: static void         UpdateURLsInSubtree (NotifyElement *event, Element el)
                    774: #else
                    775: static void         UpdateURLsInSubtree (event, el)
                    776: NotifyElement      *event;
                    777: Element             el;
                    778: #endif
                    779: {
                    780: Element             nextEl;
                    781: 
                    782:   event->element = el;
                    783:   ElementPasted (event);
                    784:   nextEl = TtaGetFirstChild (el);
                    785:   while (nextEl != NULL)
                    786:     {
                    787:       UpdateURLsInSubtree (event, nextEl);
                    788:       TtaNextSibling (&nextEl);
                    789:     }
                    790: }
                    791: 
                    792: 
                    793: /*----------------------------------------------------------------------
                    794:   MoveDocumentBody
                    795:   Copy the elements contained in the BODY of document sourceDoc to the
                    796:   position of element *el in document destDoc.
                    797:   Delete the element containing *el and all its empty ancestors.
                    798:   If deleteTree is TRUE, copied elements are deleted from the source
                    799:   document.
                    800:   ----------------------------------------------------------------------*/
                    801: #ifdef __STDC__
1.36      cvs       802: static void    MoveDocumentBody (Element *el, Document destDoc, Document sourceDoc, STRING target, STRING url, boolean deleteTree)
1.1       cvs       803: #else
1.16      cvs       804: static void    MoveDocumentBody (el, destDoc, sourceDoc, target, url, deleteTree)
1.12      cvs       805: Element       *el;
                    806: Document       destDoc;
                    807: Document       sourceDoc;
1.36      cvs       808: STRING         target;
                    809: STRING         url;
1.12      cvs       810: boolean        deleteTree;
1.1       cvs       811: #endif
                    812: {
1.14      cvs       813:   Element         root, ancestor, elem, firstInserted;
1.12      cvs       814:   Element          lastInserted, srce, copy, old, parent, sibling;
                    815:   ElementType     elType;
                    816:   NotifyElement    event;
                    817:   int             checkingMode;
1.13      cvs       818:   boolean          isID;
1.1       cvs       819: 
1.13      cvs       820:   if (target != NULL)
                    821:     {
                    822:       /* locate the target element within the source document */
                    823:       root = SearchNAMEattribute (sourceDoc, target, NULL);
                    824:       elType = TtaGetElementType (root);
                    825:       isID = (elType.ElTypeNum != HTML_EL_Anchor 
                    826:              && elType.ElTypeNum != HTML_EL_MAP);
                    827:     }
                    828:   else
                    829:     {
                    830:       isID = FALSE;
                    831:       /* get the BODY element of source document */
                    832:       root = TtaGetMainRoot (sourceDoc);
                    833:       elType = TtaGetElementType (root);
                    834:       elType.ElTypeNum = HTML_EL_BODY;
                    835:       root = TtaSearchTypedElement (elType, SearchForward, root);
                    836:     }
                    837: 
                    838:   if (root != NULL)
1.12      cvs       839:     {
                    840:       /* don't check the abstract tree against the structure schema */
                    841:       checkingMode = TtaGetStructureChecking (destDoc);
                    842:       TtaSetStructureChecking (0, destDoc);
                    843:       /* get elem, the ancestor of *el which is a child of a DIV or BODY
                    844:         element in the destination document. The copied elements will be
                    845:         inserted just before this element. */
                    846:       elem = *el;
                    847:       do
1.1       cvs       848:        {
1.12      cvs       849:          ancestor = TtaGetParent (elem);
                    850:          if (ancestor != NULL)
                    851:            {
                    852:              elType = TtaGetElementType (ancestor);
                    853:              if (elType.ElTypeNum == HTML_EL_BODY ||
                    854:                  elType.ElTypeNum == HTML_EL_Division)
                    855:                ancestor = NULL;
                    856:              else
                    857:                elem = ancestor;
                    858:            }
1.1       cvs       859:        }
1.12      cvs       860:       while (ancestor != NULL);
                    861:       parent = TtaGetParent (elem);
1.14      cvs       862: 
                    863:       /* insert a DIV element */
1.15      cvs       864:       elType.ElTypeNum = HTML_EL_Division;
1.16      cvs       865:       lastInserted = TtaNewElement (destDoc, elType);
                    866:       TtaInsertSibling (lastInserted, elem, TRUE, destDoc);
                    867:       RegisterSubDoc (lastInserted, url);
1.42      cvs       868:       CreateTargetAnchor (destDoc, lastInserted, FALSE);
1.14      cvs       869: 
1.12      cvs       870:       /* do copy */
1.16      cvs       871:       firstInserted = NULL;
1.17      cvs       872:       if (isID)
                    873:        srce = root;
                    874:       else
                    875:        srce = TtaGetFirstChild (root);
1.12      cvs       876:       while (srce != NULL)
1.1       cvs       877:        {
1.12      cvs       878:          copy = TtaCopyTree (srce, sourceDoc, destDoc, parent);
                    879:          if (copy != NULL)
                    880:            {
1.16      cvs       881:              if (firstInserted == NULL)
1.12      cvs       882:                /* this is the first copied element. Insert it before elem */
                    883:                {
1.16      cvs       884:                  TtaInsertFirstChild (&copy, lastInserted, destDoc);
1.12      cvs       885:                  firstInserted = copy;
                    886:                }
                    887:              else
                    888:                /* insert the new copied element after the element previously
                    889:                   copied */
                    890:                TtaInsertSibling (copy, lastInserted, FALSE, destDoc);
                    891:              lastInserted = copy;
                    892:              /* update the NAMEs and URLs in the copied element */
                    893:              event.document = destDoc;
                    894:              event.position = sourceDoc;
                    895:              UpdateURLsInSubtree(&event, copy);
                    896:            }
                    897:          /* get the next element in the source document */
                    898:          old = srce;
                    899:          TtaNextSibling (&srce);
                    900:          if (deleteTree)
                    901:            TtaDeleteTree (old, sourceDoc);
1.13      cvs       902:          /* Stop here if the target points to a specific element with an ID */
                    903:          if (isID)
                    904:            srce = NULL;
1.1       cvs       905:        }
1.12      cvs       906:       
                    907:       /* delete the element(s) containing the link to the copied document */
                    908:       /* delete the parent element of *el and all empty ancestors */
                    909:       elem = TtaGetParent (*el);
                    910:       do
1.1       cvs       911:        {
1.12      cvs       912:          sibling = elem;
                    913:          TtaNextSibling (&sibling);
                    914:          if (sibling == NULL)
                    915:            {
                    916:              sibling = elem;
                    917:              TtaPreviousSibling (&sibling);
                    918:              if (sibling == NULL)
                    919:                elem = TtaGetParent (elem);
                    920:            }
1.1       cvs       921:        }
1.12      cvs       922:       while (sibling == NULL);
                    923:       TtaDeleteTree (elem, destDoc);
                    924:       /* restore previous chacking mode */
1.37      cvs       925:       TtaSetStructureChecking ((boolean)checkingMode, destDoc);
1.12      cvs       926:       /* return the address of the first copied element */
                    927:       *el = firstInserted;
                    928:     }
1.1       cvs       929: }
                    930: 
1.29      cvs       931: 
                    932: #ifdef __STDC__
                    933: void               GetIncludedDocuments_callback (int newdoc, int status, 
1.36      cvs       934:                                             STRING urlName,
                    935:                                             STRING outputfile, 
                    936:                                             STRING content_type,
1.29      cvs       937:                                             void * context)
                    938: #else  /* __STDC__ */
                    939: void               GetIncludedDocuments_callback (newdoc, status, urlName,
                    940:                                              outputfile, content_type, 
                    941:                                              context)
                    942: int newdoc;
                    943: int status;
1.36      cvs       944: STRING urlName;
                    945: STRING outputfile;
                    946: STRING content_type;
1.29      cvs       947: void *context;
                    948: #endif /* __STDC__ */
                    949: {
                    950:   Element              link, next;
                    951:   Attribute            RelAttr, HrefAttr;
1.36      cvs       952:   STRING               url, ptr, text;
1.29      cvs       953:   Document             document;
                    954:   GetIncludedDocuments_context  *ctx;
                    955: 
                    956:   /* restore GetIncludedDocuments's context */
                    957:   ctx = (GetIncludedDocuments_context *) context;
                    958:   
                    959:   if (!ctx)
                    960:     return;
                    961: 
                    962:   RelAttr = ctx->RelAttr;
                    963:   link = ctx->link;
                    964:   HrefAttr = ctx->HrefAttr;
                    965:   url = ctx->url;
                    966:   ptr = ctx->ptr;
                    967:   document = ctx->document;
                    968:   next = ctx->next;
                    969:   text = ctx->text;
                    970: 
                    971:   TtaFreeMemory (ctx);
                    972: 
                    973:   if (RelAttr != NULL && link != NULL)
                    974:     {
                    975:       if (HrefAttr != NULL)
                    976:        {
                    977:          if (url != NULL)
                    978:            {
                    979:              if (newdoc != 0 && newdoc != document)
                    980:                {
                    981:                  /* it's not the document itself */
                    982:                  /* copy the target document at the position of the link */
                    983:                  MoveDocumentBody (&next, document, newdoc, ptr, url,
1.37      cvs       984:                                    (boolean)(newdoc == IncludedDocument));
1.29      cvs       985:                }
                    986:              /* global variables */
                    987:              FreeDocumentResource (IncludedDocument);
                    988:              TtaCloseDocument (IncludedDocument);
                    989:              IncludedDocument = 0;
                    990:            }
                    991:          TtaFreeMemory (text);
                    992:        }
                    993:     }
                    994:   
                    995:   if (next != NULL && DocBook == document)
                    996:     {
                    997:       SetStopButton (document);
                    998:       GetIncludedDocuments (next, document);
                    999:     }
                   1000:   else
                   1001:     MakeBook_callback (document);
                   1002: }
                   1003: 
1.1       cvs      1004: /*----------------------------------------------------------------------
                   1005:   GetIncludedDocuments
                   1006:   Look forward, starting from element el, for a link (A) with attribute
1.5       cvs      1007:   REL="chapter" or REL="subdocument" and replace that link by the contents
                   1008:   of the target document.
1.1       cvs      1009:   ----------------------------------------------------------------------*/
                   1010: #ifdef __STDC__
1.29      cvs      1011: static void         GetIncludedDocuments (Element el, Document document)
1.1       cvs      1012: #else
1.29      cvs      1013: static void         GetIncludedDocuments (el, document)
1.1       cvs      1014: Element                    el;
                   1015: Document            document;
                   1016: #endif
                   1017: {
1.29      cvs      1018:   Element              link, next;
                   1019:   Attribute            RelAttr, HrefAttr = NULL;
                   1020:   AttributeType        attrType;
                   1021:   int                  length;
1.36      cvs      1022:   STRING               text, ptr, url = NULL;
1.29      cvs      1023:   Document             newdoc;
                   1024:   boolean              call_callback = FALSE;
                   1025:   GetIncludedDocuments_context  *ctx = NULL;
                   1026: 
                   1027:   link = el;
                   1028:   RelAttr = NULL;
                   1029:   next = NULL;
                   1030: 
                   1031:   ctx = TtaGetMemory (sizeof (GetIncludedDocuments_context));
                   1032:   memset (ctx, 0, sizeof (GetIncludedDocuments_context));
                   1033: 
                   1034:   attrType.AttrSSchema = TtaGetDocumentSSchema (document);
                   1035:   attrType.AttrTypeNum = HTML_ATTR_REL;
                   1036: 
                   1037: 
                   1038:   /* looks for an anchor having an attribute REL="chapter" or
                   1039:      REL="subdocument" */
                   1040:   while (link != NULL && RelAttr == NULL)
                   1041:     {
                   1042:       TtaSearchAttribute (attrType, SearchForward, link, &link, &RelAttr);
                   1043:       if (link != NULL && RelAttr != NULL)
                   1044:        {
                   1045:          length = TtaGetTextAttributeLength (RelAttr);
                   1046:          text = TtaGetMemory (length + 1);
                   1047:          TtaGiveTextAttributeValue (RelAttr, text, &length);
1.36      cvs      1048:          if (ustrcasecmp (text, "chapter") && ustrcasecmp (text, "subdocument"))
1.29      cvs      1049:            RelAttr = NULL;
                   1050:          TtaFreeMemory (text);
                   1051:        }
                   1052:     }
                   1053:   
                   1054:   ctx->RelAttr = RelAttr;
                   1055:   ctx->link =  link;
                   1056:   ctx->document = document;
                   1057:   ctx->HrefAttr = HrefAttr;
1.1       cvs      1058: 
1.29      cvs      1059:   if (RelAttr != NULL && link != NULL)
                   1060:     /* a link with attribute REL="Chapter" has been found */
                   1061:     {
                   1062:       next = link;
                   1063:       ctx->next =next;
                   1064:       attrType.AttrTypeNum = HTML_ATTR_HREF_;
                   1065:       HrefAttr = TtaGetAttribute (link, attrType);
                   1066:       if (HrefAttr != NULL)
1.1       cvs      1067:         /* this link has an attribute HREF */
                   1068:         {
                   1069:           length = TtaGetTextAttributeLength (HrefAttr);
                   1070:           text = TtaGetMemory (length + 1);
                   1071:           TtaGiveTextAttributeValue (HrefAttr, text, &length);
1.36      cvs      1072:           ptr = ustrrchr (text, '#');
1.12      cvs      1073:           url = text;
                   1074:           if (ptr != NULL)
                   1075:             {
                   1076:               if (ptr == text)
                   1077:                 url = NULL;
1.16      cvs      1078:               /* link to a particular position within a remote document */
1.12      cvs      1079:               ptr[0] = EOS;
                   1080:               ptr = &ptr[1];
                   1081:             }
1.29      cvs      1082:           
                   1083:           ctx->url = url;
                   1084:           ctx->ptr = ptr;
                   1085:           ctx->text = text;
                   1086:           ctx->HrefAttr = HrefAttr;
1.12      cvs      1087: 
                   1088:           if (url != NULL)
1.29      cvs      1089:             /* this link designates an external document */
1.1       cvs      1090:             {
                   1091:               /* create a new document and loads the target document */
1.25      cvs      1092:               IncludedDocument = TtaNewDocument ("HTML", "tmp");
1.30      cvs      1093:               if (IncludedDocument != 0)
                   1094:                  {
                   1095:                  TtaSetStatus (document, 1, TtaGetMessage (AMAYA, AM_FETCHING), url);
                   1096:                  newdoc = GetHTMLDocument (url, NULL, IncludedDocument,
1.29      cvs      1097:                                         document, CE_MAKEBOOK, FALSE, 
                   1098:                                         (void *) GetIncludedDocuments_callback,
                   1099:                                         (void *) ctx);
1.30      cvs      1100:                  }
1.1       cvs      1101:             }
1.29      cvs      1102:           else 
                   1103:             call_callback = TRUE;
                   1104:          }
                   1105:        else
                   1106:         call_callback = TRUE;
                   1107:      } 
                   1108:    else
                   1109:      call_callback = TRUE;
                   1110:     
                   1111:     if (call_callback)
                   1112:       GetIncludedDocuments_callback (document, -1, url, NULL, NULL, 
                   1113:                                     (void *) ctx);
1.1       cvs      1114: }
                   1115: 
                   1116: 
                   1117: /*----------------------------------------------------------------------
1.29      cvs      1118:   MakeBook_callback
                   1119:   ----------------------------------------------------------------------*/
                   1120: #ifdef __STDC__
                   1121: void MakeBook_callback (Document document)
                   1122: #else
                   1123: void MakeBook_callback (Document document)
                   1124: #endif /* __STDC__ */
                   1125: 
                   1126: {
                   1127:   ResetStop (document);
                   1128:   /* update internal links */
                   1129:   SetInternalLinks (document);
                   1130:   /* remove registered  sub-documents */
                   1131:   FreeSubDocTable ();
                   1132:   DocBook = 0;
1.39      cvs      1133:   SetBrowserEditor (document);
1.29      cvs      1134:   TtaSetStatus (document, 1, TtaGetMessage (AMAYA, AM_DOCUMENT_LOADED), NULL);
                   1135: }
                   1136: 
                   1137: /*----------------------------------------------------------------------
1.1       cvs      1138:   MakeBook
                   1139:   Replace all links in a document which have an attribute REL="chapter"
1.5       cvs      1140:   or REL="subdocument" by the corresponding target document.
1.1       cvs      1141:   ----------------------------------------------------------------------*/
                   1142: #ifdef __STDC__
                   1143: void                MakeBook (Document document, View view)
                   1144: #else
                   1145: void                MakeBook (document, view)
                   1146: Document            document;
                   1147: View                view;
                   1148: #endif
                   1149: {
                   1150:    Element         root, body, el;
                   1151:    ElementType     elType;
                   1152: 
1.24      cvs      1153:    /* stops all current transfers on this document */
1.25      cvs      1154:    StopTransfer (document, 1);
                   1155:    /* simulate a transfert in the main document */
                   1156:    ActiveMakeBook (document);
1.1       cvs      1157:    root = TtaGetMainRoot (document);
                   1158:    elType = TtaGetElementType (root);
                   1159:    elType.ElTypeNum = HTML_EL_BODY;
                   1160:    body = TtaSearchTypedElement (elType, SearchForward, root);
                   1161:    TtaSetDocumentModified (document);
                   1162:    el = body;
1.29      cvs      1163: 
                   1164:    if (el != NULL && DocBook == document)
                   1165:      GetIncludedDocuments (el, document);
                   1166:    else
                   1167:      MakeBook_callback (document);
1.1       cvs      1168: }
1.29      cvs      1169: 
                   1170: 
                   1171: 
                   1172: 
                   1173: 
                   1174: 
                   1175: 
                   1176: 
                   1177: 
                   1178: 

Webmaster