2009-10-21 8 views
5

Tôi đang tạo tài liệu nội bộ cho một dự án C++ bằng Doxygen. Tôi có Doxygen bao gồm nguồn cho các phương pháp, vv, nhưng điều này làm cho loại trang khó quét. Tôi muốn nó hoạt động như rdoc và ẩn nguồn trong một khối được thu gọn theo mặc định.Làm cách nào để tạo các phần mã có thể thu gọn theo kiểu rdoc?

Tôi nghĩ rằng HTML_DYNAMIC_SECTIONS có thể cho phép tôi làm điều này, nhưng than ôi, thay đổi nói rằng tùy chọn chỉ ảnh hưởng đến biểu đồ và đồ thị.

Có lẽ tôi có thể làm điều đó bằng cách chỉnh sửa LAYOUT_FILE?

Nhưng dù sao, những người thông minh, làm thế nào tôi có thể ép buộc Doxygen tạo ra các phần mã có thể thu gọn?

Trả lời

4

nếu includ [ing] nguồn cho các phương pháp, vv, [...] làm cho các loại trang khó để quét, tại sao không làm bạn chỉ liên kết với nó (SOURCE_BROWSER = YES) thay vì bao gồm nó (INLINE_SOURCES = YES)? điều này sẽ làm cho các trang dễ dàng hơn để quét và tải nhanh hơn và nguồn vẫn có thể truy cập được (với chi phí tải thêm một trang nguồn). phụ thuộc vào tần suất bạn thực sự cần truy cập nguồn, tôi đoán vậy.

đó đang được nói, có một cách để tạo ra phần đang gập lại (bạn sẽ phải sửa đổi mã nguồn và biên dịch lại Doxygen, mặc dù):

<div class="dynheader"><div class="dynsection"> 
    [collapsible section] 
    </div></div> 
  • bao gồm mã phần được đánh dấu như vậy: <div class="fragment"><pre class="fragment">...</pre></div>
  • do đó, để làm cho mã bao gồm phần lắp ráp, bạn phải hoặc là

    • sửa đổi the code that generates các <div class="fragment"><pre class="fragment">...</pre></div> để tạo <div class="dynheader"><div class="dynsection">...</div></div> (và có lẽ điều chỉnh một số css), hoặc
    • thay đổi javascript initDynSections() function quét và thu gọn các phần có thể thu gọn để nhận ra <div class="fragment"><pre class="fragment"> là một trong số chúng.

thực hiện (hoặc đi theo con đường SOURCE_BROWSER :)) là trái như một bài tập cho người đọc. chúc may mắn!

oh, và nếu bạn nên thành công với một bản vá, nó sẽ là tuyệt vời nếu bạn có thể submit it để dimitri để ông có thể bao gồm nó trong một phiên bản trong tương lai. cảm ơn!

+0

> tại sao bạn không liên kết với nó (SOURCE_BROWSER = YES) thay vì bao gồm nó (INLINE_SOURCES = YES)? Bởi vì tôi thích cách thức hoạt động của rdoc. Một phần tôi nghĩ đó là bởi vì với INLINE_SOURCES bạn vẫn phải cuộn đến định nghĩa hàm. > bạn sẽ phải sửa đổi nguồn và biên dịch Doxygen, mặc dù Vì vậy, tôi cho rằng câu trả lời là "không, doxygen không thể làm điều đó trừ khi bạn tự viết nó." Đủ tốt. Và cảm ơn cho các hướng dẫn thực sự chi tiết về * làm thế nào * để thêm nó bản thân mình ... nếu tôi thực hiện sửa đổi đó tôi sẽ chắc chắn và gửi nó. –

1

đến đây bằng cách sử dụng công cụ tìm kiếm theo lựa chọn của tôi, tôi chỉ muốn để lại một lưu ý ở đây rằng không nhất thiết phải sửa đổi bất kỳ nguồn doxygen nào.

Khi câu hỏi này được hỏi là có lẽ không có khả năng để embed pure html sử dụng thẻ htmlonly nhưng với điều này trong tâm trí người ta có thể tạo các mục chứa có thể gập lại lạm dụng một hàm có tên toggleVisibility

function toggleVisibility(linkObj) 
{ 
    var base = $(linkObj).attr('id'); 
    var summary = $('#'+base+'-summary'); 
    var content = $('#'+base+'-content'); 
    var trigger = $('#'+base+'-trigger'); 
    var src=$(trigger).attr('src'); 
    if (content.is(':visible')===true) { 
    content.hide(); 
    summary.show(); 
    $(linkObj).addClass('closed').removeClass('opened'); 
    $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); 
    } else { 
    content.show(); 
    summary.hide(); 
    $(linkObj).removeClass('closed').addClass('opened'); 
    $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); 
    } 
    return false; 
} 

rằng hiện đang có sẵn mỗi thời gian tài liệu được tạo ra trong một tệp có tên dynsections.js được đặt trong thư mục gốc của tài liệu.

Về mã này, người ta biết được các điều kiện để có thể tạo mã có thể gập lại từ tài liệu của riêng mình bằng cách sử dụng Javascript tránh lỗi thực hiện bên trong trong chức năng này và ngăn chặn mã javascript tiếp tục bị giải thích.

  1. yếu tố dom với một định danh duy nhất id
  2. một yếu tố dom đóng gói với định danh duy nhất id -summary
  3. một yếu tố dom đóng gói với định danh duy nhất id -content yếu tố
  4. khác dom đóng gói với định danh duy nhất id -trigger
  5. id phần tử trình kích hoạt phải chứa thuộc tính src có ít nhất 1 ký tự
  6. các class thuộc tính của container chính không thành vấn đề

Với theese điều kiện trong tâm trí người ta có thể tạo ra các đoạn mã sau.

## <a href="javascript:toggleVisibility($('#example-div'))">Fold me</a> 
## <div id="example-div"> 
## <div id="example-div-summary"></div> 
## <div id="example-div-content"> 
##  <pre> 
##  foo 
##  bar 
##  </pre> 
## </div> 
## <div id="example-div-trigger" src="-"></div> 
## </div> 
## @htmlonly <script type="text/javascript">$("#example-div").ready(function() { toggleVisibility($("#example-div")); });</script> @endhtmlonly 

Mã doxygen trên được sử dụng để tài liệu mã bash sử dụng bash-doxygen để nó có thể nhìn một chút khác nhau từ mã doxygen tinh khiết. Phần đầu tiên liên quan đến các container div đã được mô tả đề cập đến các điều kiện để phù hợp với nguồn của hàm toggleVisibility và làm cho nó thực thi mà không có bất kỳ lỗi nào điều chỉnh các nhận xét doxygen cho các nhu cầu của chúng ta.

Tiền tố id duy nhất được sử dụng tại đây là example-div. Trong dòng một có một thiết lập liên kết hyperref để mở ra một phần bằng cách sử dụng javascript trực tiếp cùng với một số mã jQuery.

Còn lại là một lớp lót ở cuối. Nó chứa đoạn mã jQuery cần được chạy để ban đầu gấp phân khúc cụ thể. Đối với các bash-doxygen (và có lẽ các ngôn ngữ khác) khối cần phải là một lớp lót vì phạm vi khối của tập lệnh

Thông thường nội dung giữa \ htmlonly và \ endhtmlonly được chèn vào. Khi bạn muốn chèn đoạn HTML có phạm vi chặn như bảng hoặc danh sách sẽ xuất hiện bên ngoài <p> .. </p >, điều này có thể dẫn đến HTML không hợp lệ. Bạn có thể sử dụng \ htmlonly [block] để làm cho doxygen kết thúc đoạn hiện tại và khởi động lại nó sau \ endhtmlonly.

như được chú ý trong số doxygen documentation và nhận xét bên dưới giải pháp được đánh dấu bên phải của stackoverflow answer on including script tags in doxygen documentations.

Cảm ơn bạn đã đọc. Hy vọng điều này sẽ giúp một số người đến đây.