Classic literate programming has language specific tools (WEB for Pascal, CWEB for C++, and FWEB for Fortran). The language independent approach sacrifices some pretty-printing and indexing abilities for generality (noweb, FunnelWeb, and nuweb). Other approaches recognize pseudo statements written as comments in the source code instead of relying on a secondary WEB source file. These systems are used for interface documentation (JavaDoc, doxygen, DOC++, autoduck, POD) or for literate programming (CLiP, cnoweb).
Literate Programming Tools
- The CWEB System of Structured Documentation is a version of WEB for documenting C, C++, and Java programs. WEB was adapted to C by Silvio Levy in 1987, and since then both Knuth and Levy have revised and enhanced the system in many ways, notably to support C++ and ANSI C. Thus CWEB combines TeX with today's most widely used professional programming languages.
- nuweb works with any programming language and LaTeX.
- noweb is designed to meet the needs of literate programmers while remaining as simple as possible. Its primary advantages are simplicity, extensibility, and language-independence. Noweb uses 5 control sequences to WEB's 27. The noweb manual is only 3 pages; an additional page explains how to customize its LaTeX output. Noweb works "out of the box" with any programming language, and supports TeX, latex, and HTML back ends. A back end to support full hypertext or indexing takes about 250 lines; a simpler one can be written in 40 lines of awk. The primary sacrifice relative to WEB is that code is seldom prettyprinted.
- FunnelWeb is a powerful literate-programming macro preprocessor that enables you to weave programs and documentation together. FunnelWeb is a production quality tool that was specifically engineered for practical everyday use.
- Rambutan is a literate programming system for Java, quite similar to CWEB and the original WEB system.
- FWEB is a WEB system of structured documentation for multiple languages (FORTRAN).
- SGML and Literate Programming Collection of references for literate programming techniques and style in the context of descriptive markup languages, e.g., SGML, XML, DSSSL, HyTime, etc. Numerous researchers have observed that the goals of information re-use and data normalization embraced by both literate programming and SGML-based markup languages provide the basis for using the two technologies together.
- xmLP is a literate programming tool written in XSL-T. xmLP differs from traditional literate programming tools when it comes to weaving. Traditionally, weaving involves both generating cross-reference information and producing formatted output. However, tools like XSL-T make it unnecessary for an XML literate programming tool to deal with display rendering. Hence the xmLP weaver is intentionally minimalist, and does nothing except add cross-reference information to the original literate document.
- OCAMAWEB is a CWEB like literate programming tool. It is designed to target all languages and actually has a version targeting the MATLAB language. OCAMAWEB is written in the OCAML programming language. OCAMAWEB is actually intensively used at MIRIAD Technologies to produce technical documentation for MATLAB codes.
- Thinking With Style This article is itself a software book. You can compile this book into an executable program. A ?What You See Is What You Get? (WSYWIG) editor (Word 2003) created the software book. The book is stored as XML.
- Amrita is a system for communicating software-based ideas and information. It operates as a cross between a document preparation system, a computational engine, and a programming language.
Literate Programming - Editors
- Leo is a new kind of programmer's editor. Leo shows user-created relationships among any kind data: computer programs, web sites, etc. Leo is an outlining editor for programmers. Leo can handle any text-based programming language: Java, C, C++, Pascal, Fortran, Perl, Icon, Python, Smalltalk, Cobol, whatever. Leo can also generate HTML and make, shell or batch files.
- VIM is an improved version of the editor "vi", one of the standard text editors on UNIX systems. VIM adds many of the features that you would expect in an editor: Unlimited undo, syntax coloring, split windows, visual selection, graphical user interface (read: menus, mouse control, scrollbars, text selection), and much much more. Syntax highlighting for CWEB source code is included.
Literate Programming - Supporting Tools
- MikTex TeX is a typesetting system written by Donald Knuth, who says that it is "intended for the creation of beautiful books and especially for books that contain a lot of mathematics".
- Acrobat Reader View, navigate, and print PDF (portable document format) files.
- Cygwin tools are ports of the popular GNU development tools for Windows 9x/ME/NT/2000. As a result, it is possible to easily port many significant Unix programs without the need for extensive changes to the source code. Even if the development tools are of little to no use to you, you may have interest in the many standard Unix utilities provided with the package. They can be used both from the bash shell (provided) or from the standard Windows command shell.
Documentation Tools (Free Software)
- Doxygen is a documentation system for C, C++ and IDL. It can generate an on-line class browser (in HTML) and/or an off-line reference manual (in LaTeX) from a set of documented source files. Doxygen can also be configured to extract the code-structure from undocumented source files. This can be very useful to quickly find your way in large source distributions.
- Sandcastle is used by Microsoft to build .NET Framework documentation that ships as a part of Visual Studio help. With Sandcastle you can produce quality, comprehensive, familiar MSDN-like documentation. Sandcastle works with or without authored comments and supports Generics and .NET Framework. Also see the Sandcastle builder
- DOC++ is a documentation system for C/C++ and Java generating both, LaTeX output for high quality hardcopies and HTML output for sophisticated online browsing of your documentation. The documentation is extracted directly from the C++ header or Java class files.
- ROBODoc is a documentation tool similar to JavaDoc. It extracts the documentation from comment headers in the source code and formats it in HTML, RTF, TeX, or ASCII. It works with C, Tcl/Tk, FORTAN, and many others languages.
- AutoDuck is a command-line utility that extracts specially tagged comment blocks from programming source files and generates rich text files containing the contents of those comment blocks. Autoduck has traditionally been used to document programming APIs. Placing API documentation within the source files helps programmers disseminate information about a developing codebase.
- ProgDoc a small tool box of utilities which can be used to easily produce nicely formatted PostScript, PDF and HTML documentations for software projects with LaTeX. It is especially useful for mixed language projects and for documenting already finished programs and libraries. Due to it's sophisticated syntax highlighting capabilities (currently implemented for C/C++/Java, Scheme/Elisp and XML) it is also a good choice for writing articles or technical white papers which contain source code examples.
- LXR is a general purpose source code indexer and cross-referencer that provides web-based browsing of source code with links to the definition and usage of any identifier. Supports multiple languages.
- AdaBrowse is a javadoc-like HTML generator for Ada 95 library unit specifications.
Documentation Tools (Commercial)
- DocJet is a tool for documenting C, C++, Java and Visual Basic programs. DocJet is the most powerful and most flexible tool of its kind on the market, offering complete control over the output as well as the ability to make sense out of any commenting style imaginable.
- Imagix 4D Our solution for C and C++ developers, Imagix 4D, helps you reverse engineer software that is large, complex, unfamiliar or old, by automating the analysis and browsing of your code. You're able to achieve faster, more accurate program comprehension, resulting in fewer software defects while requiring less investment of precious engineering resources.
- Source Navigator is an advanced source code analysis tool (i.e., source code browser) that lets you understand complex source code projects faster. It extracts information from the source code of existing C, C++, Java, Tcl, FORTRAN, Cobol, and assembly programs and uses this information to build project databases. The project database represents internal program structures and relationships between program components.
- C-DOC Professional tools analyze existing C, C++, or Java programs and generate caller/called tree diagrams, class hierarchy trees, class inheritance/containment reports, identifier cross-references, reformat source or action-diagram listings, count code/comments and calculate path cyclomatic complexity, generate/insert/update function comment blocks.
- Scientific Toolworks They parse Ada 83, Ada 95, FORTRAN 77, FORTRAN 90, K&R C, ANSI C and C++ source code to reverse engineer, automatically document, calculate code metrics, and help you understand, navigate and ultimately maintain source code that has grown too large for one person (or even a group) to know.
- CodeSurfer is the first tool to provide precise interprocedural program slicing and pointer analysis for C programmers. This new technology lets you analyze and understand source code faster and with greater precision than previous generation tools.
- Doc-O-Matic is the most flexible and user friendly documentation system available. Using Doc-O-Matic you can get rid of those tag-based approaches which make your source code ugly and hard-to-read.
- WinA&D is a comprehensive tool for doing system analysis, requirements specification, software design, code generation and scriptable HTML reports. It supports a broad range of methods and notations including structured analysis and design, object-oriented analysis and design, data modeling and real-time, multi-task design.
- Headway is a source code visualization and comprehension tool for Java and C++ developers. Headway reView parses class files and source code to reverse engineer a visual representation of the composition and dependencies of the application. The resulting diagrams use UML notation, for broad appeal, but these are not simple UML models.
- InstantC the recursive, visual browser makes it easy to follow down all the references to a symbol. At any level, the programmer can start a new browse to answer another question ("Well, who calls that function?"), and then resume the previous exploration. InstantC links the source code together in a manner similar to hypertext. InstantC's source code formatting will show the code to each programmer formatted in a way that he finds easiest to read and understand.
- TwinText A large amount of duplication is normally involved when the code and its documentation are written and maintained as separate entities. Also, as code grows, so does the complexity of the related documentation and the effort needed to maintain both in sync. TwinText, a friendly source code documentation solution, solves this problem by generating HTML and HTML Help documentation directly from code comments. Normally tags, markup or specific comment boxes are not needed, so code comments remain clean, readable and familiar.
- XsdDoc is a documentation tool that automatically generates detailed reports from XML Schema definitions. XsdDoc transforms plain XML files into cross-referenced and hyperlinked HTML documents for easy website publication and collaboration among developers.
- Visio enables you to communicate effectively with easy-to-assemble drawings and diagrams. Create organizational charts and flowcharts; draw technical schematics and annotate CAD drawings; build Web site maps; and manually or automatically work on network, software, and database design.
- Adobe Acrobat Convert electronic documents into Adobe PDF files that can be viewed, annotated, and printed on any computer.
- FinePrint saves you money on paper and toner, weight in your briefcase, and time and hassle in managing your print jobs. You can print 2, 4, or 8 pages on a single sheet of paper.
Lint - Static Checkers
- PC Lint will check your C/C++ source code and find bugs, glitches, inconsistencies, non-portable constructs, redundant code, and much more. It looks across multiple modules, and so, enjoys a perspective your compiler does not have.
- CodeCheck is designed to solve all of your portability, maintainability, complexity, reusability, quality assurance, style analysis, library/class management, code review, software metric, standards adherence, and C++ corporate compliance problems.
- Klocwork provides automated solutions that analyze and understand C, C++, and Java code. Our solutions provide predictable and measurable ROI by: preventing new defects from entering the build, detecting security vulnerabilities and existing defects, providing powerful architectural analyses, and delivering comprehensive development reporting.
- QA C++ Deep Flow Static Analyzer Detects language implementation errors, inconsistencies, obsolescent features and programming standard transgressions quickly and efficiently, avoiding delays at a later and more expensive stage of the development cycle. QA·C++ combines many industry-standard analysis metrics including cyclomatic complexity and estimated static program paths with easy-to-understand, flexible reporting. Our Code Integrity Management System (CIMS) uses QA C, QA C++, and special product configurations such as the Misra Compliancy Module.
- Logiscope provides tools to automatically check software code against a set of project-defined programming rules, thus avoiding programming errors. During code reviews, Logiscope locates the modules that are responsible of 80% of errors. Project leaders and quality engineers use Logiscope to assess the overall software quality.
- Parasoft C++Test is a unique coding standards enforcement tool that uses patented Source Code Analysis technology to help developers prevent errors and standardize C/C++ code automatically. CodeWizard spontaneously enforces C/C++ coding standards, saving hours of labor-intensive analysis.
- FlexiSoft Solutions is a tool for developers, providing flexible, automated coding standards enforcement for Visual Studio .NET, including support for VB .NET, C# and J#. Working directly against your source code, Standards Master 2004 checks your naming conventions, commenting, and general code construction. This powerful tool can even fix many of the errors it finds for you automatically while you work!
Lint - Dynamic Checkers
- BoundsChecker provides clear, detailed analyses of programming errors, many of which are unique to C++. It detects and diagnoses errors in static, stack and heap memory, and in memory and resource leaks. BoundsChecker validates over 8,700 APIs and OLE Methods at run-time, including the latest Windows APIs, ODBC, ActiveX, DirectX, COM, and Internet APIs.
Drawing and Mind Mapping
- CorelDRAW Graphics Suite delivers powerful integrated tools for illustration, page layout, photo editing and painting.
- ConceptDraw Take advantage of this unique set of business graphics tools designed to enable professional users to visually develop their ideas, plan and track projects and present various data, structures and processes in clear, visual flowcharts and diagrams.
- FreeMind is a premier free mind-mapping software written in Java. The recent development has hopefully turned it into high productivity tool. We are proud that the operation and navigation of FreeMind is faster than that of MindManager because of one-click "fold / unfold" and "follow link" operations.
- Mindjet MindManager transforms brainstorming ideas, strategic thinking, and business information into blueprints for action, enabling teams and organizations to work faster, smarter, and with greater coordination. It extends core mapping functionality with a host of simple tools?collaboration, distribution, administration?making it easy for business professionals to quickly deliver bottom-line benefits enterprise-wide.
- Crystal FLOW automatically displays flowcharts from source code. Its unique combination of condensed view and detailed view makes it a very effective tool. The condensed view shows the graphical view of the whole function - not just a part of it. One look and you have a feel for the whole function. You can navigate and understand the detailed view much faster than reading code.