bool SHGToMap(wxChar *filename, wxChar *defaultFile) { // Test the SHG parser HotSpot *hotspots = NULL; int n = ParseSHG(filename, &hotspots); if (n == 0) return false; wxChar buf[100]; wxSnprintf(buf, sizeof(buf), _T("Converting .SHG file to HTML map file: there are %d hotspots in %s."), n, filename); OnInform(buf); wxChar outBuf[256]; wxStrcpy(outBuf, filename); StripExtension(outBuf); wxStrcat(outBuf, _T(".map")); FILE *fd = wxFopen(outBuf, _T("w")); if (!fd) { OnError(_T("Could not open .map file for writing.")); delete[] hotspots; return false; } wxFprintf(fd, _T("default %s\n"), defaultFile); for (int i = 0; i < n; i++) { wxChar *refFilename = _T("??"); TexRef *texRef = FindReference(hotspots[i].szHlpTopic_Macro); if (texRef) refFilename = texRef->refFile; else { wxChar buf[300]; wxSnprintf(buf, sizeof(buf), _T("Warning: could not find hotspot reference %s"), hotspots[i].szHlpTopic_Macro); OnInform(buf); } wxFprintf(fd, _T("rect %s %d %d %d %d\n"), refFilename, (int)hotspots[i].left, (int)hotspots[i].top, (int)hotspots[i].right, (int)hotspots[i].bottom); } wxFprintf(fd, _T("\n")); fclose(fd); delete[] hotspots; return true; }
/*---------------------------------------------------------------------- FindReference cherche une reference a` l'element selectionne'. A l'appel: - pPrevRef: pointeur sur la derniere reference trouvee ou NULL si on cherche la premiere reference (dans ce cas, pExtDoc doit aussi etre NULL). - pReferredEl: l'element dont on cherche les references, NULL si on cherche la premiere reference. - pDoc: le document auquel appartient l'element dont on cherche les references, NULL si on cherche la premiere reference. Au retour: - pPrevRef: pointeur sur la reference trouvee ou NULL si on n'a pas trouve' de reference. - pReferredEl: l'element dont on cherche les references. ----------------------------------------------------------------------*/ void FindReference (PtrReference *pPrevRef, PtrDocument pDoc, PtrElement *pReferredEl) { PtrElement firstSel; PtrElement lastSel; PtrElement pEl; PtrDocument pSelDoc; PtrElement pAncest; int firstChar; int lastChar; ThotBool ok; ThotBool found; ok = TRUE; if (*pPrevRef) /* on a deja une reference courante */ *pPrevRef = NextReferenceToEl (*pReferredEl, pDoc, *pPrevRef); else /* pas de reference courante */ { /* prend la selection courante */ ok = GetCurrentSelection (&pSelDoc, &firstSel, &lastSel, &firstChar, &lastChar); if (ok) /* cherche le premier element reference' qui englobe la */ /* selection courante */ { pEl = firstSel; found = FALSE; do { if (pEl->ElReferredDescr && /* l'element a un descripteur d'element reference' */ pEl->ElReferredDescr->ReFirstReference) /* l'element est effectivement reference' */ found = TRUE; if (!found) /* l'element n'est pas reference', on passe au pere */ pEl = pEl->ElParent; } while (!found && pEl); if (found) /* on a trouve' un ascendant reference' */ { /* conserve un pointeur sur l'element dont on cherche les */ /* references ainsi que sur son document */ *pReferredEl = pEl; /* cherche la premiere reference a cet element */ *pPrevRef = NextReferenceToEl (*pReferredEl, pDoc, *pPrevRef); } } } if (*pPrevRef != NULL) /* on a trouve' une reference */ { ok = TRUE; /* on ignore les references qui sont a l'interieur d'une inclusion */ if ((*pPrevRef)->RdElement != NULL) { pAncest = (*pPrevRef)->RdElement->ElParent; while (pAncest->ElParent != NULL && pAncest->ElSource == NULL) pAncest = pAncest->ElParent; if (pAncest->ElSource != NULL) /* on est dans une inclusion */ ok = FALSE; } /* on ignore les references dans les partie cachees */ if (ok) if (ElementIsHidden ((*pPrevRef)->RdElement)) /* on est dans une partie cachee */ ok = FALSE; /* on ignore les references qui sont dans le tampon de Copier-Couper */ if (ok) if (IsASavedElement ((*pPrevRef)->RdElement)) ok = FALSE; if (!ok) /* cherche la reference suivante au meme element */ FindReference (pPrevRef, pDoc, pReferredEl); else /* selectionne la reference trouvee */ SelectElementWithEvent (pDoc, (*pPrevRef)->RdElement, FALSE, FALSE); } }
bool XLPOnArgument(int macroId, int arg_no, bool start) { wxChar buf[300]; switch (macroId) { case ltCHAPTER: case ltCHAPTERSTAR: case ltCHAPTERHEADING: case ltSECTION: case ltSECTIONSTAR: case ltSECTIONHEADING: case ltSUBSECTION: case ltSUBSECTIONSTAR: case ltSUBSUBSECTION: case ltSUBSUBSECTIONSTAR: case ltGLOSS: case ltMEMBERSECTION: case ltFUNCTIONSECTION: { if (!start && (arg_no == 1)) currentSection = GetArgChunk(); return false; } case ltFUNC: { if (!start && (arg_no == 1)) TexOutput(_T(" "), true); if (start && (arg_no == 3)) TexOutput(_T("("), true); if (!start && (arg_no == 3)) TexOutput(_T(")"), true); break; } case ltPFUNC: { if (!start && (arg_no == 1)) TexOutput(_T(" "), true); if (start && (arg_no == 2)) TexOutput(_T("(*"), true); if (!start && (arg_no == 2)) TexOutput(_T(")"), true); if (start && (arg_no == 3)) TexOutput(_T("("), true); if (!start && (arg_no == 3)) TexOutput(_T(")"), true); break; } case ltCLIPSFUNC: { if (!start && (arg_no == 1)) TexOutput(_T(" "), true); if (start && (arg_no == 2)) { TexOutput(_T("("), true); long id = NewBlockId(); wxSnprintf(buf, sizeof(buf), _T("\\hy-%d{%ld}{"), hyBLOCK_BOLD, id); TexOutput(buf); } if (!start && (arg_no == 2)) { TexOutput(_T("}")); } if (!start && (arg_no == 3)) TexOutput(_T(")"), true); break; } case ltPARAM: { if (start && (arg_no == 2)) { long id = NewBlockId(); wxSnprintf(buf, sizeof(buf), _T(" \\hy-%d{%ld}{"), hyBLOCK_BOLD, id); TexOutput(buf); } if (!start && (arg_no == 2)) { TexOutput(_T("}")); } break; } case ltCPARAM: { if (start && (arg_no == 2)) { long id = NewBlockId(); wxSnprintf(buf, sizeof(buf), _T(" \\hy-%d{%ld}{"), hyBLOCK_BOLD, id); TexOutput(buf); } if (!start && (arg_no == 2)) { TexOutput(_T("}")); } break; } case ltMEMBER: { if (!start && (arg_no == 1)) TexOutput(_T(" "), true); break; } case ltLABEL: { return false; } case ltREF: { if (start) { wxChar *sec = NULL; wxChar *refName = GetArgData(); if (refName) { TexRef *texRef = FindReference(refName); if (texRef) { sec = texRef->sectionNumber; } } if (sec) { TexOutput(sec); } return false; } break; } case ltHELPREF: case ltHELPREFN: case ltPOPREF: { if (arg_no == 1) { if (start) { currentBlockId = NewBlockId(); wxSnprintf(buf, sizeof(buf), _T("\\hy-%d{%ld}{"), hyBLOCK_RED_ITALIC, currentBlockId); TexOutput(buf); } else TexOutput(_T("}")); } if (arg_no == 2) { if (start) { wxChar *label = GetArgData(); hyperLinks.Append(currentBlockId, (wxObject *)copystring(label)); } return false; } break; } case ltURLREF: { if (arg_no == 1) { return true; } else if (arg_no == 2) { if (start) TexOutput(_T(" (")); else TexOutput(_T(")")); return true; } break; } case ltITEM: { if (start && IsArgOptional()) { descriptionItemArg = GetArgChunk(); return false; } break; } case ltTABULAR: case ltSUPERTABULAR: { if (arg_no == 1) { if (start) { inTable = true; tableVerticalLineLeft = false; tableVerticalLineRight = false; wxChar *alignString = copystring(GetArgData()); // Count the number of columns noColumns = 0; int len = wxStrlen(alignString); if (len > 0) { if (alignString[0] == '|') tableVerticalLineLeft = true; if (alignString[len-1] == '|') tableVerticalLineRight = true; } for (int i = 0; i < len; i++) if (isalpha(alignString[i])) noColumns ++; /* // Experimental TexOutput(_T("\\brdrt\\brdrs")); if (tableVerticalLineLeft) TexOutput(_T("\\brdrl\\brdrs")); if (tableVerticalLineRight) TexOutput(_T("\\brdrr\\brdrs")); */ // Calculate a rough size for each column // int tabPos = 80/noColumns; currentTab = 0; return false; } } else if (arg_no == 2 && !start) { inTable = false; } else if (arg_no == 2 && start) return true; break; } case ltMARGINPAR: case ltMARGINPAREVEN: case ltMARGINPARODD: case ltNORMALBOX: case ltNORMALBOXD: { if (start) { TexOutput(_T("----------------------------------------------------------------------\n"), true); return true; } else TexOutput(_T("\n----------------------------------------------------------------------\n"), true); break; } case ltBIBITEM: { wxChar buf[100]; if (arg_no == 1 && start) { wxChar *citeKey = GetArgData(); TexRef *ref = (TexRef *)TexReferences.Get(citeKey); if (ref) { if (ref->sectionNumber) delete[] ref->sectionNumber; wxSnprintf(buf, sizeof(buf), _T("[%d]"), citeCount); ref->sectionNumber = copystring(buf); } wxSnprintf(buf, sizeof(buf), _T("\\hy-%d{%ld}{[%d]} "), hyBLOCK_BOLD, NewBlockId(), citeCount); TexOutput(buf); citeCount ++; return false; } return true; } case ltTHEBIBLIOGRAPHY: { if (start && (arg_no == 1)) { citeCount = 1; SetCurrentOutput(Chapters); SetCurrentOutputs(Contents, Chapters); long id1 = NewBlockId(); long id2 = NewBlockId(); wxFprintf(Contents, _T("\\hy-%d{%ld}{%s}\n"), hyBLOCK_SMALL_HEADING, id1, ReferencesNameString); wxFprintf(Chapters, _T("\\hy-%d{%ld}{%s}\n\n\n"), hyBLOCK_LARGE_VISIBLE_SECTION, id2, ReferencesNameString); wxFprintf(Index, _T("%ld %ld\n"), id1, id2); SetCurrentOutput(Chapters); return false; } if (!start && (arg_no == 2)) { } return true; } case ltTWOCOLITEM: case ltTWOCOLITEMRULED: { if (start && (arg_no == 2)) TexOutput(_T("\n ")); if (!start && (arg_no == 2)) TexOutput(_T("\n")); return true; } /* * Accents * */ case ltACCENT_GRAVE: { if (start) { wxChar *val = GetArgData(); if (val) { switch (val[0]) { case _T('a'): TexOutput(_T("a")); break; case _T('e'): TexOutput(_T("e")); break; case _T('i'): TexOutput(_T("i")); break; case _T('o'): TexOutput(_T("o")); break; case _T('u'): TexOutput(_T("u")); break; case _T('A'): TexOutput(_T("a")); break; case _T('E'): TexOutput(_T("E")); break; case _T('I'): TexOutput(_T("I")); break; case _T('O'): TexOutput(_T("O")); break; case _T('U'): TexOutput(_T("U")); break; default: break; } } } return false; } case ltACCENT_ACUTE: { if (start) { wxChar *val = GetArgData(); if (val) { switch (val[0]) { case _T('a'): TexOutput(_T("a")); break; case _T('e'): TexOutput(_T("e")); break; case _T('i'): TexOutput(_T("i")); break; case _T('o'): TexOutput(_T("o")); break; case _T('u'): TexOutput(_T("u")); break; case _T('y'): TexOutput(_T("y")); break; case _T('A'): TexOutput(_T("A")); break; case _T('E'): TexOutput(_T("E")); break; case _T('I'): TexOutput(_T("I")); break; case _T('O'): TexOutput(_T("O")); break; case _T('U'): TexOutput(_T("U")); break; case _T('Y'): TexOutput(_T("Y")); break; default: break; } } } return false; } case ltACCENT_CARET: { if (start) { wxChar *val = GetArgData(); if (val) { switch (val[0]) { case _T('a'): TexOutput(_T("a")); break; case _T('e'): TexOutput(_T("e")); break; case _T('i'): TexOutput(_T("i")); break; case _T('o'): TexOutput(_T("o")); break; case _T('u'): TexOutput(_T("u")); break; case _T('A'): TexOutput(_T("A")); break; case _T('E'): TexOutput(_T("E")); break; case _T('I'): TexOutput(_T("I")); break; case _T('O'): TexOutput(_T("O")); break; case _T('U'): TexOutput(_T("U")); break; default: break; } } } return false; } case ltACCENT_TILDE: { if (start) { wxChar *val = GetArgData(); if (val) { switch (val[0]) { case _T('a'): TexOutput(_T("a")); break; case _T(' '): TexOutput(_T("~")); break; case _T('n'): TexOutput(_T("n")); break; case _T('o'): TexOutput(_T("o")); break; case _T('A'): TexOutput(_T("A")); break; case _T('N'): TexOutput(_T("N")); break; case _T('O'): TexOutput(_T("O")); break; default: break; } } } return false; } case ltACCENT_UMLAUT: { if (start) { wxChar *val = GetArgData(); if (val) { switch (val[0]) { case _T('a'): TexOutput(_T("a")); break; case _T('e'): TexOutput(_T("e")); break; case _T('i'): TexOutput(_T("i")); break; case _T('o'): TexOutput(_T("o")); break; case _T('u'): TexOutput(_T("u")); break; case _T('y'): TexOutput(_T("y")); break; case _T('A'): TexOutput(_T("A")); break; case _T('E'): TexOutput(_T("E")); break; case _T('I'): TexOutput(_T("I")); break; case _T('O'): TexOutput(_T("O")); break; case _T('U'): TexOutput(_T("U")); break; case _T('Y'): TexOutput(_T("Y")); break; default: break; } } } return false; } case ltACCENT_DOT: { if (start) { wxChar *val = GetArgData(); if (val) { switch (val[0]) { case _T('a'): TexOutput(_T("a")); break; case _T('A'): TexOutput(_T("A")); break; default: break; } } } return false; } case ltACCENT_CADILLA: { if (start) { wxChar *val = GetArgData(); if (val) { switch (val[0]) { case _T('c'): TexOutput(_T("c")); break; case _T('C'): TexOutput(_T("C")); break; default: break; } } } return false; } default: { return DefaultOnArgument(macroId, arg_no, start); } } return true; }