source: trunk/lib/HtmlBuf.cc @ 991

Last change on this file since 991 was 991, checked in by Peter Johansson, 12 years ago

closes #430. Declare in HTML header that output is encoded in UTF-8. HtmlBuf? only massages characters that are special mark-up characters. We do not massage non-ascii chars such as umlaut and friends because most modern browsers should be able to display those anyway, and if they don't it is not crucial as it typically only involves comments in the blame output.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 1.6 KB
Line 
1// $Id: HtmlBuf.cc 991 2009-12-16 00:08:17Z peter $
2
3/*
4  This file is part of svndigest, http://dev.thep.lu.se/svndigest
5
6  svndigest is free software; you can redistribute it and/or modify it
7  under the terms of the GNU General Public License as published by
8  the Free Software Foundation; either version 3 of the License, or
9  (at your option) any later version.
10
11  svndigest is distributed in the hope that it will be useful, but
12  WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  General Public License for more details.
15
16  You should have received a copy of the GNU General Public License
17  along with svndigest. If not, see <http://www.gnu.org/licenses/>.
18*/
19
20#include "HtmlBuf.h"
21
22#include <cstdio>
23#include <iostream>
24#include <string>
25
26namespace theplu{
27namespace svndigest{
28
29  HtmlBuf::HtmlBuf(std::streambuf& buf)
30    : std::streambuf(), buf_(buf) 
31  {
32    map_['"']=std::string("&quot;");
33    map_['\'']=std::string("\'");
34    map_['\n']=std::string("<br />");
35    map_['<']=std::string("&lt;");
36    map_['>']=std::string("&gt;");
37    map_['&']=std::string("&amp;");
38    map_[' ']=std::string("&nbsp;");
39    // This should be configurable, but for now indentation is two spaces.
40    map_['\t']=std::string("&nbsp;&nbsp;");
41  }
42
43  HtmlBuf::int_type HtmlBuf::overflow (HtmlBuf::int_type c)
44  {
45    std::map<char, std::string>::const_iterator i = map_.find(c);
46    if (i==map_.end())
47      return buf_.sputc(c);
48    // writing
49    if (buf_.sputn(i->second.c_str(), i->second.size()) == 
50        static_cast<std::streamsize>(i->second.size()))
51      return c;
52    return EOF;
53  }
54
55}} // end of namespace svndigest and namespace theplu
Note: See TracBrowser for help on using the repository browser.