X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/14204c7acc3f89b59b07580da7da3448fb49f23b..f2616db56739e4962f683f59ac9e207756efe23c:/utils/tex2rtf/src/htmlutil.cpp
diff --git a/utils/tex2rtf/src/htmlutil.cpp b/utils/tex2rtf/src/htmlutil.cpp
index 654b1d7a14..c91ca52c9f 100644
--- a/utils/tex2rtf/src/htmlutil.cpp
+++ b/utils/tex2rtf/src/htmlutil.cpp
@@ -28,6 +28,10 @@
#include "tex2rtf.h"
#include "table.h"
+
+extern wxHashTable TexReferences;
+
+
extern void DecToHex(int, char *);
void GenerateHTMLIndexFile(char *fname);
@@ -76,6 +80,11 @@ static bool inTable = FALSE;
// This is defined in the Tex2Any library.
extern char *BigBuffer;
+// DHS Two-column table dimensions.
+static int TwoColWidthA = -1;
+static int TwoColWidthB = -1;
+
+
class HyperReference: public wxObject
{
public:
@@ -131,7 +140,7 @@ void SetCurrentChapterName(char *s, char *file)
CurrentChapterFile = copystring(file);
currentFileName = CurrentChapterFile;
-
+
SetCurrentTopic(s);
}
void SetCurrentSectionName(char *s, char *file)
@@ -225,7 +234,7 @@ void ReopenSectionContentsFile(void)
* converting Latex-isms into HTML-isms, such as 2 newlines ->
.
*
*/
-
+
void ProcessText2HTML(TexChunk *chunk)
{
bool changed = FALSE;
@@ -297,7 +306,7 @@ void ProcessText2HTML(TexChunk *chunk)
* and before TraverseDocument is called.
*
*/
-
+
void Text2HTML(TexChunk *chunk)
{
Tex2RTFYield();
@@ -374,7 +383,7 @@ void AddBrowseButtons(char *upLabel, char *upFilename,
contentsReference = contentsReferenceBuf;
sprintf(contentsReference, "", ConvertCase("contents.gif"));
}
-
+
char *upReference = NULL;
if (htmlBrowseButtons == HTML_BUTTONS_TEXT)
upReference = UpNameString;
@@ -384,7 +393,7 @@ void AddBrowseButtons(char *upLabel, char *upFilename,
upReference = upReferenceBuf;
sprintf(upReference, "", ConvertCase("up.gif"));
}
-
+
char *backReference = NULL;
if (htmlBrowseButtons == HTML_BUTTONS_TEXT)
backReference = "<<";
@@ -394,7 +403,7 @@ void AddBrowseButtons(char *upLabel, char *upFilename,
backReference = backReferenceBuf;
sprintf(backReference, "", ConvertCase("back.gif"));
}
-
+
char *forwardReference = NULL;
if (htmlBrowseButtons == HTML_BUTTONS_TEXT)
forwardReference = ">>";
@@ -404,9 +413,9 @@ void AddBrowseButtons(char *upLabel, char *upFilename,
forwardReference = forwardReferenceBuf;
sprintf(forwardReference, "", ConvertCase("forward.gif"));
}
-
+
TexOutput("
");
-
+
char buf[200];
/*
@@ -556,9 +565,9 @@ char *ParseColourString(char *bkStr, bool *isPicture)
int red = atoi(tok1);
int green = atoi(tok2);
int blue = atoi(tok3);
-
+
strcpy(resStr, "#");
-
+
char buf[3];
DecToHex(red, buf);
strcat(resStr, buf);
@@ -596,7 +605,7 @@ void OutputBodyStart(void)
TexOutput(" BGCOLOR="); TexOutput(s);
}
}
-
+
// Set foreground text colour, if one is specified
if (textColourString)
{
@@ -672,7 +681,7 @@ void HTMLOnMacro(int macroId, int no_args, bool start)
sprintf(titleBuf, "%s_contents.html", FileNameFromPath(FileRoot));
fprintf(Chapters, "", topicName);
-
+
AddBrowseButtons("", titleBuf, // Up
lastTopic, lastFileName, // Last topic
topicName, ChaptersName); // This topic
@@ -717,7 +726,7 @@ void HTMLOnMacro(int macroId, int no_args, bool start)
if (macroId != ltSECTIONSTAR)
sectionNo ++;
-
+
SetCurrentOutput(NULL);
startedSections = TRUE;
@@ -938,7 +947,7 @@ void HTMLOnMacro(int macroId, int no_args, bool start)
OutputCurrentSection();
TexOutput("
");
*/
- if (htmlWorkshopFiles) HTMLWorkshopAddToContents(2, topicName, SectionsName);
+ if (htmlWorkshopFiles) HTMLWorkshopAddToContents(2, topicName, SectionsName);
SetCurrentOutput(Sections);
}
@@ -1019,7 +1028,7 @@ void HTMLOnMacro(int macroId, int no_args, bool start)
{
// End cell, start cell
TexOutput("");
-
+
// Start new row and cell, setting alignment for the first cell.
if (currentColumn < noColumns)
currentColumn ++;
@@ -1033,7 +1042,7 @@ void HTMLOnMacro(int macroId, int no_args, bool start)
{
// Convert from points * 20 into pixels.
int points = TableData[currentColumn].width / 20;
-
+
// Say the display is 100 DPI (dots/pixels per inch).
// There are 72 pts to the inch. So 1pt = 1/72 inch, or 100 * 1/72 dots.
int pixels = (int)(points * 100.0 / 72.0);
@@ -1070,7 +1079,7 @@ void HTMLOnMacro(int macroId, int no_args, bool start)
if (start)
{
currentColumn = 0;
-
+
// Start new row and cell, setting alignment for the first cell.
char buf[100];
if (TableData[currentColumn].justification == 'c')
@@ -1081,7 +1090,7 @@ void HTMLOnMacro(int macroId, int no_args, bool start)
{
// Convert from points * 20 into pixels.
int points = TableData[currentColumn].width / 20;
-
+
// Say the display is 100 DPI (dots/pixels per inch).
// There are 72 pts to the inch. So 1pt = 1/72 inch, or 100 * 1/72 dots.
int pixels = (int)(points * 100.0 / 72.0);
@@ -1189,8 +1198,12 @@ void HTMLOnMacro(int macroId, int no_args, bool start)
{
if ( start )
TexOutput("\n\n");
- else
+ else {
TexOutput("\n
\n");
+ // DHS
+ TwoColWidthA = -1;
+ TwoColWidthB = -1;
+ }
break;
}
case ltPAR:
@@ -1479,7 +1492,7 @@ void HTMLOnMacro(int macroId, int no_args, bool start)
if (htmlFrameContents && FrameContents)
{
SetCurrentOutput(FrameContents);
-
+
// Add a special label for the contents page.
TexOutput("\n");
TexOutput("\n");
@@ -1499,7 +1512,7 @@ void HTMLOnMacro(int macroId, int no_args, bool start)
}
TexOutput("\n
\n");
TexOutput("
\n");
-
+
SetCurrentOutput(Titlepage);
}
*/
@@ -1701,7 +1714,7 @@ bool HTMLOnArgument(int macroId, int arg_no, bool start)
{
if (!suppressNameDecoration) TexOutput("");
}
-
+
if (start && (arg_no == 3))
TexOutput("(");
if (!start && (arg_no == 3))
@@ -1793,7 +1806,7 @@ bool HTMLOnArgument(int macroId, int arg_no, bool start)
if (start)
{
char *sec = NULL;
-
+
char *refName = GetArgData();
if (refName)
{
@@ -1894,6 +1907,9 @@ bool HTMLOnArgument(int macroId, int arg_no, bool start)
if (helpRefText)
TraverseChildrenFromChunk(helpRefText);
TexOutput(" (REF NOT FOUND)");
+ wxString errBuf;
+ errBuf.Printf("Warning: unresolved reference '%s'", refName);
+ OnInform((char *)errBuf.c_str());
}
}
else TexOutput("??");
@@ -1916,11 +1932,11 @@ bool HTMLOnArgument(int macroId, int arg_no, bool start)
alignment = " align=left";
else if (macroId == ltIMAGER)
alignment = " align=right";
-
+
// Try to find an XBM or GIF image first.
char *filename = copystring(GetArgData());
char buf[500];
-
+
strcpy(buf, filename);
StripExtension(buf);
strcat(buf, ".xbm");
@@ -1998,7 +2014,7 @@ bool HTMLOnArgument(int macroId, int arg_no, bool start)
// Try to find an XBM or GIF image first.
char *filename = copystring(GetArgData());
char buf[500];
-
+
strcpy(buf, filename);
StripExtension(buf);
strcat(buf, ".xbm");
@@ -2021,7 +2037,7 @@ bool HTMLOnArgument(int macroId, int arg_no, bool start)
if (imageFile)
delete[] imageFile;
imageFile = NULL;
- if (f)
+ if (!f.IsEmpty())
{
imageFile = copystring(f);
}
@@ -2089,17 +2105,29 @@ bool HTMLOnArgument(int macroId, int arg_no, bool start)
*/
if (arg_no == 1)
{
- if ( start )
- TexOutput("\n
\n");
- else
+ if ( start ) {
+ // DHS
+ if (TwoColWidthA > -1) {
+ char buf[100];
+ sprintf(buf,"\n |
\n",TwoColWidthA);
+ TexOutput(buf);
+ } else
+ TexOutput("\n |
\n");
+ } else
TexOutput("\n | \n");
}
if (arg_no == 2)
{
- if ( start )
- TexOutput("\n\n");
- else
- TexOutput("\n |
\n");
+ // DHS
+ if ( start ) {
+ if (TwoColWidthB > -1) {
+ char buf[100];
+ sprintf(buf,"\n\n",TwoColWidthB);
+ TexOutput(buf);
+ } else
+ TexOutput("\n | \n");
+ } else
+ TexOutput("\n | \n");
}
return TRUE;
break;
@@ -2153,6 +2181,30 @@ bool HTMLOnArgument(int macroId, int arg_no, bool start)
TexOutput("
\n");
break;
}
+ // DHS
+ case ltTWOCOLWIDTHA:
+ {
+ if (start)
+ {
+ char *val = GetArgData();
+ float points = ParseUnitArgument(val);
+ TwoColWidthA = (int)((points * 100.0) / 72.0);
+ }
+ return FALSE;
+ break;
+ }
+ // DHS
+ case ltTWOCOLWIDTHB:
+ {
+ if (start)
+ {
+ char *val = GetArgData();
+ float points = ParseUnitArgument(val);
+ TwoColWidthB = (int)((points * 100.0) / 72.0);
+ }
+ return FALSE;
+ break;
+ }
/*
* Accents
*
@@ -2552,7 +2604,7 @@ bool HTMLOnArgument(int macroId, int arg_no, bool start)
return FALSE;
break;
}
-*/
+*/
case ltTABULAR:
case ltSUPERTABULAR:
{
@@ -2801,7 +2853,7 @@ bool HTMLGo(void)
if (TitlepageName) delete[] TitlepageName;
TitlepageName = copystring(buf);
Titlepage = fopen(buf, "w");
-
+
if (truncateFilenames)
sprintf(buf, "%s_fc.htm", FileRoot);
else
@@ -2907,7 +2959,7 @@ bool HTMLGo(void)
else
fprintf(tmpTitle, "
%s\n\n", FileNameFromPath(FileRoot));
}
-
+
// Output frame information
if (htmlFrameContents)
{
@@ -2922,13 +2974,13 @@ bool HTMLGo(void)
fprintf(tmpTitle, "\n", ConvertCase(FileNameFromPath(contentsFrameName)));
fprintf(tmpTitle, "\n", ConvertCase(FileNameFromPath(firstFileName)));
fprintf(tmpTitle, "\n");
-
+
fprintf(tmpTitle, "\n");
}
// Output to temporary title page
OutputBodyStart();
-
+
// Concat titlepage
FILE *fd = fopen(TitlepageName, "r");
if (fd)
@@ -3039,27 +3091,40 @@ void GenerateHTMLWorkshopFiles(char *fname)
sprintf(buf, "%s.hhp", fname);
f = fopen(buf, "wt");
- fprintf(f,
+ fprintf(f,
"[OPTIONS]\n"
- "Compatibility=1.1 or later\n"
+ "Compatibility=1.1\n"
+ "Full-text search=Yes\n"
"Contents file=%s.hhc\n"
+ "Compiled file=%s.chm\n"
+ "Default Window=%sHelp\n"
"Default topic=%s\n"
"Index file=%s.hhk\n"
"Title=",
FileNameFromPath(fname),
+ FileNameFromPath(fname),
+ FileNameFromPath(fname),
FileNameFromPath(TitlepageName),
FileNameFromPath(fname)
);
-
+
if (DocumentTitle) {
SetCurrentOutput(f);
TraverseChildrenFromChunk(DocumentTitle);
}
else fprintf(f, "(unknown)");
-
+
+ fprintf(f, "\n\n[WINDOWS]\n"
+ "%sHelp=,\"%s.hhc\",\"%s.hhk\",\"%s\",,,,,,0x2420,,0x380e,,,,,0,,,",
+ FileNameFromPath(fname),
+ FileNameFromPath(fname),
+ FileNameFromPath(fname),
+ FileNameFromPath(TitlepageName));
+
+
fprintf(f, "\n\n[FILES]\n");
fprintf(f, "%s\n", FileNameFromPath(TitlepageName));
- for (int i = 1; i <= fileId; i++) {
+ for (int i = 1; i <= fileId; i++) {
if (truncateFilenames)
sprintf(buf, "%s%d.htm", FileNameFromPath(FileRoot), i);
else
@@ -3097,7 +3162,7 @@ void GenerateHTMLWorkshopFiles(char *fname)
while (node1)
{
char *s = (char *)node1->Data();
- fprintf(f,
+ fprintf(f,
"