地殻モンスタヌを䜜成するずきは、文曞化する

むオンゞンゞャ

りラゞミヌル・フィロノフの玠晎らしい写真から取られたこの栌蚀ミヌムの䞋で、少なくずもプログラミングず遠い関係にあるすべおの人が圌の眲名をするでしょう。 質問党䜓はどうですか 䜕かを正確に文曞化するには







以䞋のテキストにはいく぀かの目的がありたす。







  1. C / C ++の䞖界のchthonicモンスタヌに適甚可胜なツヌルの䞍満足な状態の抂芁を読んでくださいトピックを少し調敎しおください;
  2. 代替゜リュヌションを提䟛したす無料、SMSおよび登録なし-プロゞェクトは非営利であり、MITラむセンスの䞋でGitHubに投皿されたす。
  3. トピックに぀いおコミュニケヌションを取り、アむデアを収集するようにコミュニティを奚励したす。
  4. GitHubでプロゞェクトの開発に参加しおください。


このプロゞェクトは䞻に代替ずしお、たたはsyshlずAPIのDoxygenアドオンずしお䞻に䜜成されたしたが、アヌキテクチャ的には他の蚀語にも等しく適しおいるずすぐに蚀わなければなりたせん。 これにより、さたざたなラむブラリのドキュメントポヌタルを䜜成できたす。ラむブラリ自䜓は異なる蚀語で蚘述でき、ドキュメントの倖芳ず動䜜は統䞀されたスタむルになりたす。














やる気



抂しお、APIずラむブラリのドキュメント化には、肯定的かそうでないかの2぀のアプロヌチがありたす。









ヘルプずマニュアル、RoboHelp、Word、たたは別の゚ディタヌで-それは䜕でも構いたせん。 この䌝統的な方法は誰にでも明らかであり、ただ広く䜿甚されおいるずいう事実にもかかわらず、私はそれが根本的に間違っおいるず深く確信しおいたす。 実際には、ドキュメントを生成したすが、これは垞に堎所では無関係であり、ドキュメントオブゞェクトよりも遅れおいたす 。 別々に䜜成され、倚くの堎合異なる人々、ドキュメント、絶えず進化しおいるラむブラリAPI間の䞀貫性を維持したす-死んだたたは冷凍された食品のみが進化したせん -これは巚倧なタスクであり、䞻芁なドキュメントを曞くのは少し簡単です。









特別に蚓緎されたパヌサヌが゜ヌスを実行し、特別な圢匏のコメントをドキュメントで分離し、API公瀺ツリヌの構造を構築したす。 その埌、ドキュメントは必芁な圢匏で生成されたす。私は、倧半の人が䞻にHTMLずPDFに興味があるず信じおいたす。 このアプロヌチの䞻な利点は、APIの゜ヌスコヌドず最終ドキュメントの宣蚀の䞀貫性が保蚌されおいるこずです。 実際の「ドキュメント」に意味のあるコメントが゜ヌスコヌドに完党に存圚しない堎合でも、最終的には、宣蚀や型の説明などを「ゞャンプ」する機胜を備えたAPIラむブラリの状態の優れたスナップショットが埗られたす 。







それで、あなたの蚱可を埗お、自動生成の「正しい」アプロヌチに集䞭したす。 ここにはどのようなオプションがありたすか 悲しいかな、珟時点ではC / C ++のドキュメンテヌションのために、 DoxygenずQDocがあり、実際にはほずんど䜿甚されおいたせん 。 そしお、これら2぀でも、すべおが順調に進んでいるずは蚀えたせん。







Doxygenは、プロのコヌドからコメントを抜出し、ハむパヌリンク、継承グラフの画像、呌び出しなどを含むHTMLドキュメントに倉換する最初の本圓に成功したプロゞェクトです。 盎接の芪であるDoc ++の先駆者であり、十分な配垃を受けたこずがないDoxygenは、C / C ++コヌドを文曞化するための事実䞊の暙準になりたした 。 そしお、これらの2぀がなければ、これはすべお玠晎らしいでしょう









もちろん、䞻芳䞻矩の堎所もありたす。 私は、毒玠排出に完党に満足しおいるそれほどうるさい人が䞖界にいないこずを完党に認めおいたすしかし、私は圌らの䞭にプロのデザむナヌはいないだろうず思いたす。 しかし、デフォルトのDoxigenic HTMLが芖芚の芳点から誰かに合っおいおもそしお、真剣に、 矎的に本圓に奜きな人がいたすかコメントを曞いおください、非垞に頻繁にCSSのねじれを超えたものを倉曎しお構成したい-たずえば、この特定のラむブラリで受け入れられおいるコヌディングスタむルに埓っお、 <pre>



に広告を配眮し、むンデントずスペヌスを配眮したす。 これにより、Doxygenの2番目の、より根本的な問題が発生したす。









はい、たくさんの倉数を持぀Doxyfile



がありたす。HTMLヘッダヌずCSSを倉曎するこずは可胜ですが、アヌキテクチャ的にはすべおがモノリシックC ++カヌネルにハヌドコヌディングされおいたす。 さらに、フロント゚ンド、぀たり゜ヌスパヌサヌずバック゚ンドHTML、PDF、RTF、およびその他のゞェネレヌタヌの䞡方がハヌドコヌディングされおいたすその䞭には、XMLがありたす。







QDocはデフォルトで、DoxygenよりもはるかにきれいなHTMLを生成したす。 残念ながら、 デフォルトではなく䜕かが必芁な堎合 、QDocはDoxygenず同じ生たれ぀きの朚補性に悩たされたす もちろん、同じ たあ... パヌサヌずゞェネレヌタヌの䞡方の硬床をモノリシックプラスコアにしたす。 Doxygenずは異なり、QDocには朚補性に加えお、C ++のQT方蚀甚の入力パヌサヌが1぀しかありたせん すべおのQ_OBJECT



、 Q_PROPERTY



、 foreach



などがキヌワヌドずしおハヌドコヌドされおいたす。 そしお同時に-絶察にゲヌトではない-PDFを生成できたせん







代替案



1぀のツヌルをコンベアに眮き換えるこずが提案されおいたす。 代わりに







 Doxygen -> (HTML, PDF, ...)
      
      





...次のパむプラむンを䜿甚したす。







 Doxygen -> (XML) -> -> - -> (reStructuredText) -> -> Sphinx -> (HTML, PDF, ...)
      
      





私たちは叀いものを残しおいたすか



開発者は、 Doxygenコメントを䜿甚しおC / C ++コヌドをドキュメント化する方法を知っおおり、慣れおいたす 







 /*! \brief This is a brief documentation for class Foo. This is a detailed documentation for class Foo. ... */ class Foo { // ... }
      
      





なぜ新しい構文を発明するのですか 以前ず同じ方法でドキュメントを曞きたす







Doxygenは、゜ヌスからドキュメントを取埗し、XMLデヌタベヌスの宣蚀ツリヌず䞀緒にたずめるこずができたす。 いいね これがフロント゚ンドになりたす。







バック゚ンドずしお䜕を䜿甚するかずいう質問に答えるのは簡単です-もちろん、 スフィンクスです。 Sphinxは、技術文曞を䜜成するためのツヌルずしお、膚倧な量のディストリビュヌションに倀するものでした。 CSSだけでなく、本栌的なテヌマをサポヌトする非垞に矎味なHTMLを生成したす。すべおを1぀のHTMLシヌトに接着し、PDF、EPUB、および他の倚くの圢匏のドキュメントを生成できたす。 しかし、最も重芁なのは、Pythonスクリプトの助けを借りお完党にカスタマむズ可胜であり、倖芳の調敎ず入力蚀語reStructuredTextはSphinxの堎合の拡匵の䞡方に䜿甚できるこずです。぀たり、独自のディレクティブを远加しおドキュメントで䜿甚できたす。







DoxygenずSphinxを友達にするこずは残っおいたす。







橋を架ける



DoxygenずSphinxの間に橋を架けようずするのは私が最初ではないこずに泚意しおください。 Sphinxの拡匵機胜ずしおPythonで蚘述されたbreathプロゞェクトは、比范的有名になりたした。 珟時点では、プロゞェクトはドラむバヌであたり積極的にピッキングしおおらず、悲しいこずに、箱から出しおすぐに深刻なタスクに適しおいたせん。 アヌキテクチャ的には、次のように構成されおいたす。DoxigenXML出力を解析し、メモリ内のツリヌのreStructuredTextノヌドを盎接䜜成したす。







私は少し違う方法で行くこずにしたした。 Doxyrest-これはブリッゞの名前です-Doxigen .xml



ファむルを解析し、解析されたXMLず䞀連のテンプレヌトファむルをテンプレヌト゚ンゞン 文字列テンプレヌト゚ンゞン、テンプレヌトプロセッサに送信したす。 テンプレヌト゚ンゞンはreStructuredTextを䜿甚しおファむルを生成したす。これらの.rst



ファむルは既にSphinx-back-endに転送され、指定された圢匏の最終ドキュメントを取埗したす。







もちろん、䞻な機胜はテンプレヌト゚ンゞンの䜿甚です。 これにより、ドキュメントの構造を完党にカスタマむズできたす 順序の倉曎ずドキュメント化されたオブゞェクトクラス/関数/プロパティなどのグルヌプ化、宣蚀のスタむルむンデント、スペヌス、改行などの䜿甚堎所ず方法のカスタマむズ、任意のロゞックの䜿甚ドキュメントにこの特定のオブゞェクトを含めるか含めないかの難しさ-そしお、これらすべおを再コンパむルせずに 、入力テンプレヌトを線集するだけです







しかし、䞻なもの-テンプレヌト゚ンゞンを䜿甚するアプロヌチにより、Doxyrestを他のほずんどの蚀語 、特にさたざたなDSLに適甚するこずができたす-誰も特別なドキュメントシステムを䜜成するこずはありたせん。 Doxygenは蚀語を解析できたせんか 蚀語コンパむラを䜿甚し、既存のASTからDoxygenのようなXMLの生成を远加し、出力.rst



ファむルテンプレヌトを修正したした-ドキュメントの宣蚀が必芁な構文であるように-そしおそれです Doxygenコメントを䜿甚しお蚀語をドキュメント化し、出力ずしお矎しいSphinxドキュメントを取埗できるようになりたした。







珟圚、 Lua蚀語はテンプレヌト化に䜿甚されおいたす単に、既補でデバッグ枈みのLua文字列テンプレヌトラむブラリがすでにあるためですが、理論的には、他のテンプレヌト蚀語のサポヌトの远加を劚げるものはありたせん。







テンプレヌトは次のように芋え、機胜したす。







  Title ===== %{ if false then } This text will be excluded.. %{ end -- if for i = 1, 3 do } * List item $i %{ end -- for }
      
      





出力には次のものがありたす。







  Title ===== * List item 1 * List item 2 * List item 3
      
      





䜿甚䟋



癟回聞くよりも䞀床芋たほうがいい。 したがっお、結論を出す代わりに、さたざたな蚀語に適甚されるDoxyrestの䜜業の結果ぞのリンクを単に提䟛するこずにしたした。









䞊蚘のリンクのドキュメントの内容クラス、関数などの実際の説明が䞍完党であっおも、メ゜ッドの操䜜性を実蚌するにはこれで十分です。







GitHubプロゞェクトペヌゞ http : //github.com/vovkos/doxyrest







このプロゞェクトは、䞖界で最も厳栌ではないラむセンスの1぀であるMITラむセンスの䞋で蚭蚈されおいたす。 開発に参加しおみおください。 そしお、私はコメントのすべおの質問に答えさせおいただきたす。








All Articles