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; }
void MyFrame::OnGo(wxCommandEvent& WXUNUSED(event)) { passNumber = 1; errorCount = 0; menuBar->EnableTop(0, false); menuBar->EnableTop(1, false); menuBar->EnableTop(2, false); menuBar->EnableTop(3, false); textWindow->Clear(); Tex2RTFYield(true); Go(); if (stopRunning) { #if wxUSE_STATUSBAR SetStatusText(_T("Build aborted!")); #endif // wxUSE_STATUSBAR wxString errBuf; errBuf.Printf(_T("\nErrors encountered during this pass: %lu\n"), errorCount); OnInform((wxChar *)errBuf.c_str()); } if (runTwice && !stopRunning) { Tex2RTFYield(true); Go(); } menuBar->EnableTop(0, true); menuBar->EnableTop(1, true); menuBar->EnableTop(2, true); menuBar->EnableTop(3, true); }
bool Go(void) { #ifndef NO_GUI ChooseInputFile(); ChooseOutputFile(); #endif if (InputFile.empty() || OutputFile.empty() || stopRunning) return false; #ifndef NO_GUI if (isInteractive) { wxChar buf[300]; wxString str = wxFileNameFromPath(InputFile); wxSnprintf(buf, sizeof(buf), _T("Tex2RTF [%s]"), (const wxChar*) str); frame->SetTitle(buf); } wxStartTimer(); #endif // Find extension-less filename wxStrcpy(FileRoot, OutputFile.c_str()); StripExtension(FileRoot); if (truncateFilenames && convertMode == TEX_HTML) { // Truncate to five characters. This ensures that // we can generate DOS filenames such as thing999. But 1000 files // may not be enough, of course... wxChar* sName = wxFileNameFromPath( FileRoot); // this Julian's method is non-destructive reference if(sName) if(wxStrlen( sName) > 5) sName[5] = '\0'; // that should do! } wxSnprintf(ContentsName, 300, _T("%s.con"), FileRoot); wxSnprintf(TmpContentsName, 300, _T("%s.cn1"), FileRoot); wxSnprintf(TmpFrameContentsName, 300, _T("%s.frc"), FileRoot); wxSnprintf(WinHelpContentsFileName, 300, _T("%s.cnt"), FileRoot); wxSnprintf(RefFileName, 300, _T("%s.ref"), FileRoot); TexPathList.EnsureFileAccessible(InputFile); if (!bulletFile) { wxString s = TexPathList.FindValidPath(_T("bullet.bmp")); if (!s.empty()) { wxString str = wxFileNameFromPath(s); bulletFile = copystring(str); } } if (wxFileExists(RefFileName)) ReadTexReferences(RefFileName); bool success = false; if (!InputFile.empty() && !OutputFile.empty()) { if (!wxFileExists(InputFile)) { OnError(_T("Cannot open input file!")); TexCleanUp(); return false; } #if !defined(NO_GUI) && wxUSE_STATUSBAR if (isInteractive) { wxString buf; buf.Printf(_T("Working, pass %d...Click CLOSE to abort"), passNumber); frame->SetStatusText((wxChar *)buf.c_str()); } #endif OkToClose = false; OnInform(_T("Reading LaTeX file...")); TexLoadFile(InputFile); if (stopRunning) { OkToClose = true; return false; } switch (convertMode) { case TEX_RTF: { success = RTFGo(); break; } case TEX_XLP: { success = XLPGo(); break; } case TEX_HTML: { success = HTMLGo(); break; } } } if (stopRunning) { OnInform(_T("*** Aborted by user.")); success = false; stopRunning = false; OkToClose = true; } if (success) { WriteTexReferences(RefFileName); TexCleanUp(); startedSections = false; wxString buf; #ifndef NO_GUI long tim = wxGetElapsedTime(); buf.Printf(_T("Finished PASS #%d in %ld seconds.\n"), passNumber, (long)(tim/1000.0)); OnInform((wxChar *)buf.c_str()); if (errorCount) { buf.Printf(_T("Errors encountered during this pass: %lu\n"), errorCount); OnInform((wxChar *)buf.c_str()); } #if wxUSE_STATUSBAR if (isInteractive) { buf.Printf(_T("Done, %d %s."), passNumber, (passNumber > 1) ? _T("passes") : _T("pass")); frame->SetStatusText((wxChar *)buf.c_str()); } #endif // wxUSE_STATUSBAR #else buf.Printf(_T("Done, %d %s."), passNumber, (passNumber > 1) ? _T("passes") : _T("pass")); OnInform((wxChar *)buf.c_str()); if (errorCount) { buf.Printf(_T("Errors encountered during this pass: %lu\n"), errorCount); OnInform((wxChar *)buf.c_str()); } #endif passNumber ++; errorCount = 0; OkToClose = true; return true; } TexCleanUp(); startedSections = false; #if !defined(NO_GUI) && wxUSE_STATUSBAR frame->SetStatusText(_T("Aborted by user.")); #endif // GUI OnInform(_T("Sorry, unsuccessful.")); OkToClose = true; return false; }
void ShowOptions(void) { wxChar buf[100]; wxSnprintf(buf, sizeof(buf), _T("Tex2RTF version %.2f"), versionNo); OnInform(buf); OnInform(_T("Usage: tex2rtf [input] [output] [switches]\n")); OnInform(_T("where valid switches are")); #ifndef NO_GUI OnInform(_T(" -interactive")); #endif OnInform(_T(" -bufsize <size in K>")); OnInform(_T(" -charset <pc | pca | ansi | mac> (default ansi)")); OnInform(_T(" -twice")); OnInform(_T(" -sync")); OnInform(_T(" -checkcurlybraces")); OnInform(_T(" -checksyntax")); OnInform(_T(" -macros <filename>")); OnInform(_T(" -winhelp")); OnInform(_T(" -rtf")); OnInform(_T(" -html")); OnInform(_T(" -xlp\n")); }
// Called on start/end of macro examination void XLPOnMacro(int macroId, int no_args, bool start) { wxChar buf[100]; switch (macroId) { case ltCHAPTER: case ltCHAPTERSTAR: case ltCHAPTERHEADING: { if (!start) { sectionNo = 0; figureNo = 0; subsectionNo = 0; subsubsectionNo = 0; if (macroId != ltCHAPTERSTAR) chapterNo ++; SetCurrentOutputs(Contents, Chapters); long id1 = NewBlockId(); currentBlockId = NewBlockId(); startedSections = true; wxFprintf(Contents, _T("\\hy-%d{%ld}{"), hyBLOCK_SMALL_HEADING, id1); wxFprintf(Chapters, _T("\n\\hy-%d{%ld}{"), hyBLOCK_LARGE_VISIBLE_SECTION, currentBlockId); wxFprintf(Index, _T("%ld %ld\n"), id1, currentBlockId); OutputCurrentSection(); // Repeat section header wxFprintf(Contents, _T("}\n\n")); wxFprintf(Chapters, _T("}\n\n")); SetCurrentOutput(Chapters); wxChar *topicName = FindTopicName(GetNextChunk()); hyperLabels.Append(topicName, (wxObject *)currentBlockId); } break; } case ltSECTION: case ltSECTIONSTAR: case ltSECTIONHEADING: case ltGLOSS: { if (!start) { subsectionNo = 0; subsubsectionNo = 0; if (macroId != ltSECTIONSTAR) sectionNo ++; SetCurrentOutputs(Chapters, Sections); long id1 = NewBlockId(); currentBlockId = NewBlockId(); startedSections = true; if (DocumentStyle == LATEX_ARTICLE) wxFprintf(Contents, _T("\\hy-%d{%ld}{"), hyBLOCK_LARGE_HEADING, id1); else wxFprintf(Chapters, _T("\\hy-%d{%ld}{"), hyBLOCK_BOLD, id1); wxFprintf(Sections, _T("\n\\hy-%d{%ld}{"), hyBLOCK_LARGE_VISIBLE_SECTION, currentBlockId); wxFprintf(Index, _T("%ld %ld\n"), id1, currentBlockId); OutputCurrentSection(); // Repeat section header if (DocumentStyle == LATEX_ARTICLE) wxFprintf(Contents, _T("}\n\n")); else wxFprintf(Chapters, _T("}\n\n")); wxFprintf(Sections, _T("}\n\n")); SetCurrentOutput(Sections); wxChar *topicName = FindTopicName(GetNextChunk()); hyperLabels.Append(topicName, (wxObject *)currentBlockId); } break; } case ltSUBSECTION: case ltSUBSECTIONSTAR: case ltMEMBERSECTION: case ltFUNCTIONSECTION: { if (!start) { subsubsectionNo = 0; if (macroId != ltSUBSECTIONSTAR) subsectionNo ++; SetCurrentOutputs(Sections, Subsections); long id1 = NewBlockId(); currentBlockId = NewBlockId(); wxFprintf(Sections, _T("\\hy-%d{%ld}{"), hyBLOCK_BOLD, id1); wxFprintf(Subsections, _T("\n\\hy-%d{%ld}{"), hyBLOCK_LARGE_VISIBLE_SECTION, currentBlockId); wxFprintf(Index, _T("%ld %ld\n"), id1, currentBlockId); OutputCurrentSection(); // Repeat section header wxFprintf(Sections, _T("}\n\n")); wxFprintf(Subsections, _T("}\n\n")); SetCurrentOutput(Subsections); wxChar *topicName = FindTopicName(GetNextChunk()); hyperLabels.Append(topicName, (wxObject *)currentBlockId); } break; } case ltSUBSUBSECTION: case ltSUBSUBSECTIONSTAR: { if (!start) { if (macroId != ltSUBSUBSECTIONSTAR) subsubsectionNo ++; SetCurrentOutputs(Subsections, Subsubsections); long id1 = NewBlockId(); currentBlockId = NewBlockId(); wxFprintf(Subsections, _T("\\hy-%d{%ld}{"), hyBLOCK_BOLD, id1); wxFprintf(Subsubsections, _T("\n\\hy-%d{%ld}{"), hyBLOCK_LARGE_VISIBLE_SECTION, currentBlockId); wxFprintf(Index, _T("%ld %ld\n"), id1, currentBlockId); OutputCurrentSection(); // Repeat section header wxFprintf(Subsections, _T("}\n\n")); wxFprintf(Subsubsections, _T("}\n\n")); SetCurrentOutput(Subsubsections); wxChar *topicName = FindTopicName(GetNextChunk()); hyperLabels.Append(topicName, (wxObject *)currentBlockId); } break; } case ltFUNC: case ltPFUNC: case ltMEMBER: { SetCurrentOutput(Subsections); if (start) { long id = NewBlockId(); wxFprintf(Subsections, _T("\\hy-%d{%ld}{"), hyBLOCK_BOLD, id); } else wxFprintf(Subsections, _T("}")); break; } case ltVOID: // if (start) // TexOutput(_T("void"), true); break; case ltBACKSLASHCHAR: if (start) TexOutput(_T("\n"), true); break; case ltPAR: { if (start) { if (ParSkip > 0) TexOutput(_T("\n"), true); TexOutput(_T("\n"), true); } break; } case ltRMFAMILY: case ltTEXTRM: case ltRM: { break; } case ltTEXTBF: case ltBFSERIES: case ltBF: { if (start) { wxChar buf[100]; long id = NewBlockId(); wxSnprintf(buf, sizeof(buf), _T("\\hy-%d{%ld}{"), hyBLOCK_BOLD, id); TexOutput(buf); } else TexOutput(_T("}")); break; } case ltTEXTIT: case ltITSHAPE: case ltIT: { if (start) { wxChar buf[100]; long id = NewBlockId(); wxSnprintf(buf, sizeof(buf), _T("\\hy-%d{%ld}{"), hyBLOCK_ITALIC, id); TexOutput(buf); } else TexOutput(_T("}")); break; } case ltTTFAMILY: case ltTEXTTT: case ltTT: { if (start) { long id = NewBlockId(); wxSnprintf(buf, sizeof(buf), _T("\\hy-%d{%ld}{"), hyBLOCK_TELETYPE, id); TexOutput(buf); } else TexOutput(_T("}")); break; } case ltSMALL: { if (start) { wxSnprintf(buf, sizeof(buf), _T("\\hy-%d{%ld}{"), hyBLOCK_SMALL_TEXT, NewBlockId()); TexOutput(buf); } else TexOutput(_T("}")); break; } case ltTINY: { if (start) { wxSnprintf(buf, sizeof(buf), _T("\\hy-%d{%ld}{"), hyBLOCK_SMALL_TEXT, NewBlockId()); TexOutput(buf); } else TexOutput(_T("}")); break; } case ltNORMALSIZE: { if (start) { wxSnprintf(buf, sizeof(buf), _T("\\hy-%d{%ld}{"), hyBLOCK_NORMAL, NewBlockId()); TexOutput(buf); } else TexOutput(_T("}")); break; } case ltlarge: { if (start) { wxSnprintf(buf, sizeof(buf), _T("\\hy-%d{%ld}{"), hyBLOCK_SMALL_HEADING, NewBlockId()); TexOutput(buf); } else TexOutput(_T("}\n")); break; } case ltLARGE: { if (start) { wxSnprintf(buf, sizeof(buf), _T("\\hy-%d{%ld}{"), hyBLOCK_LARGE_HEADING, NewBlockId()); TexOutput(buf); } else TexOutput(_T("}\n")); break; } case ltITEMIZE: case ltENUMERATE: case ltDESCRIPTION: case ltTWOCOLLIST: { if (start) { // tabCount ++; // if (indentLevel > 0) // TexOutput(_T("\\par\\par\n")); indentLevel ++; int listType; if (macroId == ltENUMERATE) listType = LATEX_ENUMERATE; else if (macroId == ltITEMIZE) listType = LATEX_ITEMIZE; else listType = LATEX_DESCRIPTION; itemizeStack.Insert(new ItemizeStruc(listType)); } else { indentLevel --; if (itemizeStack.GetFirst()) { ItemizeStruc *struc = (ItemizeStruc *)itemizeStack.GetFirst()->GetData(); delete struc; delete itemizeStack.GetFirst(); } } break; } case ltITEM: { wxNode *node = itemizeStack.GetFirst(); if (node) { ItemizeStruc *struc = (ItemizeStruc *)node->GetData(); if (!start) { struc->currentItem += 1; wxChar indentBuf[30]; switch (struc->listType) { case LATEX_ENUMERATE: { wxSnprintf(indentBuf, sizeof(indentBuf), _T("\\hy-%d{%ld}{%d.} "), hyBLOCK_BOLD, NewBlockId(), struc->currentItem); TexOutput(indentBuf); break; } case LATEX_ITEMIZE: { wxSnprintf(indentBuf, sizeof(indentBuf), _T("\\hy-%d{%ld}{o} "), hyBLOCK_BOLD, NewBlockId()); TexOutput(indentBuf); break; } default: case LATEX_DESCRIPTION: { if (descriptionItemArg) { wxSnprintf(indentBuf, sizeof(indentBuf), _T("\\hy-%d{%ld}{"), hyBLOCK_BOLD, NewBlockId()); TexOutput(indentBuf); TraverseChildrenFromChunk(descriptionItemArg); TexOutput(_T("} ")); descriptionItemArg = NULL; } break; } } } } break; } case ltMAKETITLE: { if (start && DocumentTitle && DocumentAuthor) { wxSnprintf(buf, sizeof(buf), _T("\\hy-%d{%ld}{"), hyBLOCK_LARGE_HEADING, NewBlockId()); TexOutput(buf); TraverseChildrenFromChunk(DocumentTitle); TexOutput(_T("}\n\n")); wxSnprintf(buf, sizeof(buf), _T("\\hy-%d{%ld}{"), hyBLOCK_SMALL_HEADING, NewBlockId()); TexOutput(buf); TraverseChildrenFromChunk(DocumentAuthor); TexOutput(_T("}\n\n")); if (DocumentDate) { TraverseChildrenFromChunk(DocumentDate); TexOutput(_T("\n")); } } break; } case ltTABLEOFCONTENTS: { if (start) { FILE *fd = wxFopen(ContentsName, _T("r")); if (fd) { int ch = getc(fd); while (ch != EOF) { wxPutc(ch, Chapters); ch = getc(fd); } fclose(fd); } else { TexOutput(_T("RUN TEX2RTF AGAIN FOR CONTENTS PAGE\n")); OnInform(_T("Run Tex2RTF again to include contents page.")); } } break; } case ltHARDY: { if (start) TexOutput(_T("HARDY"), true); break; } case ltWXCLIPS: { if (start) TexOutput(_T("wxCLIPS"), true); break; } case ltVERBATIM: { if (start) { wxChar buf[100]; long id = NewBlockId(); wxSnprintf(buf, sizeof(buf), _T("\\hy-%d{%ld}{"), hyBLOCK_TELETYPE, id); TexOutput(buf); } else TexOutput(_T("}")); break; } case ltHRULE: { if (start) { TexOutput(_T("\n------------------------------------------------------------------"), true); } break; } case ltHLINE: { if (start) { TexOutput(_T("--------------------------------------------------------------------------------"), true); } break; } case ltSPECIALAMPERSAND: { if (start) { currentTab ++; int tabPos = (80/noColumns)*currentTab; PadToTab(tabPos); } break; } case ltTABULAR: case ltSUPERTABULAR: { if (start) { wxSnprintf(buf, sizeof(buf), _T("\\hy-%d{%ld}{"), hyBLOCK_TELETYPE, NewBlockId()); TexOutput(buf); } else TexOutput(_T("}")); break; } case ltNUMBEREDBIBITEM: { if (!start) TexOutput(_T("\n\n"), true); break; } case ltCAPTION: case ltCAPTIONSTAR: { if (start) { figureNo ++; wxChar figBuf[40]; if (DocumentStyle != LATEX_ARTICLE) wxSnprintf(figBuf, sizeof(figBuf), _T("Figure %d.%d: "), chapterNo, figureNo); else wxSnprintf(figBuf, sizeof(figBuf), _T("Figure %d: "), figureNo); TexOutput(figBuf); } else { wxChar *topicName = FindTopicName(GetNextChunk()); AddTexRef(topicName, NULL, NULL, ((DocumentStyle != LATEX_ARTICLE) ? chapterNo : figureNo), ((DocumentStyle != LATEX_ARTICLE) ? figureNo : 0)); } break; } default: { DefaultOnMacro(macroId, no_args, start); break; } } }