lib/Trac.h

Code
Comments
Other
Rev Date Author Line
286 07 May 07 peter 1 #ifndef _theplu_svndigest_trac_
286 07 May 07 peter 2 #define _theplu_svndigest_trac_
286 07 May 07 peter 3
286 07 May 07 peter 4 // $Id$
286 07 May 07 peter 5
286 07 May 07 peter 6 /*
1635 30 Mar 23 peter 7   Copyright (C) 2007 Peter Johansson
1635 30 Mar 23 peter 8   Copyright (C) 2008 Jari Häkkinen, Peter Johansson
1635 30 Mar 23 peter 9   Copyright (C) 2009 Peter Johansson
286 07 May 07 peter 10
687 04 Aug 08 peter 11   This file is part of svndigest, http://dev.thep.lu.se/svndigest
286 07 May 07 peter 12
286 07 May 07 peter 13   svndigest is free software; you can redistribute it and/or modify it
286 07 May 07 peter 14   under the terms of the GNU General Public License as published by
693 11 Sep 08 jari 15   the Free Software Foundation; either version 3 of the License, or
286 07 May 07 peter 16   (at your option) any later version.
286 07 May 07 peter 17
286 07 May 07 peter 18   svndigest is distributed in the hope that it will be useful, but
286 07 May 07 peter 19   WITHOUT ANY WARRANTY; without even the implied warranty of
286 07 May 07 peter 20   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
286 07 May 07 peter 21   General Public License for more details.
286 07 May 07 peter 22
286 07 May 07 peter 23   You should have received a copy of the GNU General Public License
693 11 Sep 08 jari 24   along with svndigest. If not, see <http://www.gnu.org/licenses/>.
286 07 May 07 peter 25 */
286 07 May 07 peter 26
286 07 May 07 peter 27 #include <string>
286 07 May 07 peter 28
286 07 May 07 peter 29 namespace theplu{
286 07 May 07 peter 30 namespace svndigest{
286 07 May 07 peter 31
286 07 May 07 peter 32   class HtmlStream;
286 07 May 07 peter 33
286 07 May 07 peter 34   ///
286 07 May 07 peter 35   /// Class responsible for filtering log messages and detect
286 07 May 07 peter 36   /// trac:links and create appropriate anchors.
286 07 May 07 peter 37   ///
286 07 May 07 peter 38   class Trac
286 07 May 07 peter 39   {
286 07 May 07 peter 40   public:
286 07 May 07 peter 41     ///
286 07 May 07 peter 42     /// \Constructor
286 07 May 07 peter 43     ///
286 07 May 07 peter 44     Trac(HtmlStream& html);
1513 23 Sep 12 peter 45
286 07 May 07 peter 46     ///
286 07 May 07 peter 47     ///
1513 23 Sep 12 peter 48     ///
317 17 May 07 peter 49     void print(std::string str, size_t width);
286 07 May 07 peter 50
286 07 May 07 peter 51   private:
317 17 May 07 peter 52     /**
317 17 May 07 peter 53      */
317 17 May 07 peter 54     std::string anchor_text(std::string::const_iterator first,
317 17 May 07 peter 55                             std::string::const_iterator last,
317 17 May 07 peter 56                             std::string::const_iterator last_trunc);
308 12 May 07 peter 57     ///
308 12 May 07 peter 58     /// @see changeset1 changeset2 changeset3
308 12 May 07 peter 59     ///
308 12 May 07 peter 60     /// @return true if any of changesetX returns true
308 12 May 07 peter 61     ///
1513 23 Sep 12 peter 62     bool changeset(const std::string::const_iterator& first,
768 31 Jan 09 peter 63                    std::string::const_iterator& iter,
317 17 May 07 peter 64                    const std::string::const_iterator& last,
317 17 May 07 peter 65                    const std::string::const_iterator& last_trunc);
288 07 May 07 peter 66
308 12 May 07 peter 67     ///
308 12 May 07 peter 68     /// \brief search for 'r123'
308 12 May 07 peter 69     ///
308 12 May 07 peter 70     /// Search in range [\a first, \a last) for expression
768 31 Jan 09 peter 71     /// /r(\d+)/. In addition character before cannot be
768 31 Jan 09 peter 72     /// alpha-numeric, and character after expression cannot be
768 31 Jan 09 peter 73     /// alpha-numeric or ':' (beginning/end of string is allowed). If
768 31 Jan 09 peter 74     /// expression is found an anchor to trac-root/changeset/123,
768 31 Jan 09 peter 75     /// displaying expression, and first is pointing to character
768 31 Jan 09 peter 76     /// after expression.
308 12 May 07 peter 77     ///
308 12 May 07 peter 78     /// @return true if expression is found
308 12 May 07 peter 79     ///
1513 23 Sep 12 peter 80     bool changeset1(const std::string::const_iterator& first,
768 31 Jan 09 peter 81                     std::string::const_iterator& iter,
317 17 May 07 peter 82                     const std::string::const_iterator& last,
317 17 May 07 peter 83                     const std::string::const_iterator& last_trunc);
292 08 May 07 peter 84
308 12 May 07 peter 85     ///
308 12 May 07 peter 86     /// \brief search for '[123]'
308 12 May 07 peter 87     ///
308 12 May 07 peter 88     /// Search in range [\a first, \a last) for expression
308 12 May 07 peter 89     /// /\[(\d+)\]/. If expression is found an anchor to
308 12 May 07 peter 90     /// trac-root/changeset/123, displaying expression, and first is
308 12 May 07 peter 91     /// pointing to character after expression.
308 12 May 07 peter 92     ///
308 12 May 07 peter 93     /// @return true if expression is found
308 12 May 07 peter 94     ///
1513 23 Sep 12 peter 95     bool changeset2(std::string::const_iterator& first,
317 17 May 07 peter 96                     const std::string::const_iterator& last,
317 17 May 07 peter 97                     const std::string::const_iterator& last_trunc);
292 08 May 07 peter 98
308 12 May 07 peter 99     ///
308 12 May 07 peter 100     /// \brief search for changeset:123
308 12 May 07 peter 101     ///
308 12 May 07 peter 102     /// Search in range [\a first, \a last) for expression
308 12 May 07 peter 103     /// /changeset:(\d+)/. If expression is found an anchor to
308 12 May 07 peter 104     /// trac-root/changeset/123, displaying expression, and first is
308 12 May 07 peter 105     /// pointing to character after expression.
308 12 May 07 peter 106     ///
308 12 May 07 peter 107     /// @return true if expression is found
308 12 May 07 peter 108     ///
1513 23 Sep 12 peter 109     bool changeset3(std::string::const_iterator& first,
317 17 May 07 peter 110                     const std::string::const_iterator& last,
317 17 May 07 peter 111                     const std::string::const_iterator& last_trunc);
292 08 May 07 peter 112
308 12 May 07 peter 113     ///
308 12 May 07 peter 114     /// \brief search for /comment:ticket:123:1/
308 12 May 07 peter 115     ///
308 12 May 07 peter 116     /// Search in range [\a first, \a last) for expression
308 12 May 07 peter 117     /// /comment:ticket:(\w+):(\d+)/. If expression is found an anchor
308 12 May 07 peter 118     /// to trac-root/ticket/123#comment:1, displaying expression, and
308 12 May 07 peter 119     /// first is pointing to character after expression.
308 12 May 07 peter 120     ///
308 12 May 07 peter 121     /// @return true if expression is found
308 12 May 07 peter 122     ///
1513 23 Sep 12 peter 123     bool comment(std::string::const_iterator& first,
317 17 May 07 peter 124                  const std::string::const_iterator& last,
317 17 May 07 peter 125                  const std::string::const_iterator& last_trunc);
308 12 May 07 peter 126
308 12 May 07 peter 127     ///
308 12 May 07 peter 128     /// @see diff1 diff2 diff3
308 12 May 07 peter 129     ///
308 12 May 07 peter 130     /// @return true if any of diffX returns true
308 12 May 07 peter 131     ///
1513 23 Sep 12 peter 132     bool diff(std::string::const_iterator& first,
317 17 May 07 peter 133               const std::string::const_iterator& last,
317 17 May 07 peter 134               const std::string::const_iterator& last_trunc);
294 08 May 07 peter 135
308 12 May 07 peter 136     ///
309 12 May 07 peter 137     /// \brief search for diff:trunk@12:123
308 12 May 07 peter 138     ///
308 12 May 07 peter 139     /// Search in range [\a first, \a last) for expression
308 12 May 07 peter 140     /// /diff:(.*)@(\w+):(\w+)/. If expression is found an anchor is
308 12 May 07 peter 141     /// created, displaying the expression, and first is pointing to
308 12 May 07 peter 142     /// character after expression.
308 12 May 07 peter 143     ///
308 12 May 07 peter 144     /// If $1 (trunk) is empty anchor goes to
308 12 May 07 peter 145     /// trac-root/changeset?new=123&old=12 otherwise it goes to
308 12 May 07 peter 146     /// trac-root/changeset?new=123&newpath=trunk&old=12&oldpath=trunk
308 12 May 07 peter 147     ///
308 12 May 07 peter 148     /// @return true if expression is found
308 12 May 07 peter 149     ///
1513 23 Sep 12 peter 150     bool diff1(std::string::const_iterator& first,
317 17 May 07 peter 151                const std::string::const_iterator& last,
317 17 May 07 peter 152                const std::string::const_iterator& last_trunc);
294 08 May 07 peter 153
308 12 May 07 peter 154     ///
309 12 May 07 peter 155     /// @brief search for diff:tags/1.0 or diff:tags/1.0//tags/1.0.1
308 12 May 07 peter 156     ///
308 12 May 07 peter 157     /// Search in range [\a first, \a last) for expression
308 12 May 07 peter 158     /// /diff:(^\s+)/ or /diff:(^\s+)\/\/(^\s+)/. If expression is found
308 12 May 07 peter 159     /// an anchor is created, displaying the expression, and first is
308 12 May 07 peter 160     /// pointing to character after expression.
308 12 May 07 peter 161     ///
308 12 May 07 peter 162     /// The created anchor goes to
308 12 May 07 peter 163     /// trac-root/changeset?new_path=tags/1.0&old_path=tags/1.0 or
308 12 May 07 peter 164     /// trac-root/changeset?new_path=tags/1.0&old_path=tags/1.0.1
308 12 May 07 peter 165     /// respectively.
308 12 May 07 peter 166     ///
308 12 May 07 peter 167     /// @return true if expression is found
308 12 May 07 peter 168     ///
1513 23 Sep 12 peter 169     bool diff2(std::string::const_iterator& first,
317 17 May 07 peter 170                const std::string::const_iterator& last,
317 17 May 07 peter 171                const std::string::const_iterator& last_trunc);
294 08 May 07 peter 172
308 12 May 07 peter 173     ///
308 12 May 07 peter 174     /// @brief search for diff:tags/1.0@123//trunk@236
308 12 May 07 peter 175     ///
308 12 May 07 peter 176     /// Search in range [\a first, \a last) for expression
308 12 May 07 peter 177     /// /diff:(^\s+)@(\w+)\/\/(^\s+)@(\w+)/. If expression is found an
308 12 May 07 peter 178     /// anchor is created, displaying the expression, and first is
308 12 May 07 peter 179     /// pointing to character after expression.
308 12 May 07 peter 180     ///
308 12 May 07 peter 181     /// The created anchor goes to
309 12 May 07 peter 182     /// trac-root/changeset?new=236&new_path=trunk&old=123&old_path=tags/1.0
308 12 May 07 peter 183     ///
308 12 May 07 peter 184     /// @return true if expression is found
308 12 May 07 peter 185     ///
1513 23 Sep 12 peter 186     bool diff3(std::string::const_iterator& first,
317 17 May 07 peter 187                const std::string::const_iterator& last,
317 17 May 07 peter 188                const std::string::const_iterator& last_trunc);
294 08 May 07 peter 189
288 07 May 07 peter 190
308 12 May 07 peter 191     ///
308 12 May 07 peter 192     /// @see log1 log2 log3
308 12 May 07 peter 193     ///
308 12 May 07 peter 194     /// @return true if any of logX returns true
308 12 May 07 peter 195     ///
1513 23 Sep 12 peter 196     bool log(const std::string::const_iterator& first,
768 31 Jan 09 peter 197              std::string::const_iterator& iter,
317 17 May 07 peter 198              const std::string::const_iterator& last,
317 17 May 07 peter 199              const std::string::const_iterator& last_trunc);
288 07 May 07 peter 200
308 12 May 07 peter 201     ///
308 12 May 07 peter 202     /// @brief search for r123:236
308 12 May 07 peter 203     ///
308 12 May 07 peter 204     /// Search in range [\a first, \a last) for expression
768 31 Jan 09 peter 205     /// /r(\d+):(\d+)/. In addition character before and after
768 31 Jan 09 peter 206     /// expression cannot be alpha-numeric (beginning/end of string is
768 31 Jan 09 peter 207     /// allowed). If expression is found an anchor is created,
768 31 Jan 09 peter 208     /// displaying the expression, and iter is pointing to character
768 31 Jan 09 peter 209     /// after expression.
308 12 May 07 peter 210     ///
308 12 May 07 peter 211     /// The created anchor goes to trac-root/log/?rev=236&stop_rev=123
308 12 May 07 peter 212     ///
308 12 May 07 peter 213     /// @return true if expression is found
308 12 May 07 peter 214     ///
768 31 Jan 09 peter 215     bool log1(const std::string::const_iterator& first,
1513 23 Sep 12 peter 216               std::string::const_iterator& iter,
317 17 May 07 peter 217               const std::string::const_iterator& last,
317 17 May 07 peter 218               const std::string::const_iterator& last_trunc);
293 08 May 07 peter 219
308 12 May 07 peter 220     ///
308 12 May 07 peter 221     /// @brief search for [123:236]
308 12 May 07 peter 222     ///
308 12 May 07 peter 223     /// Search in range [\a first, \a last) for expression
308 12 May 07 peter 224     /// /\[(\w+):(\w+)\]/. If expression is found an
308 12 May 07 peter 225     /// anchor is created, displaying the expression, and first is
308 12 May 07 peter 226     /// pointing to character after expression.
308 12 May 07 peter 227     ///
308 12 May 07 peter 228     /// The created anchor goes to trac-root/log/?rev=236&stop_rev=123
308 12 May 07 peter 229     ///
308 12 May 07 peter 230     /// @return true if expression is found
308 12 May 07 peter 231     ///
1513 23 Sep 12 peter 232     bool log2(std::string::const_iterator& first,
317 17 May 07 peter 233               const std::string::const_iterator& last,
317 17 May 07 peter 234               const std::string::const_iterator& last_trunc);
293 08 May 07 peter 235
308 12 May 07 peter 236     ///
308 12 May 07 peter 237     /// @brief search for log:trunk@123:236 or log:trunk#123:236
308 12 May 07 peter 238     ///
308 12 May 07 peter 239     /// Search in range [\a first, \a last) for expression
308 12 May 07 peter 240     /// /log:(^\s*)(@|#)(\w+):(\w+)/. If expression is found an
308 12 May 07 peter 241     /// anchor is created, displaying the expression, and first is
308 12 May 07 peter 242     /// pointing to character after expression.
308 12 May 07 peter 243     ///
308 12 May 07 peter 244     /// The created anchor goes to trac-root/log/trunk?rev=236&stop_rev=123
308 12 May 07 peter 245     ///
308 12 May 07 peter 246     /// @return true if expression is found
308 12 May 07 peter 247     ///
1513 23 Sep 12 peter 248     bool log3(std::string::const_iterator& first,
317 17 May 07 peter 249               const std::string::const_iterator& last,
317 17 May 07 peter 250               const std::string::const_iterator& last_trunc);
293 08 May 07 peter 251
308 12 May 07 peter 252     ///
308 12 May 07 peter 253     /// @brief search for milestone:1.0
308 12 May 07 peter 254     ///
308 12 May 07 peter 255     /// Search in range [\a first, \a last) for expression
308 12 May 07 peter 256     /// /milestone:(^s\*)\w/. If expression is found an
308 12 May 07 peter 257     /// anchor is created, displaying the expression, and first is
308 12 May 07 peter 258     /// pointing to character after expression.
308 12 May 07 peter 259     ///
308 12 May 07 peter 260     /// The created anchor goes to trac-root/milestone/1.0
308 12 May 07 peter 261     ///
308 12 May 07 peter 262     /// @return true if expression is found
308 12 May 07 peter 263     ///
1513 23 Sep 12 peter 264     bool milestone(std::string::const_iterator& first,
317 17 May 07 peter 265                    const std::string::const_iterator& last,
317 17 May 07 peter 266                    const std::string::const_iterator& last_trunc);
288 07 May 07 peter 267
308 12 May 07 peter 268     ///
308 12 May 07 peter 269     /// @brief search for source:trunk or source:trunk@123 or
1513 23 Sep 12 peter 270     /// source:trunk@123#L3
308 12 May 07 peter 271     ///
308 12 May 07 peter 272     /// Search in range [\a first, \a last) for expression
308 12 May 07 peter 273     /// /source:(^s\*)/, /source:(^s\*)@(\w+)/ or
308 12 May 07 peter 274     /// /source:(^s\*)@(\w+)#L(\d+)/. If expression is found an anchor
308 12 May 07 peter 275     /// is created, displaying the expression, and first is pointing
308 12 May 07 peter 276     /// to character after expression.
308 12 May 07 peter 277     ///
308 12 May 07 peter 278     /// The created anchor goes to trac-root/browser/trunk or
308 12 May 07 peter 279     /// trac-root/browser/trunk?rev=123 or
308 12 May 07 peter 280     /// trac-root/browser/trunk?rev=123#L3
308 12 May 07 peter 281     ///
308 12 May 07 peter 282     /// @return true if expression is found
308 12 May 07 peter 283     ///
1513 23 Sep 12 peter 284     bool source(std::string::const_iterator& first,
317 17 May 07 peter 285                 const std::string::const_iterator& last,
317 17 May 07 peter 286                 const std::string::const_iterator& last_trunc);
288 07 May 07 peter 287
308 12 May 07 peter 288     ///
308 12 May 07 peter 289     /// @see ticket1 ticket2
308 12 May 07 peter 290     ///
308 12 May 07 peter 291     /// @return true ticket1 or ticket2 returns true
308 12 May 07 peter 292     ///
1513 23 Sep 12 peter 293     bool ticket(std::string::const_iterator& first,
317 17 May 07 peter 294                 const std::string::const_iterator& last,
317 17 May 07 peter 295                 const std::string::const_iterator& last_trunc);
290 08 May 07 peter 296
308 12 May 07 peter 297     ///
308 12 May 07 peter 298     /// @brief search for #65
308 12 May 07 peter 299     ///
308 12 May 07 peter 300     /// Search in range [\a first, \a last) for expression
308 12 May 07 peter 301     /// /#(\d+)/. If expression is found an
308 12 May 07 peter 302     /// anchor is created, displaying the expression, and first is
308 12 May 07 peter 303     /// pointing to character after expression.
308 12 May 07 peter 304     ///
308 12 May 07 peter 305     /// The created anchor goes to trac-root/ticket/65
308 12 May 07 peter 306     ///
308 12 May 07 peter 307     /// @return true if expression is found
308 12 May 07 peter 308     ///
1513 23 Sep 12 peter 309     bool ticket1(std::string::const_iterator& first,
317 17 May 07 peter 310                  const std::string::const_iterator& last,
317 17 May 07 peter 311                  const std::string::const_iterator& last_trunc);
286 07 May 07 peter 312
308 12 May 07 peter 313     ///
308 12 May 07 peter 314     /// @brief search for ticket:65
308 12 May 07 peter 315     ///
308 12 May 07 peter 316     /// Search in range [\a first, \a last) for expression
308 12 May 07 peter 317     /// /ticket:(\d+)/. If expression is found an
308 12 May 07 peter 318     /// anchor is created, displaying the expression, and first is
308 12 May 07 peter 319     /// pointing to character after expression.
308 12 May 07 peter 320     ///
308 12 May 07 peter 321     /// The created anchor goes to trac-root/ticket/65
308 12 May 07 peter 322     ///
308 12 May 07 peter 323     /// @return true if expression is found
308 12 May 07 peter 324     ///
1513 23 Sep 12 peter 325     bool ticket2(std::string::const_iterator& first,
317 17 May 07 peter 326                  const std::string::const_iterator& last,
317 17 May 07 peter 327                  const std::string::const_iterator& last_trunc);
286 07 May 07 peter 328
290 08 May 07 peter 329
290 08 May 07 peter 330
286 07 May 07 peter 331     HtmlStream& hs_;
286 07 May 07 peter 332   };
286 07 May 07 peter 333
286 07 May 07 peter 334 }} // end of namespace svndigest end of namespace theplu
286 07 May 07 peter 335
1513 23 Sep 12 peter 336 #endif