Doxyfile 없는 Doxygen 문서 제작 및 Doxyapp

7106 단어 doxygenC++
개요
이 기사는 DoxygenPreviwer 메이킹 2탄으로 이번에는 Doxy app과 Doxygen의 원본 코드를 배회하는 이야기(그리고 못 갔던 곳)를 쓰고 싶다.
하고 싶은 일.
해결하고 싶은 문제는 전에도 썼는데 이거죠.

솔루션:
  • Doxygen 리뷰 정적 분석(Doxygen의 Special Commont Blocks 내용을 간단하게 말함)의 내용
  • 전체 소스 코드가 아닌 부품으로만 문서를 생성하여 신속하게 확인
  • 이런 선택이 있겠지.
    Doxygen의 프로그램에서 어떤 해석을 진행했는지, 분석한 데이터를 가로로 가져와 이용할 수 있는지 알아보기 위해 Doxygen의 내용을 조사했다.
    Doxygen 의 컨텐츠 조사
    doxygen 프로그램의 구조
    src/main.cpp
    int main(int argc,char **argv)
    {
      initDoxygen();
      readConfiguration(argc,argv);
      checkConfiguration();
      adjustConfiguration();
      parseInput();
      generateOutput();
      return 0;
    }
    
    이런 느낌으로 Parse Input generate는 Output을 합니다.각 함수의 실체는 잠시 src/doxygen입니다.cpp에서.
    src/doxygen.cpp 이하doxygen 프로그램은 전체적으로 클래스c++를 사용하지만 c와 같은static 함수와 전역 변수의 사용 방법도 매우 많기 때문에 처리와 데이터의 흐름을 추적하기 어렵다.
    또한, Doxygen의 코드는 Doxygen에 대한 평론이 매우 적다.
    어떻게 칠하지?
    parseInput () 를 파면doxygen 특수 명령을 해석하는 곳을 찾을 수 있습니다.
    src/cmdMapper.cpp
    Mapper *Mappers::cmdMapper     = new Mapper(cmdMap,TRUE);
    Mapper *Mappers::htmlTagMapper = new Mapper(htmlTagMap,FALSE);
    
    int Mapper::map(const char *n)
    {
      QCString name=n;
      if (!m_cs) name=name.lower();
      int *result;
      return !name.isEmpty() && (result=m_map.find(name)) ? *result: 0;
    }
    
    src/cmdMapper.cpp
    CommandMap cmdMap[] =
    {
      { "a",             CMD_EMPHASIS },
      { "addindex",      CMD_ADDINDEX },
      { "anchor",        CMD_ANCHOR },
      { "arg",           CMD_LI },
    :
    
    특수 명령 목록을 비추고 해석 결과를 정수로 표시합니다.
    parse가 만든 데이터는 어떻게 됐어요?
    이 데이터 구조가 엿볼 수 있는 곳은 대략 여기에 있다.
    src/docparser.cpp
      if (Debug::isFlagSet(Debug::PrintTree))
      {
        // pretty print the result
        PrintDocVisitor *v = new PrintDocVisitor;
        root->accept(v);
        delete v;
      }
    
    디버그 플래그를 설정하거나 코드를 다시 작성하려면 다음과 같은 디버그 표시를 볼 수 있습니다.
    <root>
    .<para>
    ..<simplesect type=note>
    ...<para>
    ....hogehogehoge
    ...</para>
    :
    
    root->accept(v); 루트에 무슨 데이터가 있는지 추측해 보세요.방문 상황을 보면 나무와 같은 구조, 데이터의 유형을 알 수 있다.이 데이터의 클래스는Qt의 클래스를 바탕으로 하지만 독립적으로 실시된 것이기 때문에 제3자가 한눈에 분석할 수 있는 대체품도 아니다.
    그래서 나는 이 데이터를 이용하는 것을 포기했다.
    Doxygen 문서와 Doxy app을 소스 코드로 단일화합니다.
    데이터 사용을 포기했지만 전체 소스 코드에서 배회할 때, 나는 Doxygen의 소스 코드 집합에 addon 폴더가 있고, 그 안에 Doxy app가 있다는 것을 발견했다.
    doxy app의brief라고 쓰여 있습니다.
    Example of how to use doxygen as part of another GPL applications
    (GPL이 좀 신경 쓰여서) Doxygen을 맞춤형으로 만들 수 있을 것 같아요.
    이동을 시도하면 Doxyfile 동작이 없는 것 같습니다. 원본 코드를 분석하고 기호를 꺼냅니다.
    그래서 조금만 개조하면 Doxyfile 없이 Doxygen 문서를 만들 수 있어요.어떻게 개조했는지 보세요소스 코드.
    총결산
    전반적으로 말하면, 다른 사람의 코드를 보는 것은 여전히 매우 어렵다.Doxygen은 매일 유지보수를 하고 있지만 그걸 가지고 노는 게 대단하다고 생각해요.
    그리고 이 일련의 기사의 방문도 그리 대단한 것은 아니기 때문에 지금 C를 위해 필사적으로 문서를 만드는 사람들도 줄어들고 있죠.

    좋은 웹페이지 즐겨찾기