diff options
Diffstat (limited to 'src/latexgen.cpp')
-rw-r--r-- | src/latexgen.cpp | 330 |
1 files changed, 26 insertions, 304 deletions
diff --git a/src/latexgen.cpp b/src/latexgen.cpp index 987538b..d9f7b24 100644 --- a/src/latexgen.cpp +++ b/src/latexgen.cpp @@ -29,6 +29,7 @@ #include "version.h" #include "dot.h" #include "page.h" +#include "latexdocvisitor.h" //static QCString filterTitle(const char *s) //{ @@ -242,6 +243,7 @@ static void writeDefaultHeaderPart1(QTextStream &t) t << "\\usepackage{makeidx}\n" "\\usepackage{fancyhdr}\n" "\\usepackage{graphicx}\n" + "\\usepackage{multicol}\n" "\\usepackage{float}\n" "\\usepackage{alltt}\n"; if (Config_getBool("PDF_HYPERLINKS")) @@ -1163,6 +1165,7 @@ void LatexGenerator::endDoxyAnchor(const char *fName,const char *anchor) void LatexGenerator::writeAnchor(const char *fName,const char *name) { + //printf("LatexGenerator::writeAnchor(%s,%s)\n",fName,name); t << "\\label{" << name << "}" << endl; if (fName && Config_getBool("PDF_HYPERLINKS")) { @@ -1283,158 +1286,42 @@ void LatexGenerator::writeSectionRefItem(const char *,const char *lab, // t << " (p.\\,\\pageref{" << lab << "})" << endl; //} -//void LatexGenerator::docify(const char *str) -//{ -// docifyStatic(t,str); -//} - -/*! - * Function converts Latin2 character to latex strin] representin the same - * character. - */ -void LatexGenerator::latin2ToLatex(unsigned char c) -{ - switch (c) - { - case 0xA1: t << c; break; - case 0xA2: t << c; break; - case 0xA3: t << c; break; - case 0xA4: t << c; break; - case 0xA5: t << c; break; - case 0xA6: t << "\\'{S}"; break; - case 0xA7: t << c; break; - case 0xA8: t << c; break; - case 0xA9: t << "\\v{S}"; break; - case 0xAA: t << "\\c{S}"; break; - case 0xAB: t << "\\v{T}"; break; - case 0xAC: t << "\\'{Z}"; break; - case 0xAD: t << c; break; - case 0xAE: t << "\\v{Z}"; break; - case 0xAF: t << "\\.{Z}"; break; - - case 0xB0: t << c; break; - case 0xB1: t << c; break; - case 0xB2: t << c; break; - case 0xB3: t << c; break; - case 0xB4: t << c; break; - case 0xB5: t << c; break; - case 0xB6: t << "\\'{s}"; break; - case 0xB7: t << c; break; - case 0xB8: t << c; break; - case 0xB9: t << "\\v{s}"; break; - case 0xBA: t << "\\c{s}"; break; - case 0xBB: t << "\\v{t}"; break; - case 0xBC: t << "\\'{z}"; break; - case 0xBD: t << c; break; - case 0xBE: t << "\\v{z}"; break; - case 0xBF: t << "\\.{z}"; break; - - case 0xC0: t << "\\'{R}"; break; - case 0xC1: t << "\\'{A}"; break; - case 0xC2: t << "\\^{A}"; break; - case 0xC3: t << "\\u{A}"; break; - case 0xC4: t << "\\\"{A}"; break; - case 0xC5: t << "\\'{L}"; break; - case 0xC6: t << "\\'{C}"; break; - case 0xC7: t << "\\c{C}"; break; - case 0xC8: t << "\\v{C}"; break; - case 0xC9: t << "\\'{E}"; break; - case 0xCA: t << "\\c{E}"; break; - case 0xCB: t << "\\\"{E}"; break; - case 0xCC: t << "\\v{E}"; break; - case 0xCD: t << "\\'{I}"; break; - case 0xCE: t << "\\^{I}"; break; - case 0xCF: t << "\\v{D}"; break; - - case 0xD0: t << "\\bar{D}"; break; - case 0xD1: t << "\\'{N}"; break; - case 0xD2: t << "\\v{N}"; break; - case 0xD3: t << "\\'{O}"; break; - case 0xD4: t << "\\^{O}"; break; - case 0xD5: t << "\\H{O}"; break; - case 0xD6: t << "\\\"{O}"; break; - case 0xD7: t << c; break; - case 0xD8: t << "\\v{R}"; break; - case 0xD9: t << c; break; - case 0xDA: t << "\\'{U}"; break; - case 0xDB: t << "\\H{U}"; break; - case 0xDC: t << "\\\"{U}"; break; - case 0xDD: t << "\\'{Y}"; break; - case 0xDE: t << "\\c{T}"; break; - case 0xDF: t << "\\ss"; break; - - case 0xE0: t << "\\'{r}"; break; - case 0xE1: t << "\\'{a}"; break; - case 0xE2: t << "\\^{a}"; break; - case 0xE3: t << c; break; - case 0xE4: t << "\\\"{a}"; break; - case 0xE5: t << "\\'{l}"; break; - case 0xE6: t << "\\'{c}"; break; - case 0xE7: t << "\\c{c}"; break; - case 0xE8: t << "\\v{c}"; break; - case 0xE9: t << "\\'{e}"; break; - case 0xEA: t << c; break; - case 0xEB: t << "\\\"{e}"; break; - case 0xEC: t << "\\v{e}"; break; - case 0xED: t << "\\'{\\i}"; break; - case 0xEE: t << "\\^{\\i}"; break; - case 0xEF: t << "\\v{d}"; break; - - case 0xF0: t << "\\bar{d}"; break; - case 0xF1: t << "\\'{n}"; break; - case 0xF2: t << "\\v{n}"; break; - case 0xF3: t << "\\'{o}"; break; - case 0xF4: t << "\\^{o}"; break; - case 0xF5: t << "\\H{o}"; break; - case 0xF6: t << "\\\"{o}"; break; - case 0xF7: t << c; break; - case 0xF8: t << "\\v{r}"; break; - case 0xF9: t << c; break; - case 0xFA: t << "\\'{u}"; break; - case 0xFB: t << "\\H{u}"; break; - case 0xFC: t << "\\\"{u}"; break; - case 0xFD: t << "\\'{y}"; break; - case 0xFE: t << c; break; - case 0xFF: t << c; break; - - default: t << c; - } -} //void LatexGenerator::docifyStatic(QTextStream &t,const char *str) void LatexGenerator::docify(const char *str) { - static bool isCzech = theTranslator->idLanguage()=="czech"; +#if 0 + //static bool isCzech = theTranslator->idLanguage()=="czech"; static bool isJapanese = theTranslator->idLanguage()=="japanese"; - static bool isKorean = theTranslator->idLanguage()=="korean"; - static bool isRussian = theTranslator->idLanguage()=="russian"; - static bool isUkrainian = theTranslator->idLanguage()=="ukrainian"; - static bool isChinese = theTranslator->idLanguage()=="chinese" || - theTranslator->idLanguage()=="chinese-traditional"; - static bool isLatin2 = theTranslator->idLanguageCharset()=="iso-8859-2"; - static bool isGreek = theTranslator->idLanguage()=="greek"; + //static bool isKorean = theTranslator->idLanguage()=="korean"; + //static bool isRussian = theTranslator->idLanguage()=="russian"; + //static bool isUkrainian = theTranslator->idLanguage()=="ukrainian"; + //static bool isChinese = theTranslator->idLanguage()=="chinese" || + // theTranslator->idLanguage()=="chinese-traditional"; + //static bool isLatin2 = theTranslator->idLanguageCharset()=="iso-8859-2"; + //static bool isGreek = theTranslator->idLanguage()=="greek"; if (str) { const unsigned char *p=(const unsigned char *)str; unsigned char c; unsigned char pc='\0'; + bool multiByte = FALSE; while (*p) { - static bool MultiByte = FALSE; c=*p++; if( isJapanese) { - if (MultiByte) + if (multiByte) { t << (char)c; - MultiByte = FALSE; + multiByte = FALSE; pc = c; continue; } if (c>=0x80) { - MultiByte = TRUE; + multiByte = TRUE; t << (char)c; pc = c; continue; @@ -1453,185 +1340,13 @@ void LatexGenerator::docify(const char *str) } else { - switch(c) - { - case '#': t << "\\#"; break; - case '$': t << "\\$"; break; - case '%': t << "\\%"; break; - case '^': t << "$^\\wedge$"; break; - case '&': t << "\\&"; break; - case '*': t << "$\\ast$"; break; - case '_': t << "\\_"; - if (!insideTabbing) t << "\\-"; - break; - case '{': t << "\\{"; break; - case '}': t << "\\}"; break; - case '<': t << "$<$"; break; - case '>': t << "$>$"; break; - case '|': t << "$|$"; break; - case '~': t << "$\\sim$"; break; - case '[': if (Config_getBool("PDF_HYPERLINKS")) - t << "\\mbox{[}"; - else - t << "["; - break; - case ']': if (pc=='[') t << "$\\,$"; - if (Config_getBool("PDF_HYPERLINKS")) - t << "\\mbox{]}"; - else - t << "]"; - break; - case '-': if (*p=='>') - { t << " $\\rightarrow$ "; p++; } - else - { t << (char)c; } - break; - case '\\': if (*p=='<') - { t << "$<$"; p++; } - else if (*p=='>') - { t << "$>$"; p++; } - else - { t << "$\\backslash$"; } - break; - case '"': { t << "\\char`\\\"{}"; } - break; - - default: - // Some languages uses wide characters - if (isJapanese || isKorean || isChinese) - { - if (c>=128) - { - t << (char)c; - if (*p) - { - c = *p++; - t << (char)c; - } - } - else // ascii char => see if we can insert a hypenation hint - { - if (isupper(c) && islower(pc) && !insideTabbing) t << "\\-"; - t << (char)c; - } - } - else if (isCzech || isRussian || isUkrainian) - { - if (c>=128) - { - t << (char)c; - } - else // ascii char => see if we can insert a hypenation hint - { - if (isupper(c) && islower(pc) && !insideTabbing) t << "\\-"; - t << (char)c; - } - } - else if (isLatin2) - { - if (c>=128) - { - latin2ToLatex(c); - } - else - { - // see if we can insert an hyphenation hint - if (isupper(c) && islower(pc) && !insideTabbing) t << "\\-"; - t << (char)c; - } - } - else if (isGreek) - { - if (c<128) - { - t << "\\textlatin{" << (char)c << "}"; - } - else - { - t << (char)c; - } - } - else // language is other than Czech, Russian or Japanese - { - switch(c) - { - // the Latin-1 characters - case 161: t << "!`"; break; - case 181: t << "$\\mu$"; break; - case 191: t << "?`"; break; - case 192: t << "\\`{A}"; break; - case 193: t << "\\'{A}"; break; - case 194: t << "\\^{A}"; break; - case 195: t << "\\~{A}"; break; - case 196: t << "\\\"{A}"; break; - case 197: t << "\\AA{}"; break; - case 198: t << "\\AE{}"; break; - case 199: t << "\\c{C}"; break; - case 200: t << "\\`{E}"; break; - case 201: t << "\\'{E}"; break; - case 202: t << "\\^{E}"; break; - case 203: t << "\\\"{E}"; break; - case 204: t << "\\`{I}"; break; - case 205: t << "\\'{I}"; break; - case 206: t << "\\^{I}"; break; - case 207: t << "\\\"{I}"; break; - case 208: t << "D "; break; // anyone know the real code? - case 209: t << "\\~{N}"; break; - case 210: t << "\\`{O}"; break; - case 211: t << "\\'{O}"; break; - case 212: t << "\\^{O}"; break; - case 213: t << "\\~{O}"; break; - case 214: t << "\\\"{O}"; break; - case 215: t << "$\\times$"; break; - case 216: t << "\\O"; break; - case 217: t << "\\`{U}"; break; - case 218: t << "\\'{U}"; break; - case 219: t << "\\^{U}"; break; - case 220: t << "\\\"{U}"; break; - case 221: t << "\\'{Y}"; break; - case 223: t << "\\ss{}"; break; - case 224: t << "\\`{a}"; break; - case 225: t << "\\'{a}"; break; - case 226: t << "\\^{a}"; break; - case 227: t << "\\~{a}"; break; - case 228: t << "\\\"{a}"; break; - case 229: t << "\\aa{}"; break; - case 230: t << "\\ae{}"; break; - case 231: t << "\\c{c}"; break; - case 232: t << "\\`{e}"; break; - case 233: t << "\\'{e}"; break; - case 234: t << "\\^{e}"; break; - case 235: t << "\\\"{e}"; break; - case 236: t << "\\`{\\i}"; break; - case 237: t << "\\'{\\i}"; break; - case 238: t << "\\^{\\i}"; break; - case 239: t << "\\\"{\\i}"; break; - case 241: t << "\\~{n}"; break; - case 242: t << "\\`{o}"; break; - case 243: t << "\\'{o}"; break; - case 244: t << "\\^{o}"; break; - case 245: t << "\\~{o}"; break; - case 246: t << "\\\"{o}"; break; - case 248: t << "\\o{}"; break; - case 249: t << "\\`{u}"; break; - case 250: t << "\\'{u}"; break; - case 251: t << "\\^{u}"; break; - case 252: t << "\\\"{u}"; break; - case 253: t << "\\'{y}"; break; - case 255: t << "\\\"{y}"; break; - default: // normal ascii char - { - // see if we can insert an hyphenation hint - if (isupper(c) && islower(pc) && !insideTabbing) t << "\\-"; - t << (char)c; - } - } - } - } + filterLatexChar(t,c,insideTabbing); } pc = c; } } +#endif + filterLatexString(t,str,insideTabbing,insidePre); } void LatexGenerator::codify(const char *str) @@ -1965,3 +1680,10 @@ void LatexGenerator::endSectionRefList() t << "\\normalsize" << endl; } +void LatexGenerator::printDoc(DocNode *n) +{ + LatexDocVisitor *visitor = new LatexDocVisitor(t,*this); + n->accept(visitor); + delete visitor; +} + |