| /*============================================================================ |
| CMake - Cross Platform Makefile Generator |
| Copyright 2000-2009 Kitware, Inc., Insight Software Consortium |
| |
| Distributed under the OSI-approved BSD License (the "License"); |
| see accompanying file Copyright.txt for details. |
| |
| This software is distributed WITHOUT ANY WARRANTY; without even the |
| implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
| See the License for more information. |
| ============================================================================*/ |
| #include "cmDocumentationFormatter.h" |
| |
| cmDocumentationFormatter::cmDocumentationFormatter() |
| { |
| } |
| |
| cmDocumentationFormatter::~cmDocumentationFormatter() |
| { |
| } |
| |
| void cmDocumentationFormatter::PrintFormatted(std::ostream& os, |
| const char* text) |
| { |
| if(!text) |
| { |
| return; |
| } |
| const char* ptr = text; |
| while(*ptr) |
| { |
| // Any ptrs starting in a space are treated as preformatted text. |
| std::string preformatted; |
| while(*ptr == ' ') |
| { |
| for(char ch = *ptr; ch && ch != '\n'; ++ptr, ch = *ptr) |
| { |
| preformatted.append(1, ch); |
| } |
| if(*ptr) |
| { |
| ++ptr; |
| preformatted.append(1, '\n'); |
| } |
| } |
| if(preformatted.length()) |
| { |
| this->PrintPreformatted(os, preformatted.c_str()); |
| } |
| |
| // Other ptrs are treated as paragraphs. |
| std::string paragraph; |
| for(char ch = *ptr; ch && ch != '\n'; ++ptr, ch = *ptr) |
| { |
| paragraph.append(1, ch); |
| } |
| if(*ptr) |
| { |
| ++ptr; |
| paragraph.append(1, '\n'); |
| } |
| if(paragraph.length()) |
| { |
| this->PrintParagraph(os, paragraph.c_str()); |
| } |
| } |
| } |
| |
| //---------------------------------------------------------------------------- |
| std::string |
| cmDocumentationFormatter::ComputeSectionLinkPrefix(std::string const& name) |
| { |
| // Map from section name to a prefix for links pointing within the |
| // section. For example, the commands section should have HTML |
| // links to each command with names like #command:ADD_EXECUTABLE. |
| if(name.find("Command") != name.npos) |
| { |
| return "command"; |
| } |
| else if(name.find("Propert") != name.npos) |
| { |
| if(name.find("Global") != name.npos) |
| { |
| return "prop_global"; |
| } |
| else if(name.find("Direct") != name.npos) |
| { |
| return "prop_dir"; |
| } |
| else if(name.find("Target") != name.npos) |
| { |
| return "prop_tgt"; |
| } |
| else if(name.find("Test") != name.npos) |
| { |
| return "prop_test"; |
| } |
| else if(name.find("Source") != name.npos) |
| { |
| return "prop_sf"; |
| } |
| return "property"; |
| } |
| else if(name.find("Variable") != name.npos) |
| { |
| return "variable"; |
| } |
| else if(name.find("Polic") != name.npos) |
| { |
| return "policy"; |
| } |
| else if(name.find("Module") != name.npos) |
| { |
| return "module"; |
| } |
| else if(name.find("Name") != name.npos || |
| name.find("Introduction") != name.npos) |
| { |
| return "name"; |
| } |
| else if(name.find("Usage") != name.npos) |
| { |
| return "usage"; |
| } |
| else if(name.find("Description") != name.npos) |
| { |
| return "desc"; |
| } |
| else if(name.find("Generators") != name.npos) |
| { |
| return "gen"; |
| } |
| else if(name.find("Options") != name.npos) |
| { |
| return "opt"; |
| } |
| else if(name.find("Copyright") != name.npos) |
| { |
| return "copy"; |
| } |
| else if(name.find("See Also") != name.npos) |
| { |
| return "see"; |
| } |
| else if(name.find("SingleItem") != name.npos) |
| { |
| return "single_item"; |
| } |
| else |
| { |
| std::cerr |
| << "WARNING: ComputeSectionLinkPrefix failed for \"" << name << "\"" |
| << std::endl; |
| return "other"; |
| } |
| } |