| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 | 
							- /*=========================================================================
 
-   Program:   CMake - Cross-Platform Makefile Generator
 
-   Module:    $RCSfile$
 
-   Language:  C++
 
-   Date:      $Date$
 
-   Version:   $Revision$
 
-   Copyright (c) 2002 Kitware, Inc., Insight Consortium.  All rights reserved.
 
-   See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
 
-      This software is distributed WITHOUT ANY WARRANTY; without even 
 
-      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
 
-      PURPOSE.  See the above copyright notices for more information.
 
- =========================================================================*/
 
- #include "cmDocumentationFormatterText.h"
 
- cmDocumentationFormatterText::cmDocumentationFormatterText()
 
- :cmDocumentationFormatter()
 
- ,TextWidth(77)
 
- ,TextIndent("")
 
- {
 
- }
 
- void cmDocumentationFormatterText::PrintSection(std::ostream& os,
 
-                   const cmDocumentationEntry* section,
 
-                   const char* name)
 
- {
 
-   if(name)
 
-     {
 
-     os <<
 
-       "---------------------------------------"
 
-       "---------------------------------------\n";
 
-     os << name << "\n\n";
 
-     }
 
-   if(!section) { return; }
 
-   for(const cmDocumentationEntry* op = section; op->brief; ++op)
 
-     {
 
-     if(op->name)
 
-       {
 
-       if(op->name[0])
 
-         {
 
-         os << "  " << op->name << "\n";
 
-         }
 
-       this->TextIndent = "       ";
 
-       this->PrintFormatted(os, op->brief);
 
-       if(op->full)
 
-         {
 
-         os << "\n";
 
-         this->PrintFormatted(os, op->full);
 
-         }
 
-       }
 
-     else
 
-       {
 
-       this->TextIndent = "";
 
-       this->PrintFormatted(os, op->brief);
 
-       }
 
-     os << "\n";
 
-     }
 
- }
 
- void cmDocumentationFormatterText::PrintPreformatted(std::ostream& os, 
 
-                                                      const char* text)
 
- {
 
-   bool newline = true;
 
-   for(const char* ptr = text; *ptr; ++ptr)
 
-     {
 
-     if(newline)
 
-       {
 
-       os << this->TextIndent;
 
-       newline = false;
 
-       }
 
-     os << *ptr;
 
-     if(*ptr == '\n')
 
-       {
 
-       newline = true;
 
-       }
 
-     }
 
-   os << "\n";
 
- }
 
- void cmDocumentationFormatterText::PrintParagraph(std::ostream& os, 
 
-                                                   const char* text)
 
- {
 
-   os << this->TextIndent;
 
-   this->PrintColumn(os, text);
 
-   os << "\n";
 
- }
 
- void cmDocumentationFormatterText::SetIndent(const char* indent)
 
- {
 
-   this->TextIndent = indent;
 
- }
 
- void cmDocumentationFormatterText::PrintColumn(std::ostream& os, 
 
-                                                const char* text)
 
- {
 
-   // Print text arranged in an indented column of fixed witdh.
 
-   const char* l = text;
 
-   int column = 0;
 
-   bool newSentence = false;
 
-   bool firstLine = true;
 
-   int width = this->TextWidth - static_cast<int>(strlen(this->TextIndent));
 
-   
 
-   // Loop until the end of the text.
 
-   while(*l)
 
-     {
 
-     // Parse the next word.
 
-     const char* r = l;
 
-     while(*r && (*r != '\n') && (*r != ' ')) { ++r; }
 
-     
 
-     // Does it fit on this line?
 
-     if(r-l < (width-column-(newSentence?1:0)))
 
-       {
 
-       // Word fits on this line.
 
-       if(r > l)
 
-         {
 
-         if(column)
 
-           {
 
-           // Not first word on line.  Separate from the previous word
 
-           // by a space, or two if this is a new sentence.
 
-           if(newSentence)
 
-             {
 
-             os << "  ";
 
-             column += 2;
 
-             }
 
-           else
 
-             {
 
-             os << " ";
 
-             column += 1;
 
-             }
 
-           }
 
-         else
 
-           {
 
-           // First word on line.  Print indentation unless this is the
 
-           // first line.
 
-           os << (firstLine?"":this->TextIndent);
 
-           }
 
-         
 
-         // Print the word.
 
-         os.write(l, static_cast<long>(r-l));
 
-         newSentence = (*(r-1) == '.');
 
-         }
 
-       
 
-       if(*r == '\n')
 
-         {
 
-         // Text provided a newline.  Start a new line.
 
-         os << "\n";
 
-         ++r;
 
-         column = 0;
 
-         firstLine = false;
 
-         }
 
-       else
 
-         {
 
-         // No provided newline.  Continue this line.
 
-         column += static_cast<long>(r-l);
 
-         }
 
-       }
 
-     else
 
-       {
 
-       // Word does not fit on this line.  Start a new line.
 
-       os << "\n";
 
-       firstLine = false;
 
-       if(r > l)
 
-         {
 
-         os << this->TextIndent;
 
-         os.write(l, static_cast<long>(r-l));
 
-         column = static_cast<long>(r-l);
 
-         newSentence = (*(r-1) == '.');
 
-         }
 
-       else
 
-         {
 
-         column = 0;
 
-         }
 
-       }
 
-     // Move to beginning of next word.  Skip over whitespace.
 
-     l = r;
 
-     while(*l && (*l == ' ')) { ++l; }    
 
-     }
 
- }
 
 
  |