X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c22287afb2711c424df0ba00bf6fbe2af736b433..e0b15ca79530689420dff1928f15d2905a746b42:/utils/tex2rtf/src/tex2any.cpp diff --git a/utils/tex2rtf/src/tex2any.cpp b/utils/tex2rtf/src/tex2any.cpp index aa2f7ea449..348ef99882 100644 --- a/utils/tex2rtf/src/tex2any.cpp +++ b/utils/tex2rtf/src/tex2any.cpp @@ -2,7 +2,7 @@ // Name: tex2any.cpp // Purpose: Utilities for Latex conversion. // Author: Julian Smart -// Modified by: Wlodzimiez ABX Skiba 2003/2004 Unicode support +// Modified by: Wlodzimierz ABX Skiba 2003/2004 Unicode support // Ron Lee // Created: 01/01/99 // RCS-ID: $Id$ @@ -10,10 +10,6 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#pragma implementation -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -38,7 +34,7 @@ static inline wxChar* copystring(const wxChar* s) * Variables accessible from clients * */ - + TexChunk * DocumentTitle = NULL; TexChunk * DocumentAuthor = NULL; TexChunk * DocumentDate = NULL; @@ -109,15 +105,15 @@ int subsectionFont = 12; // largeFont1; int titleFont = LARGEFont3; int authorFont = LargeFont2; int mirrorMargins = true; -bool winHelp = false; // Output in Windows Help format if TRUE, linear otherwise +bool winHelp = false; // Output in Windows Help format if true, linear otherwise bool isInteractive = false; bool runTwice = false; int convertMode = TEX_RTF; -bool checkCurleyBraces = false; +bool checkCurlyBraces = false; bool checkSyntax = false; bool headerRule = false; bool footerRule = false; -bool compatibilityMode = false; // If TRUE, maximum Latex compatibility +bool compatibilityMode = false; // If true, maximum Latex compatibility // (Quality of RTF generation deteriorate) bool generateHPJ; // Generate WinHelp Help Project file wxChar *winHelpTitle = NULL; // Windows Help title @@ -151,7 +147,7 @@ wxChar *followedLinkColourString = NULL; bool combineSubSections = false; bool htmlWorkshopFiles = false; bool ignoreBadRefs = false; -wxChar *htmlFaceName = NULL; +wxChar *htmlFaceName = NULL; extern int passNumber; @@ -181,7 +177,7 @@ wxChar *UpNameString = copystring(_T("Up")); * Section numbering * */ - + int chapterNo = 0; int sectionNo = 0; int subsectionNo = 0; @@ -193,7 +189,7 @@ int tableNo = 0; * Other variables * */ - + FILE *CurrentOutput1 = NULL; FILE *CurrentOutput2 = NULL; FILE *Inputs[15]; @@ -204,12 +200,12 @@ int CurrentInputIndex = 0; wxChar *TexFileRoot = NULL; wxChar *TexBibName = NULL; // Bibliography output file name wxChar *TexTmpBibName = NULL; // Temporary bibliography output file name -bool isSync = false; // If TRUE, should not yield to other processes. -bool stopRunning = false; // If TRUE, should abort. +bool isSync = false; // If true, should not yield to other processes. +bool stopRunning = false; // If true, should abort. static int currentColumn = 0; wxChar *currentArgData = NULL; -bool haveArgData = false; // If TRUE, we're simulating the data. +bool haveArgData = false; // If true, we're simulating the data. TexChunk *currentArgument = NULL; TexChunk *nextChunk = NULL; bool isArgOptional = false; @@ -227,7 +223,7 @@ TexMacroDef *VerbatimMacroDef = NULL; TexRef::TexRef(const wxChar *label, const wxChar *file, - const wxChar *section, const wxChar *sectionN) + const wxChar *section, const wxChar *sectionN) { refLabel = copystring(label); refFile = file ? copystring(file) : (wxChar*) NULL; @@ -302,7 +298,7 @@ void ForbidWarning(TexMacroDef *def) break; } } - + TexMacroDef *MatchMacro(wxChar *buffer, int *pos, wxChar **env, bool *parseToBrace) { *parseToBrace = true; @@ -359,11 +355,11 @@ TexMacroDef *MatchMacro(wxChar *buffer, int *pos, wxChar **env, bool *parseToBra macroBuf[j-i] = 0; def = (TexMacroDef *)MacroDefs.Get(macroBuf); } - + if (def) { i = j; - + // We want to check whether this is a space-consuming macro // (e.g. {\bf word}) // No brace, e.g. \input thing.tex instead of \input{thing}; @@ -428,9 +424,9 @@ bool readInVerbatim = false; // Within a verbatim, but not nec. verbatiminput // detection of \verb yet. // #define CHECK_BRACES 1 -unsigned long leftCurley = 0; -unsigned long rightCurley = 0; -static wxString currentFileName = _T(""); +unsigned long leftCurly = 0; +unsigned long rightCurly = 0; +static wxString currentFileName = wxEmptyString; bool read_a_line(wxChar *buf) { @@ -443,7 +439,7 @@ bool read_a_line(wxChar *buf) int ch = -2; unsigned long bufIndex = 0; buf[0] = 0; - char lastChar = _T(' '); + int lastChar; while (ch != EOF && ch != 10) { @@ -463,22 +459,22 @@ bool read_a_line(wxChar *buf) lastChar = ch; ch = getc(Inputs[CurrentInputIndex]); - if (checkCurleyBraces) + if (checkCurlyBraces) { if (ch == '{' && !readInVerbatim && lastChar != _T('\\')) - leftCurley++; + leftCurly++; if (ch == '}' && !readInVerbatim && lastChar != _T('\\')) { - rightCurley++; - if (rightCurley > leftCurley) + rightCurly++; + if (rightCurly > leftCurly) { wxString errBuf; - errBuf.Printf(_T("An extra right Curley brace ('}') was detected at line %lu inside file %s"), LineNumbers[CurrentInputIndex], (const wxChar*) currentFileName.c_str()); + errBuf.Printf(_T("An extra right Curly brace ('}') was detected at line %lu inside file %s"), LineNumbers[CurrentInputIndex], (const wxChar*) currentFileName.c_str()); OnError((wxChar *)errBuf.c_str()); - // Reduce the count of right Curley braces, so the mismatched count + // Reduce the count of right Curly braces, so the mismatched count // isn't reported on every line that has a '}' after the first mismatch - rightCurley--; + rightCurly--; } } } @@ -492,7 +488,7 @@ bool read_a_line(wxChar *buf) if ((ch1 == 10) || (ch1 == 13)) { // Eliminate newline (10) following DOS linefeed - if (ch1 == 13) + if (ch1 == 13) getc(Inputs[CurrentInputIndex]); buf[bufIndex] = 0; IncrementLineNumber(); @@ -522,7 +518,7 @@ bool read_a_line(wxChar *buf) return false; } - buf[bufIndex] = ch; + buf[bufIndex] = (wxChar)ch; bufIndex ++; } } @@ -537,7 +533,7 @@ bool read_a_line(wxChar *buf) case 0xfc: // ü case 0xd6: // Ö case 0xc4: // Ä - case 0xdc: // Ü + case 0xdc: // Ü if (bufIndex+5 >= MAX_LINE_BUFFER_SIZE) { wxString errBuf; @@ -556,11 +552,11 @@ bool read_a_line(wxChar *buf) case 0xfc:buf[bufIndex++]='u';break; // ü case 0xd6:buf[bufIndex++]='O';break; // Ö case 0xc4:buf[bufIndex++]='A';break; // Ä - case 0xdc:buf[bufIndex++]='U';break; // Ü - } + case 0xdc:buf[bufIndex++]='U';break; // Ü + } buf[bufIndex++]='}'; break; - case 0xdf: // ß + case 0xdf: // ß if (bufIndex+5 >= MAX_LINE_BUFFER_SIZE) { wxString errBuf; @@ -574,7 +570,7 @@ bool read_a_line(wxChar *buf) buf[bufIndex++]='s'; buf[bufIndex++]='\\'; buf[bufIndex++]='/'; - break; + break; default: if (bufIndex >= MAX_LINE_BUFFER_SIZE) { @@ -584,11 +580,11 @@ bool read_a_line(wxChar *buf) OnError((wxChar *)errBuf.c_str()); return false; } - // If the current character read in is a '_', we need to check + // If the current character read in is a '_', we need to check // whether there should be a '\' before it or not if (ch != '_') { - buf[bufIndex++] = ch; + buf[bufIndex++] = (wxChar)ch; break; } @@ -625,7 +621,7 @@ bool read_a_line(wxChar *buf) } } } - buf[bufIndex++] = ch; + buf[bufIndex++] = (wxChar)ch; break; } // switch } // else @@ -635,21 +631,21 @@ bool read_a_line(wxChar *buf) buf[bufIndex] = 0; fclose(Inputs[CurrentInputIndex]); Inputs[CurrentInputIndex] = NULL; - if (CurrentInputIndex > 0) + if (CurrentInputIndex > 0) ch = ' '; // No real end of file CurrentInputIndex --; - if (checkCurleyBraces) + if (checkCurlyBraces) { - if (leftCurley != rightCurley) + if (leftCurly != rightCurly) { wxString errBuf; - errBuf.Printf(_T("Curley braces do not match inside file %s\n%lu opens, %lu closes"), - (const wxChar*) currentFileName.c_str(),leftCurley,rightCurley); + errBuf.Printf(_T("Curly braces do not match inside file %s\n%lu opens, %lu closes"), + (const wxChar*) currentFileName.c_str(),leftCurly,rightCurly); OnError((wxChar *)errBuf.c_str()); } - leftCurley = 0; - rightCurley = 0; + leftCurly = 0; + rightCurly = 0; } if (readingVerbatim) @@ -687,13 +683,13 @@ bool read_a_line(wxChar *buf) j -= 5; buf[j] = 0; } - + if (buf[j-1] == '}') buf[j-1] = 0; // Ignore final brace wxString actualFile = TexPathList.FindValidPath(fileName); currentFileName = actualFile; - if (actualFile == _T("")) + if (actualFile.empty()) { wxString errBuf; errBuf.Printf(_T("Could not find file: %s"),fileName); @@ -753,7 +749,7 @@ bool read_a_line(wxChar *buf) buf[j] = 0; } - if (buf[j-1] == _T('}')) + if (buf[j-1] == _T('}')) buf[j-1] = 0; // Ignore final brace // Remove backslashes from name @@ -767,7 +763,7 @@ bool read_a_line(wxChar *buf) return read_a_line(buf); wxString actualFile = TexPathList.FindValidPath(fileNameStr); - if (actualFile == _T("")) + if (actualFile.empty()) { wxChar buf2[400]; wxSnprintf(buf2, sizeof(buf2), _T("%s.tex"), fileNameStr.c_str()); @@ -775,7 +771,7 @@ bool read_a_line(wxChar *buf) } currentFileName = actualFile; - if (actualFile == _T("")) + if (actualFile.empty()) { wxString errBuf; errBuf.Printf(_T("Could not find file: %s"),fileName); @@ -813,7 +809,7 @@ bool read_a_line(wxChar *buf) if (checkSyntax) { wxString bufStr = buf; - for (int index=0; syntaxTokens[index] != wxEmptyString; index++) + for (int index=0; !syntaxTokens[index].empty(); index++) { size_t pos = bufStr.find(syntaxTokens[index]); if (pos != wxString::npos && pos != 0) @@ -849,13 +845,13 @@ bool read_a_line(wxChar *buf) wxStrncmp(buf, _T("\\end{toocomplex}"), 16) == 0) readInVerbatim = false; - if (checkCurleyBraces) + if (checkCurlyBraces) { - if (ch == EOF && leftCurley != rightCurley) + if (ch == EOF && leftCurly != rightCurly) { wxString errBuf; - errBuf.Printf(_T("Curley braces do not match inside file %s\n%lu opens, %lu closes"), - (const wxChar*) currentFileName.c_str(),leftCurley,rightCurley); + errBuf.Printf(_T("Curly braces do not match inside file %s\n%lu opens, %lu closes"), + (const wxChar*) currentFileName.c_str(),leftCurly,rightCurly); OnError((wxChar *)errBuf.c_str()); } } @@ -901,7 +897,7 @@ bool ParseNewCommand(wxChar *buffer, int *pos) int braceCount = 0; while (!end) { - char ch = buffer[*pos]; + wxChar ch = buffer[*pos]; if (ch == _T('{')) braceCount ++; else if (ch == _T('}')) @@ -942,7 +938,7 @@ void MacroError(wxChar *buffer) wxChar macroBuf[200]; macroBuf[0] = '\\'; int i = 1; - char ch; + wxChar ch; while (((ch = buffer[i-1]) != '\n') && (ch != 0)) { macroBuf[i] = ch; @@ -967,7 +963,7 @@ void MacroError(wxChar *buffer) * Parse an argument. * 'environment' specifies the name of the macro IFF if we're looking for the end * of an environment, e.g. \end{itemize}. Otherwise it's NULL. - * 'parseToBrace' is TRUE if the argument should extend to the next right brace, + * 'parseToBrace' is true if the argument should extend to the next right brace, * e.g. in {\bf an argument} as opposed to \vskip 30pt * */ @@ -975,7 +971,7 @@ int ParseArg(TexChunk *thisArg, wxList& children, wxChar *buffer, int pos, wxCha { Tex2RTFYield(); if (stopRunning) return pos; - + bool eof = false; BigBuffer[0] = 0; int buf_ptr = 0; @@ -1005,7 +1001,7 @@ int ParseArg(TexChunk *thisArg, wxList& children, wxChar *buffer, int pos, wxCha } } */ - + // If not parsing to brace, just read the next word // (e.g. \vskip 20pt) if (!parseToBrace) @@ -1014,7 +1010,7 @@ int ParseArg(TexChunk *thisArg, wxList& children, wxChar *buffer, int pos, wxCha while (!eof && ch != 13 && ch != 32 && ch != 10 && ch != 0 && ch != '{') { - BigBuffer[buf_ptr] = ch; + BigBuffer[buf_ptr] = (wxChar)ch; buf_ptr ++; pos ++; ch = buffer[pos]; @@ -1093,15 +1089,15 @@ int ParseArg(TexChunk *thisArg, wxList& children, wxChar *buffer, int pos, wxCha } } - char ch = buffer[pos]; + wxChar wxCh = buffer[pos]; // End of optional argument -- pretend it's right brace for simplicity - if (thisArg->optional && (ch == ']')) - ch = '}'; + if (thisArg->optional && (wxCh == _T(']'))) + wxCh = _T('}'); - switch (ch) + switch (wxCh) { case 0: - case '}': // End of argument + case _T('}'): // End of argument { if (buf_ptr > 0) { @@ -1110,10 +1106,10 @@ int ParseArg(TexChunk *thisArg, wxList& children, wxChar *buffer, int pos, wxCha chunk->value = copystring(BigBuffer); children.Append((wxObject *)chunk); } - if (ch == '}') pos ++; + if (wxCh == _T('}')) pos ++; return pos; } - case '\\': + case _T('\\'): { if (buf_ptr > 0) // Finish off the string we've read so far { @@ -1124,7 +1120,7 @@ int ParseArg(TexChunk *thisArg, wxList& children, wxChar *buffer, int pos, wxCha children.Append((wxObject *)chunk); } pos ++; - + // Try matching \end{environment} if (environment && FindEndEnvironment(buffer, &pos, environment)) { @@ -1154,8 +1150,8 @@ int ParseArg(TexChunk *thisArg, wxList& children, wxChar *buffer, int pos, wxCha bool end = false; while (!end) { - int ch = buffer[pos]; - if (ch == '}') + wxChar ch = buffer[pos]; + if (ch == _T('}')) { noBraces --; if (noBraces == 0) @@ -1165,26 +1161,26 @@ int ParseArg(TexChunk *thisArg, wxList& children, wxChar *buffer, int pos, wxCha } else { - wxTex2RTFBuffer[i] = '}'; + wxTex2RTFBuffer[i] = _T('}'); i ++; } pos ++; } - else if (ch == '{') + else if (ch == _T('{')) { - wxTex2RTFBuffer[i] = '{'; + wxTex2RTFBuffer[i] = _T('{'); i ++; pos ++; } - else if (ch == '\\' && buffer[pos+1] == '}') + else if (ch == _T('\\') && buffer[pos+1] == _T('}')) { - wxTex2RTFBuffer[i] = '}'; + wxTex2RTFBuffer[i] = _T('}'); pos += 2; i++; } - else if (ch == '\\' && buffer[pos+1] == '{') + else if (ch == _T('\\') && buffer[pos+1] == _T('{')) { - wxTex2RTFBuffer[i] = '{'; + wxTex2RTFBuffer[i] = _T('{'); pos += 2; i++; } @@ -1218,11 +1214,11 @@ int ParseArg(TexChunk *thisArg, wxList& children, wxChar *buffer, int pos, wxCha else if (wxStrncmp(buffer+pos, _T("verb"), 4) == 0) { pos += 4; - if (buffer[pos] == '*') + if (buffer[pos] == _T('*')) pos ++; - // Find the delimiter character - int ch = buffer[pos]; + // Find the delimiter character + wxChar ch = buffer[pos]; pos ++; // Now at start of verbatim text int j = pos; @@ -1256,8 +1252,8 @@ int ParseArg(TexChunk *thisArg, wxList& children, wxChar *buffer, int pos, wxCha children.Append((wxObject *)chunk); } - else - { + else + { wxChar *env = NULL; bool tmpParseToBrace = true; TexMacroDef *def = MatchMacro(buffer, &pos, &env, &tmpParseToBrace); @@ -1297,7 +1293,7 @@ int ParseArg(TexChunk *thisArg, wxList& children, wxChar *buffer, int pos, wxCha wxStrcat(macroBuf, _T("}")); ParseArg(thisArg, children, macroBuf, 0, NULL, true, chunk); } - + // delete chunk; // Might delete children } } @@ -1310,10 +1306,10 @@ int ParseArg(TexChunk *thisArg, wxList& children, wxChar *buffer, int pos, wxCha } // Parse constructs like {\bf thing} as if they were // \bf{thing} - case '{': + case _T('{'): { pos ++; - if (buffer[pos] == '\\') + if (buffer[pos] == _T('\\')) { if (buf_ptr > 0) { @@ -1353,7 +1349,7 @@ int ParseArg(TexChunk *thisArg, wxList& children, wxChar *buffer, int pos, wxCha wxStrcat(macroBuf, _T("}")); ParseArg(thisArg, children, macroBuf, 0, NULL, true, chunk); } - + // delete chunk; // Might delete children } } @@ -1363,7 +1359,7 @@ int ParseArg(TexChunk *thisArg, wxList& children, wxChar *buffer, int pos, wxCha } } else - { + { /* * If all else fails, we assume that we have * a pair of braces on their own, so return a `dummy' macro @@ -1396,10 +1392,10 @@ int ParseArg(TexChunk *thisArg, wxList& children, wxChar *buffer, int pos, wxCha arg->macroId = chunk->macroId; pos = ParseArg(arg, arg->children, buffer, pos, NULL, true, customMacroArgs); - } + } break; } - case '$': + case _T('$'): { if (buf_ptr > 0) { @@ -1412,7 +1408,7 @@ int ParseArg(TexChunk *thisArg, wxList& children, wxChar *buffer, int pos, wxCha pos ++; - if (buffer[pos] == '$') + if (buffer[pos] == _T('$')) { TexChunk *chunk = new TexChunk(CHUNK_TYPE_MACRO); chunk->no_args = 0; @@ -1431,7 +1427,7 @@ int ParseArg(TexChunk *thisArg, wxList& children, wxChar *buffer, int pos, wxCha } break; } - case '~': + case _T('~'): { if (buf_ptr > 0) { @@ -1450,7 +1446,7 @@ int ParseArg(TexChunk *thisArg, wxList& children, wxChar *buffer, int pos, wxCha children.Append((wxObject *)chunk); break; } - case '#': // Either treat as a special TeX character or as a macro arg + case _T('#'): // Either treat as a special TeX character or as a macro arg { if (buf_ptr > 0) { @@ -1486,12 +1482,12 @@ int ParseArg(TexChunk *thisArg, wxList& children, wxChar *buffer, int pos, wxCha } break; } - case '&': + case _T('&'): { // Remove white space before and after the ampersand, // since this is probably a table column separator with // some convenient -- but useless -- white space in the text. - while ((buf_ptr > 0) && ((BigBuffer[buf_ptr-1] == ' ') || (BigBuffer[buf_ptr-1] == 9))) + while ((buf_ptr > 0) && ((BigBuffer[buf_ptr-1] == _T(' ')) || (BigBuffer[buf_ptr-1] == 9))) buf_ptr --; if (buf_ptr > 0) @@ -1505,7 +1501,7 @@ int ParseArg(TexChunk *thisArg, wxList& children, wxChar *buffer, int pos, wxCha pos ++; - while (buffer[pos] == ' ' || buffer[pos] == 9) + while (buffer[pos] == _T(' ') || buffer[pos] == 9) pos ++; TexChunk *chunk = new TexChunk(CHUNK_TYPE_MACRO); @@ -1516,13 +1512,13 @@ int ParseArg(TexChunk *thisArg, wxList& children, wxChar *buffer, int pos, wxCha break; } // Eliminate end-of-line comment - case '%': + case _T('%'): { - ch = buffer[pos]; - while (ch != 10 && ch != 13 && ch != 0) + wxCh = buffer[pos]; + while (wxCh != 10 && wxCh != 13 && wxCh != 0) { pos ++; - ch = buffer[pos]; + wxCh = buffer[pos]; } if (buffer[pos] == 10 || buffer[pos] == 13) { @@ -1534,7 +1530,7 @@ int ParseArg(TexChunk *thisArg, wxList& children, wxChar *buffer, int pos, wxCha // Eliminate tab case 9: { - BigBuffer[buf_ptr] = ' '; + BigBuffer[buf_ptr] = _T(' '); BigBuffer[buf_ptr+1] = 0; buf_ptr ++; pos ++; @@ -1542,7 +1538,7 @@ int ParseArg(TexChunk *thisArg, wxList& children, wxChar *buffer, int pos, wxCha } default: { - BigBuffer[buf_ptr] = ch; + BigBuffer[buf_ptr] = wxCh; BigBuffer[buf_ptr+1] = 0; buf_ptr ++; pos ++; @@ -1557,7 +1553,7 @@ int ParseArg(TexChunk *thisArg, wxList& children, wxChar *buffer, int pos, wxCha * Consume as many arguments as the macro definition specifies * */ - + int ParseMacroBody(const wxChar *WXUNUSED(macro_name), TexChunk *parent, int no_args, wxChar *buffer, int pos, wxChar *environment, bool parseToBrace, @@ -1663,34 +1659,34 @@ int ParseMacroBody(const wxChar *WXUNUSED(macro_name), TexChunk *parent, return pos; } -bool TexLoadFile(wxChar *filename) +bool TexLoadFile(const wxString& filename) { - static wxChar *line_buffer; - stopRunning = false; - wxStrcpy(TexFileRoot, filename); - StripExtension(TexFileRoot); - wxSnprintf(TexBibName, 300, _T("%s.bb"), TexFileRoot); - wxSnprintf(TexTmpBibName, 300, _T("%s.bb1"), TexFileRoot); - - TexPathList.EnsureFileAccessible(filename); - - if (line_buffer) - delete line_buffer; - - line_buffer = new wxChar[MAX_LINE_BUFFER_SIZE]; - - Inputs[0] = wxFopen(filename, _T("r")); - LineNumbers[0] = 1; - FileNames[0] = copystring(filename); - if (Inputs[0]) - { - read_a_line(line_buffer); - ParseMacroBody(_T("toplevel"), TopLevel, 1, line_buffer, 0, NULL, true); - if (Inputs[0]) fclose(Inputs[0]); - return true; - } + static wxChar *line_buffer; + stopRunning = false; + wxStrcpy(TexFileRoot, filename); + StripExtension(TexFileRoot); + wxSnprintf(TexBibName, 300, _T("%s.bb"), TexFileRoot); + wxSnprintf(TexTmpBibName, 300, _T("%s.bb1"), TexFileRoot); + + TexPathList.EnsureFileAccessible(filename); - return false; + if (line_buffer) + delete line_buffer; + + line_buffer = new wxChar[MAX_LINE_BUFFER_SIZE]; + + Inputs[0] = wxFopen(filename, _T("r")); + LineNumbers[0] = 1; + FileNames[0] = copystring(filename); + if (Inputs[0]) + { + read_a_line(line_buffer); + ParseMacroBody(_T("toplevel"), TopLevel, 1, line_buffer, 0, NULL, true); + if (Inputs[0]) fclose(Inputs[0]); + return true; + } + + return false; } TexMacroDef::TexMacroDef(int the_id, const wxChar *the_name, int n, bool ig, bool forbidLevel) @@ -1725,7 +1721,7 @@ TexChunk::TexChunk(TexChunk& toCopy) no_args = toCopy.no_args; argn = toCopy.argn; macroId = toCopy.macroId; - + // if (toCopy.name) // name = copystring(toCopy.name); // else @@ -1736,7 +1732,7 @@ TexChunk::TexChunk(TexChunk& toCopy) value = copystring(toCopy.value); else value = NULL; - + optional = toCopy.optional; wxNode *node = toCopy.children.GetFirst(); while (node) @@ -1776,7 +1772,7 @@ int GetNoArgs(void) // Number of args for this macro * only!) * */ - + void GetArgData1(TexChunk *chunk) { switch (chunk->type) @@ -2066,7 +2062,7 @@ void TexCleanUp(void) refNode = TexReferences.Next(); } TexReferences.Clear(); - + wxNode* bibNode = BibList.GetFirst(); while (bibNode) { @@ -2506,7 +2502,7 @@ void DefineDefaultMacros(void) AddMacroDef(ltUPSHAPE, _T("upshape"), 1); AddMacroDef(ltURLREF, _T("urlref"), 2); AddMacroDef(ltUSEPACKAGE, _T("usepackage"), 1); - + AddMacroDef(ltVAREPSILON, _T("varepsilon"), 0); AddMacroDef(ltVARPHI, _T("varphi"), 0); AddMacroDef(ltVARPI, _T("varpi"), 0); @@ -2570,7 +2566,7 @@ void DefineDefaultMacros(void) * Default behaviour, should be called by client if can't match locally. * */ - + // Called on start/end of macro examination void DefaultOnMacro(int macroId, int no_args, bool start) { @@ -2620,11 +2616,21 @@ void DefaultOnMacro(int macroId, int no_args, bool start) case ltCINSERT: if (start) - TexOutput(_T("<<"), true); + { + if (convertMode == TEX_HTML) + TexOutput(_T("<<")); + else + TexOutput(_T("<<"), true); + } break; case ltCEXTRACT: if (start) - TexOutput(_T(">>"), true); + { + if (convertMode == TEX_HTML) + TexOutput(_T(">>")); + else + TexOutput(_T(">>"), true); + } break; case ltDESTRUCT: if (start) @@ -2691,7 +2697,7 @@ void DefaultOnMacro(int macroId, int no_args, bool start) TexOutput(_T("(r)"), true); break; case ltBACKSLASH: - if (start) + if (start) TexOutput(_T("\\"), true); break; case ltLDOTS: @@ -2713,7 +2719,8 @@ void DefaultOnMacro(int macroId, int no_args, bool start) break; case ltPOUNDS: if (start) - TexOutput(_T("£"), true); + // FIXME: this is valid only if the output is iso-8859-1 + TexOutput(wxString::FromAscii("£"), true); break; case ltSPECIALDOUBLEDOLLAR: // Interpret as center OnMacro(ltCENTER, no_args, start); @@ -2858,10 +2865,22 @@ void DefaultOnMacro(int macroId, int no_args, bool start) // Binary operation symbols case ltLE: case ltLEQ: - if (start) TexOutput(_T("<=")); + if (start) + { + if (convertMode == TEX_HTML) + TexOutput(_T("<=")); + else + TexOutput(_T("<=")); + } break; case ltLL: - if (start) TexOutput(_T("<<")); + if (start) + { + if (convertMode == TEX_HTML) + TexOutput(_T("<<")); + else + TexOutput(_T("<<")); + } break; case ltSUBSET: if (start) TexOutput(_T("SUBSET")); @@ -2880,10 +2899,24 @@ void DefaultOnMacro(int macroId, int no_args, bool start) break; case ltGE: case ltGEQ: - if (start) TexOutput(_T(">=")); + { + if (start) + { + if (convertMode == TEX_HTML) + TexOutput(_T(">=")); + else + TexOutput(_T(">=")); + } break; + } case ltGG: - if (start) TexOutput(_T(">>")); + if (start) + { + if (convertMode == TEX_HTML) + TexOutput(_T(">>")); + else + TexOutput(_T(">>")); + } break; case ltSUPSET: if (start) TexOutput(_T("SUPSET")); @@ -2965,22 +2998,58 @@ void DefaultOnMacro(int macroId, int no_args, bool start) // Arrows case ltLEFTARROW: - if (start) TexOutput(_T("<--")); + if (start) + { + if (convertMode == TEX_HTML) + TexOutput(_T("<--")); + else + TexOutput(_T("<--")); + } break; case ltLEFTARROW2: - if (start) TexOutput(_T("<==")); + if (start) + { + if (convertMode == TEX_HTML) + TexOutput(_T("<==")); + else + TexOutput(_T("<==")); + } break; case ltRIGHTARROW: - if (start) TexOutput(_T("-->")); + if (start) + { + if (convertMode == TEX_HTML) + TexOutput(_T("-->")); + else + TexOutput(_T("-->")); + } break; case ltRIGHTARROW2: - if (start) TexOutput(_T("==>")); + if (start) + { + if (convertMode == TEX_HTML) + TexOutput(_T("==>")); + else + TexOutput(_T("==>")); + } break; case ltLEFTRIGHTARROW: - if (start) TexOutput(_T("<-->")); + if (start) + { + if (convertMode == TEX_HTML) + TexOutput(_T("<-->")); + else + TexOutput(_T("<-->")); + } break; case ltLEFTRIGHTARROW2: - if (start) TexOutput(_T("<==>")); + if (start) + { + if (convertMode == TEX_HTML) + TexOutput(_T("<==>")); + else + TexOutput(_T("<==>")); + } break; case ltUPARROW: if (start) TexOutput(_T("UPARROW")); @@ -3174,7 +3243,7 @@ bool DefaultOnArgument(int macroId, int arg_no, bool start) else { wxString informBuf; - informBuf.Printf(_T("Warning: unresolved reference '%s'"), refName); + informBuf.Printf(_T("Warning: unresolved reference '%s'"), refName); OnInform((wxChar *)informBuf.c_str()); } } @@ -3222,7 +3291,7 @@ bool DefaultOnArgument(int macroId, int arg_no, bool start) DocumentStyle = LATEX_LETTER; else if (wxStrncmp(DocumentStyleString, _T("slides"), 6) == 0) DocumentStyle = LATEX_SLIDES; - + if (StringMatch(_T("10"), DocumentStyleString)) SetFontSizes(10); else if (StringMatch(_T("11"), DocumentStyleString)) @@ -3436,12 +3505,12 @@ bool DefaultOnArgument(int macroId, int arg_no, bool start) if (fd) { ch = getc(fd); - smallBuf[0] = ch; + smallBuf[0] = (wxChar)ch; while (ch != EOF) { TexOutput(smallBuf); ch = getc(fd); - smallBuf[0] = ch; + smallBuf[0] = (wxChar)ch; } fclose(fd); } @@ -3459,12 +3528,12 @@ bool DefaultOnArgument(int macroId, int arg_no, bool start) wxChar fileBuf[300]; wxStrcpy(fileBuf, bibFile); wxString actualFile = TexPathList.FindValidPath(fileBuf); - if (actualFile == _T("")) + if (actualFile.empty()) { wxStrcat(fileBuf, _T(".bib")); actualFile = TexPathList.FindValidPath(fileBuf); } - if (actualFile != _T("")) + if (!actualFile.empty()) { if (!ReadBib((wxChar*) (const wxChar*) actualFile)) { @@ -3515,7 +3584,7 @@ bool DefaultOnArgument(int macroId, int arg_no, bool start) wxChar *s1 = copystring(s); int i; for (i = 0; i < (int)wxStrlen(s); i++) - s1[i] = wxToupper(s[i]); + s1[i] = (wxChar)wxToupper(s[i]); TexOutput(s1); delete[] s1; return false; @@ -3535,7 +3604,7 @@ bool DefaultOnArgument(int macroId, int arg_no, bool start) wxChar *s1 = copystring(s); int i; for (i = 0; i < (int)wxStrlen(s); i++) - s1[i] = wxTolower(s[i]); + s1[i] = (wxChar)wxTolower(s[i]); TexOutput(s1); delete[] s1; return false; @@ -3555,7 +3624,7 @@ bool DefaultOnArgument(int macroId, int arg_no, bool start) wxChar *s1 = copystring(s); int i; for (i = 0; i < (int)wxStrlen(s); i++) - s1[i] = wxToupper(s[i]); + s1[i] = (wxChar)wxToupper(s[i]); TexOutput(s1); delete[] s1; return false; @@ -3713,4 +3782,3 @@ bool DefaultOnArgument(int macroId, int arg_no, bool start) } return true; } -