// 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$
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#ifdef __GNUG__
-#pragma implementation
-#endif
-
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
* Variables accessible from clients
*
*/
-
+
TexChunk * DocumentTitle = NULL;
TexChunk * DocumentAuthor = NULL;
TexChunk * DocumentDate = NULL;
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;
* Section numbering
*
*/
-
+
int chapterNo = 0;
int sectionNo = 0;
int subsectionNo = 0;
* Other variables
*
*/
-
+
FILE *CurrentOutput1 = NULL;
FILE *CurrentOutput2 = NULL;
FILE *Inputs[15];
break;
}
}
-
+
TexMacroDef *MatchMacro(wxChar *buffer, int *pos, wxChar **env, bool *parseToBrace)
{
*parseToBrace = true;
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};
// 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)
{
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--;
}
}
}
if ((ch1 == 10) || (ch1 == 13))
{
// Eliminate newline (10) following DOS linefeed
- if (ch1 == 13)
+ if (ch1 == 13)
getc(Inputs[CurrentInputIndex]);
buf[bufIndex] = 0;
IncrementLineNumber();
return false;
}
- buf[bufIndex] = ch;
+ buf[bufIndex] = (wxChar)ch;
bufIndex ++;
}
}
case 0xfc: // ü
case 0xd6: // Ö
case 0xc4: // Ä
- case 0xdc: // Ü
+ case 0xdc: // Ü
if (bufIndex+5 >= MAX_LINE_BUFFER_SIZE)
{
wxString errBuf;
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;
buf[bufIndex++]='s';
buf[bufIndex++]='\\';
buf[bufIndex++]='/';
- break;
+ break;
default:
if (bufIndex >= MAX_LINE_BUFFER_SIZE)
{
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;
}
}
}
}
- buf[bufIndex++] = ch;
+ buf[bufIndex++] = (wxChar)ch;
break;
} // switch
} // else
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)
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);
buf[j] = 0;
}
- if (buf[j-1] == _T('}'))
+ if (buf[j-1] == _T('}'))
buf[j-1] = 0; // Ignore final brace
// Remove backslashes from name
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());
}
currentFileName = actualFile;
- if (actualFile == _T(""))
+ if (actualFile.empty())
{
wxString errBuf;
errBuf.Printf(_T("Could not find file: %s"),fileName);
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)
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());
}
}
int braceCount = 0;
while (!end)
{
- char ch = buffer[*pos];
+ wxChar ch = buffer[*pos];
if (ch == _T('{'))
braceCount ++;
else if (ch == _T('}'))
wxChar macroBuf[200];
macroBuf[0] = '\\';
int i = 1;
- char ch;
+ wxChar ch;
while (((ch = buffer[i-1]) != '\n') && (ch != 0))
{
macroBuf[i] = ch;
{
Tex2RTFYield();
if (stopRunning) return pos;
-
+
bool eof = false;
BigBuffer[0] = 0;
int buf_ptr = 0;
}
}
*/
-
+
// If not parsing to brace, just read the next word
// (e.g. \vskip 20pt)
if (!parseToBrace)
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];
}
}
- 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)
{
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
{
children.Append((wxObject *)chunk);
}
pos ++;
-
+
// Try matching \end{environment}
if (environment && FindEndEnvironment(buffer, &pos, environment))
{
bool end = false;
while (!end)
{
- int ch = buffer[pos];
- if (ch == '}')
+ wxChar ch = buffer[pos];
+ if (ch == _T('}'))
{
noBraces --;
if (noBraces == 0)
}
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++;
}
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;
children.Append((wxObject *)chunk);
}
- else
- {
+ else
+ {
wxChar *env = NULL;
bool tmpParseToBrace = true;
TexMacroDef *def = MatchMacro(buffer, &pos, &env, &tmpParseToBrace);
wxStrcat(macroBuf, _T("}"));
ParseArg(thisArg, children, macroBuf, 0, NULL, true, chunk);
}
-
+
// delete chunk; // Might delete children
}
}
}
// 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)
{
wxStrcat(macroBuf, _T("}"));
ParseArg(thisArg, children, macroBuf, 0, NULL, true, chunk);
}
-
+
// delete chunk; // Might delete children
}
}
}
}
else
- {
+ {
/*
* If all else fails, we assume that we have
* a pair of braces on their own, so return a `dummy' macro
arg->macroId = chunk->macroId;
pos = ParseArg(arg, arg->children, buffer, pos, NULL, true, customMacroArgs);
- }
+ }
break;
}
- case '$':
+ case _T('$'):
{
if (buf_ptr > 0)
{
pos ++;
- if (buffer[pos] == '$')
+ if (buffer[pos] == _T('$'))
{
TexChunk *chunk = new TexChunk(CHUNK_TYPE_MACRO);
chunk->no_args = 0;
}
break;
}
- case '~':
+ case _T('~'):
{
if (buf_ptr > 0)
{
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)
{
}
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)
pos ++;
- while (buffer[pos] == ' ' || buffer[pos] == 9)
+ while (buffer[pos] == _T(' ') || buffer[pos] == 9)
pos ++;
TexChunk *chunk = new TexChunk(CHUNK_TYPE_MACRO);
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)
{
// Eliminate tab
case 9:
{
- BigBuffer[buf_ptr] = ' ';
+ BigBuffer[buf_ptr] = _T(' ');
BigBuffer[buf_ptr+1] = 0;
buf_ptr ++;
pos ++;
}
default:
{
- BigBuffer[buf_ptr] = ch;
+ BigBuffer[buf_ptr] = wxCh;
BigBuffer[buf_ptr+1] = 0;
buf_ptr ++;
pos ++;
* 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,
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)
no_args = toCopy.no_args;
argn = toCopy.argn;
macroId = toCopy.macroId;
-
+
// if (toCopy.name)
// name = copystring(toCopy.name);
// else
value = copystring(toCopy.value);
else
value = NULL;
-
+
optional = toCopy.optional;
wxNode *node = toCopy.children.GetFirst();
while (node)
* only!)
*
*/
-
+
void GetArgData1(TexChunk *chunk)
{
switch (chunk->type)
refNode = TexReferences.Next();
}
TexReferences.Clear();
-
+
wxNode* bibNode = BibList.GetFirst();
while (bibNode)
{
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);
* 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)
{
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)
TexOutput(_T("(r)"), true);
break;
case ltBACKSLASH:
- if (start)
+ if (start)
TexOutput(_T("\\"), true);
break;
case ltLDOTS:
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);
// 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"));
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"));
// 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"));
else
{
wxString informBuf;
- informBuf.Printf(_T("Warning: unresolved reference '%s'"), refName);
+ informBuf.Printf(_T("Warning: unresolved reference '%s'"), refName);
OnInform((wxChar *)informBuf.c_str());
}
}
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))
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);
}
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))
{
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;
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;
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;
}
return true;
}
-