⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 htmlutil.cpp

📁 Wxpython Implemented on Windows CE, Source code
💻 CPP
📖 第 1 页 / 共 5 页
字号:
  {
    if (PrimaryAnchorOfTheFile(previousFilename, previousLabel))
      wxSnprintf(buf, sizeof(buf),
                 _T("<A HREF=\"%s\">%s</A> "),
                 ConvertCase(previousFilename), backReference);
    else
      wxSnprintf(buf, sizeof(buf),
                 _T("<A HREF=\"%s#%s\">%s</A> "),
                 ConvertCase(previousFilename), previousLabel, backReference);
    if (wxStrcmp(previousLabel, _T("contents")) == 0)
    {
//      TexOutput(_T("<NOFRAMES>"));
      TexOutput(buf);
//      TexOutput(_T("</NOFRAMES>"));
    }
    else
      TexOutput(buf);
  }
  else
  {
    // A placeholder so the buttons don't keep moving position
    wxSnprintf(buf, sizeof(buf), _T("%s "), backReference);
    TexOutput(buf);
  }

  wxChar *nextLabel = NULL;
  wxChar *nextFilename = NULL;

  // Get the next page, and record the previous page's 'next' page
  // (i.e. this page)
  TexNextPage *nextPage = (TexNextPage *)TexNextPages.Get(thisLabel);
  if (nextPage)
  {
    nextLabel = nextPage->label;
    nextFilename = nextPage->filename;
  }
  if (previousLabel && previousFilename)
  {
    TexNextPage *oldNextPage = (TexNextPage *)TexNextPages.Get(previousLabel);
    if (oldNextPage)
    {
      delete oldNextPage;
      TexNextPages.Delete(previousLabel);
    }
    TexNextPage *newNextPage = new TexNextPage(thisLabel, thisFilename);
    TexNextPages.Put(previousLabel, newNextPage);
  }

  /*
   * >> button
   *
   */

  if (nextLabel && nextFilename)
  {
    if (PrimaryAnchorOfTheFile(nextFilename, nextLabel))
      wxSnprintf(buf, sizeof(buf),
                 _T("<A HREF=\"%s\">%s</A> "),
                 ConvertCase(nextFilename), forwardReference);
    else
      wxSnprintf(buf, sizeof(buf),
                 _T("<A HREF=\"%s#%s\">%s</A> "),
                 ConvertCase(nextFilename), nextLabel, forwardReference);
    TexOutput(buf);
  }
  else
  {
    // A placeholder so the buttons don't keep moving position
    wxSnprintf(buf, sizeof(buf), _T("%s "), forwardReference);
    TexOutput(buf);
  }

  /*
   * Horizontal rule to finish it off nicely.
   *
   */
  TexOutput(_T("</CENTER>"));
  TexOutput(_T("<HR>\n"));

  // Update last topic/filename
  if (lastFileName)
    delete[] lastFileName;
  lastFileName = copystring(thisFilename);
  if (lastTopic)
    delete[] lastTopic;
  lastTopic = copystring(thisLabel);
}

// A colour string is either 3 numbers separated by semicolons (RGB),
// or a reference to a GIF. Return the filename or a hex string like #934CE8
wxChar *ParseColourString(wxChar *bkStr, bool *isPicture)
{
  static wxChar resStr[300];
  wxStrcpy(resStr, bkStr);
  wxStringTokenizer tok(resStr, _T(";"), wxTOKEN_STRTOK);
  if (tok.HasMoreTokens())
  {
    wxString token1 = tok.GetNextToken();
    if (!tok.HasMoreTokens())
    {
      *isPicture = true;
      return resStr;
    }
    else
    {
      wxString token2 = tok.GetNextToken();
      *isPicture = false;
      if (tok.HasMoreTokens())
      {
        wxString token3 = tok.GetNextToken();

        // Now convert 3 strings into decimal numbers, and then hex numbers.
        int red = wxAtoi(token1.c_str());
        int green = wxAtoi(token2.c_str());
        int blue = wxAtoi(token3.c_str());

        wxStrcpy(resStr, _T("#"));

        wxChar buf[3];
        DecToHex(red, buf);
        wxStrcat(resStr, buf);
        DecToHex(green, buf);
        wxStrcat(resStr, buf);
        DecToHex(blue, buf);
        wxStrcat(resStr, buf);
        return resStr;
      }
      else return NULL;
    }
  }
  else return NULL;
}

void OutputFont(void)
{
  // Only output <font face> if explicitly requested by htmlFaceName= directive in
  // tex2rtf.ini. Otherwise do NOT set the font because we want to use browser's
  // default font:
  if (htmlFaceName)
  {
    // Output <FONT FACE=...>
    TexOutput(_T("<FONT FACE=\""));
    TexOutput(htmlFaceName);
    TexOutput(_T("\">\n"));
  }
}

// Output start of <BODY> block
void OutputBodyStart(void)
{
  TexOutput(_T("\n<BODY"));
  if (backgroundImageString)
  {
    bool isPicture = false;
    wxChar *s = ParseColourString(backgroundImageString, &isPicture);
    if (s)
    {
      TexOutput(_T(" BACKGROUND=\""));
      TexOutput(s);
      TexOutput(_T("\""));
    }
  }
  if (backgroundColourString)
  {
    bool isPicture = false;
    wxChar *s = ParseColourString(backgroundColourString, &isPicture);
    if (s)
    {
      TexOutput(_T(" BGCOLOR="));
      TexOutput(s);
    }
  }

  // Set foreground text colour, if one is specified
  if (textColourString)
  {
    bool isPicture = false;
    wxChar *s = ParseColourString(textColourString, &isPicture);
    if (s)
    {
      TexOutput(_T(" TEXT=")); TexOutput(s);
    }
  }
  // Set link text colour, if one is specified
  if (linkColourString)
  {
    bool isPicture = false;
    wxChar *s = ParseColourString(linkColourString, &isPicture);
    if (s)
    {
      TexOutput(_T(" LINK=")); TexOutput(s);
    }
  }
  // Set followed link text colour, if one is specified
  if (followedLinkColourString)
  {
    bool isPicture = false;
    wxChar *s = ParseColourString(followedLinkColourString, &isPicture);
    if (s)
    {
      TexOutput(_T(" VLINK=")); TexOutput(s);
    }
  }
  TexOutput(_T(">\n"));

  OutputFont();
}

void HTMLHead()
{
  TexOutput(_T("<head>"));
  if (htmlStylesheet) {
    TexOutput(_T("<link rel=stylesheet type=\"text/css\" href=\""));
    TexOutput(htmlStylesheet);
    TexOutput(_T("\">"));
  }
};

void HTMLHeadTo(FILE* f)
{
  if (htmlStylesheet)
    wxFprintf(f,_T("<head><link rel=stylesheet type=\"text/css\" href=\"%s\">"),htmlStylesheet);
  else
    wxFprintf(f,_T("<head>"));
}

// Called on start/end of macro examination
void HTMLOnMacro(int macroId, int no_args, bool start)
{
  switch (macroId)
  {
  case ltCHAPTER:
  case ltCHAPTERSTAR:
  case ltCHAPTERHEADING:
  {
    if (!start)
    {
      sectionNo = 0;
      figureNo = 0;
      subsectionNo = 0;
      subsubsectionNo = 0;
      if (macroId != ltCHAPTERSTAR)
        chapterNo ++;

      SetCurrentOutput(NULL);
      startedSections = true;

      wxChar *topicName = FindTopicName(GetNextChunk());
      ReopenFile(&Chapters, &ChaptersName, topicName);
      AddTexRef(topicName, ChaptersName, ChapterNameString);

      SetCurrentChapterName(topicName, ChaptersName);
      if (htmlWorkshopFiles) HTMLWorkshopAddToContents(0, topicName, ChaptersName);

      SetCurrentOutput(Chapters);

      HTMLHead();
      TexOutput(_T("<title>"));
      OutputCurrentSection(); // Repeat section header
      TexOutput(_T("</title></head>\n"));
      OutputBodyStart();

      wxChar titleBuf[200];
      if (truncateFilenames)
        wxSnprintf(titleBuf, sizeof(titleBuf), _T("%s.htm"), wxFileNameFromPath(FileRoot));
      else
        wxSnprintf(titleBuf, sizeof(titleBuf), _T("%s_contents.html"), wxFileNameFromPath(FileRoot));

      wxFprintf(Chapters, _T("<A NAME=\"%s\"></A>"), topicName);

      AddBrowseButtons(_T(""), titleBuf, // Up
                       lastTopic, lastFileName,  // Last topic
                       topicName, ChaptersName); // This topic

      if(PrimaryAnchorOfTheFile(ChaptersName, topicName))
        wxFprintf(Contents, _T("\n<LI><A HREF=\"%s\">"), ConvertCase(ChaptersName));
      else
        wxFprintf(Contents, _T("\n<LI><A HREF=\"%s#%s\">"), ConvertCase(ChaptersName), topicName);

      if (htmlFrameContents && FrameContents)
      {
        SetCurrentOutput(FrameContents);
        if(PrimaryAnchorOfTheFile(ChaptersName, topicName))
          wxFprintf(FrameContents, _T("\n<LI><A HREF=\"%s\" TARGET=\"mainwindow\">"), ConvertCase(ChaptersName));
        else
          wxFprintf(FrameContents, _T("\n<LI><A HREF=\"%s#%s\" TARGET=\"mainwindow\">"), ConvertCase(ChaptersName), topicName);
        OutputCurrentSection();
        wxFprintf(FrameContents, _T("</A>\n"));
      }

      SetCurrentOutputs(Contents, Chapters);
      wxFprintf(Chapters, _T("\n<H2>"));
      OutputCurrentSection();
      wxFprintf(Contents, _T("</A>\n"));
      wxFprintf(Chapters, _T("</H2>\n"));

      SetCurrentOutput(Chapters);

      // Add this section title to the list of keywords
      if (htmlIndex)
      {
        OutputCurrentSectionToString(wxTex2RTFBuffer);
        AddKeyWordForTopic(topicName, wxTex2RTFBuffer, ConvertCase(currentFileName));
      }
    }
    break;
  }
  case ltSECTION:
  case ltSECTIONSTAR:
  case ltSECTIONHEADING:
  case ltGLOSS:
  {
    if (!start)
    {
      subsectionNo = 0;
      subsubsectionNo = 0;
      subsectionStarted = false;

      if (macroId != ltSECTIONSTAR)
        sectionNo ++;

      SetCurrentOutput(NULL);
      startedSections = true;

      wxChar *topicName = FindTopicName(GetNextChunk());
      ReopenFile(&Sections, &SectionsName, topicName);
      AddTexRef(topicName, SectionsName, SectionNameString);

      SetCurrentSectionName(topicName, SectionsName);
      if (htmlWorkshopFiles) HTMLWorkshopAddToContents(1, topicName, SectionsName);

      SetCurrentOutput(Sections);
      HTMLHead();
      TexOutput(_T("<title>"));
      OutputCurrentSection();
      TexOutput(_T("</title></head>\n"));
      OutputBodyStart();

      wxFprintf(Sections, _T("<A NAME=\"%s\"></A>"), topicName);
      AddBrowseButtons(CurrentChapterName, CurrentChapterFile, // Up
                       lastTopic, lastFileName,  // Last topic
                       topicName, SectionsName); // This topic

      FILE *jumpFrom = ((DocumentStyle == LATEX_ARTICLE) ? Contents : Chapters);

      SetCurrentOutputs(jumpFrom, Sections);
      if (DocumentStyle == LATEX_ARTICLE)
      {
        if(PrimaryAnchorOfTheFile(SectionsName, topicName))
          wxFprintf(jumpFrom, _T("\n<LI><A HREF=\"%s\">"), ConvertCase(SectionsName));
        else
          wxFprintf(jumpFrom, _T("\n<LI><A HREF=\"%s#%s\">"), ConvertCase(SectionsName), topicName);
      }
      else
      {
        if(PrimaryAnchorOfTheFile(SectionsName, topicName))
          wxFprintf(jumpFrom, _T("\n<A HREF=\"%s\"><B>"), ConvertCase(SectionsName));
        else
          wxFprintf(jumpFrom, _T("\n<A HREF=\"%s#%s\"><B>"), ConvertCase(SectionsName), topicName);
      }

      wxFprintf(Sections, _T("\n<H2>"));
      OutputCurrentSection();

      if (DocumentStyle == LATEX_ARTICLE)
        wxFprintf(jumpFrom, _T("</A>\n"));
      else
        wxFprintf(jumpFrom, _T("</B></A><BR>\n"));
      wxFprintf(Sections, _T("</H2>\n"));

      SetCurrentOutput(Sections);
      // Add this section title to the list of keywords
      if (htmlIndex)
      {
        OutputCurrentSectionToString(wxTex2RTFBuffer);
        AddKeyWordForTopic(topicName, wxTex2RTFBuffer, currentFileName);
      }
    }
    break;
  }
  case ltSUBSECTION:
  case ltSUBSECTIONSTAR:
  case ltMEMBERSECTION:
  case ltFUNCTIONSECTION:
  {
    if (!start)
    {
      if (!Sections)
      {
        OnError(_T("You cannot have a subsection before a section!"));
      }
      else
      {
          subsubsectionNo = 0;

          if (macroId != ltSUBSECTIONSTAR)
            subsectionNo ++;

          if ( combineSubSections && !subsectionStarted )
          {
            fflush(Sections);

            // Read old .con file in at this point
            wxChar buf[256];
            wxStrcpy(buf, CurrentSectionFile);
            wxStripExtension(buf);
            wxStrcat(buf, _T(".con"));
            FILE *fd = wxFopen(buf, _T("r"));
            if ( fd )
            {
                int ch = getc(fd);
                while (ch != EOF)
                {
                    wxPutc(ch, Sections);
                    ch = getc(fd);
                }
                fclose(fd);
            }
            wxFprintf(Sections, _T("<P>\n"));

            // Close old file, create a new file for the sub(sub)section contents entries
            ReopenSectionContentsFile();
          }

          startedSections = true;
          subsectionStarted = true;

          wxChar *topicName = FindTopicName(GetNextChunk());

          if ( !combineSubSections )
          {
            SetCurrentOutput(NULL);
            ReopenFile(&Subsections, &SubsectionsName, topicName);
            AddTexRef(topicName, SubsectionsName, SubsectionNameString);
            SetCurrentSubsectionName(topicName, SubsectionsName);
            if (htmlWorkshopFiles) HTMLWorkshopAddToContents(2, topicName, SubsectionsName);
            SetCurrentOutput(Subsections);

            HTMLHead();
            TexOutput(_T("<title>"));
            OutputCurrentSection();
            TexOutput(_T("</title></head>\n"));
            OutputBodyStart();

            wxFprintf(Subsections, _T("<A NAME=\"%s\"></A>"), topicName);
            AddBrowseButtons(CurrentSectionName, CurrentSectionFile, // Up
                           lastTopic, lastFileName,  // Last topic
                           topicName, SubsectionsName); // This topic

            SetCurrentOutputs(Sections, Subsections);
            if(PrimaryAnchorOfTheFile(SubsectionsName, topicName))
              wxFprintf(Sections, _T("\n<A HREF=\"%s\"><B>"), ConvertCase(SubsectionsName));
            else
              wxFprintf(Sections, _T("\n<A HREF=\"%s#%s\"><B>"), ConvertCase(SubsectionsName), topicName);

            wxFprintf(Subsections, _T("\n<H3>"));
            OutputCurrentSection();
            wxFprintf(Sections, _T("</B></A><BR>\n"));
            wxFprintf(Subsections, _T("</H3>\n"));

            SetCurrentOutput(Subsections);
          }
          else
          {
            AddTexRef(topicName, SectionsName, SubsectionNameString);
            SetCurrentSubsectionName(topicName, SectionsName);

//            if ( subsectionNo != 0 )
            wxFprintf(Sections, _T("\n<HR>\n"));

            // We're putting everything into the section file
            wxFprintf(Sections, _T("<A NAME=\"%s\"></A>"), topicName);
            wxFprintf(Sections, _T("\n<H3>"));
            OutputCurrentSection();
            wxFprintf(Sections, _T("</H3>\n"));

            SetCurrentOutput(SectionContentsFD);
            wxFprintf(SectionContentsFD, _T("<A HREF=\"#%s\">"), topicName);
            OutputCurrentSection();
            TexOutput(_T("</A><BR>\n"));

            if (htmlWorkshopFiles) HTMLWorkshopAddToContents(2, topicName, SectionsName);
            SetCurrentOutput(Sections);
          }
          // Add this section title to the list of keywords
          if (htmlIndex)
          {
            OutputCurrentSectionToString(wxTex2RTFBuffer);
            AddKeyWordForTopic(topicName, wxTex2RTFBuffer, currentFileName);
          }

      }
    }
    break;
  }
  case ltSUBSUBSECTION:
  case ltSUBSUBSECTIONSTAR:
  {
    if (!start)
    {
      if (!Subsections && !combineSubSections)
      {
        OnError(_T("You cannot have a subsubsection before a subsection!"));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -