LCOV - code coverage report
Current view: top level - languages - stem.cc (source / functions) Hit Total Coverage
Test: Test Coverage for xapian-core 954b5873a738 Lines: 83 83 100.0 %
Date: 2019-06-30 05:20:33 Functions: 8 8 100.0 %
Branches: 139 237 58.6 %

           Branch data     Line data    Source code
       1                 :            : /** @file stem.cc
       2                 :            :  *  @brief Implementation of Xapian::Stem API class.
       3                 :            :  */
       4                 :            : /* Copyright (C) 2007,2008,2010,2011,2012,2015,2018 Olly Betts
       5                 :            :  * Copyright (C) 2010 Evgeny Sizikov
       6                 :            :  *
       7                 :            :  * This program is free software; you can redistribute it and/or
       8                 :            :  * modify it under the terms of the GNU General Public License as
       9                 :            :  * published by the Free Software Foundation; either version 2 of the
      10                 :            :  * License, or (at your option) any later version.
      11                 :            :  *
      12                 :            :  * This program is distributed in the hope that it will be useful,
      13                 :            :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      14                 :            :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      15                 :            :  * GNU General Public License for more details.
      16                 :            :  *
      17                 :            :  * You should have received a copy of the GNU General Public License
      18                 :            :  * along with this program; if not, write to the Free Software
      19                 :            :  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
      20                 :            :  */
      21                 :            : 
      22                 :            : #include <config.h>
      23                 :            : 
      24                 :            : #include <xapian/stem.h>
      25                 :            : 
      26                 :            : #include <xapian/error.h>
      27                 :            : 
      28                 :            : #include "steminternal.h"
      29                 :            : 
      30                 :            : #include "allsnowballheaders.h"
      31                 :            : #include "keyword.h"
      32                 :            : #include "sbl-dispatch.h"
      33                 :            : 
      34                 :            : #include <string>
      35                 :            : 
      36                 :            : using namespace std;
      37                 :            : 
      38                 :            : namespace Xapian {
      39                 :            : 
      40                 :         58 : Stem::Stem(const Stem & o) : internal(o.internal) { }
      41                 :            : 
      42                 :            : Stem &
      43                 :         50 : Stem::operator=(const Stem & o)
      44                 :            : {
      45                 :         50 :     internal = o.internal;
      46                 :         50 :     return *this;
      47                 :            : }
      48                 :            : 
      49                 :            : Stem::Stem(Stem &&) = default;
      50                 :            : 
      51                 :            : Stem &
      52                 :            : Stem::operator=(Stem &&) = default;
      53                 :            : 
      54                 :        886 : Stem::Stem() { }
      55                 :            : 
      56                 :       4182 : Stem::Stem(const std::string &language) {
      57         [ +  - ]:       1963 :     int l = keyword2(tab, language.data(), language.size());
      58         [ +  + ]:       1963 :     if (l >= 0) {
      59   [ +  +  +  +  :       1704 :         switch (static_cast<sbl_code>(l)) {
          +  +  +  +  +  
          +  +  +  +  +  
          +  +  +  +  +  
          +  +  +  +  +  
          +  +  +  +  +  
                   +  - ]
      60                 :            :             case ARABIC:
      61 [ +  - ][ +  - ]:          2 :                 internal = new InternalStemArabic;
                 [ +  - ]
      62                 :          2 :                 return;
      63                 :            :             case ARMENIAN:
      64 [ +  - ][ +  - ]:          2 :                 internal = new InternalStemArmenian;
                 [ +  - ]
      65                 :          2 :                 return;
      66                 :            :             case BASQUE:
      67 [ +  - ][ +  - ]:          2 :                 internal = new InternalStemBasque;
                 [ +  - ]
      68                 :          2 :                 return;
      69                 :            :             case CATALAN:
      70 [ +  - ][ +  - ]:          2 :                 internal = new InternalStemCatalan;
                 [ +  - ]
      71                 :          2 :                 return;
      72                 :            :             case DANISH:
      73 [ +  - ][ +  - ]:          3 :                 internal = new InternalStemDanish;
                 [ +  - ]
      74                 :          3 :                 return;
      75                 :            :             case DUTCH:
      76 [ +  - ][ +  - ]:          3 :                 internal = new InternalStemDutch;
                 [ +  - ]
      77                 :          3 :                 return;
      78                 :            :             case EARLYENGLISH:
      79 [ +  - ][ +  - ]:          3 :                 internal = new InternalStemEarlyenglish;
                 [ +  - ]
      80                 :          3 :                 return;
      81                 :            :             case ENGLISH:
      82 [ +  - ][ +  - ]:       1627 :                 internal = new InternalStemEnglish;
                 [ +  - ]
      83                 :       1627 :                 return;
      84                 :            :             case FINNISH:
      85 [ +  - ][ +  - ]:          3 :                 internal = new InternalStemFinnish;
                 [ +  - ]
      86                 :          3 :                 return;
      87                 :            :             case FRENCH:
      88 [ +  - ][ +  - ]:          3 :                 internal = new InternalStemFrench;
                 [ +  - ]
      89                 :          3 :                 return;
      90                 :            :             case GERMAN:
      91 [ +  - ][ +  - ]:          3 :                 internal = new InternalStemGerman;
                 [ +  - ]
      92                 :          3 :                 return;
      93                 :            :             case GERMAN2:
      94 [ +  - ][ +  - ]:          2 :                 internal = new InternalStemGerman2;
                 [ +  - ]
      95                 :          2 :                 return;
      96                 :            :             case HUNGARIAN:
      97 [ +  - ][ +  - ]:          3 :                 internal = new InternalStemHungarian;
                 [ +  - ]
      98                 :          3 :                 return;
      99                 :            :             case INDONESIAN:
     100 [ +  - ][ +  - ]:          2 :                 internal = new InternalStemIndonesian;
                 [ +  - ]
     101                 :          2 :                 return;
     102                 :            :             case IRISH:
     103 [ +  - ][ +  - ]:          2 :                 internal = new InternalStemIrish;
                 [ +  - ]
     104                 :          2 :                 return;
     105                 :            :             case ITALIAN:
     106 [ +  - ][ +  - ]:          3 :                 internal = new InternalStemItalian;
                 [ +  - ]
     107                 :          3 :                 return;
     108                 :            :             case KRAAIJ_POHLMANN:
     109 [ +  - ][ +  - ]:          2 :                 internal = new InternalStemKraaij_pohlmann;
                 [ +  - ]
     110                 :          2 :                 return;
     111                 :            :             case LITHUANIAN:
     112 [ +  - ][ +  - ]:          2 :                 internal = new InternalStemLithuanian;
                 [ +  - ]
     113                 :          2 :                 return;
     114                 :            :             case LOVINS:
     115 [ +  - ][ +  - ]:          2 :                 internal = new InternalStemLovins;
                 [ +  - ]
     116                 :          2 :                 return;
     117                 :            :             case NEPALI:
     118 [ +  - ][ +  - ]:          2 :                 internal = new InternalStemNepali;
                 [ +  - ]
     119                 :          2 :                 return;
     120                 :            :             case NORWEGIAN:
     121 [ +  - ][ +  - ]:          7 :                 internal = new InternalStemNorwegian;
                 [ +  - ]
     122                 :          7 :                 return;
     123                 :            :             case NONE:
     124                 :          2 :                 return;
     125                 :            :             case PORTUGUESE:
     126 [ +  - ][ +  - ]:          3 :                 internal = new InternalStemPortuguese;
                 [ +  - ]
     127                 :          3 :                 return;
     128                 :            :             case PORTER:
     129 [ +  - ][ +  - ]:          2 :                 internal = new InternalStemPorter;
                 [ +  - ]
     130                 :          2 :                 return;
     131                 :            :             case RUSSIAN:
     132 [ +  - ][ +  - ]:          3 :                 internal = new InternalStemRussian;
                 [ +  - ]
     133                 :          3 :                 return;
     134                 :            :             case ROMANIAN:
     135 [ +  - ][ +  - ]:          3 :                 internal = new InternalStemRomanian;
                 [ +  - ]
     136                 :          3 :                 return;
     137                 :            :             case SPANISH:
     138 [ +  - ][ +  - ]:          3 :                 internal = new InternalStemSpanish;
                 [ +  - ]
     139                 :          3 :                 return;
     140                 :            :             case SWEDISH:
     141 [ +  - ][ +  - ]:          3 :                 internal = new InternalStemSwedish;
                 [ +  - ]
     142                 :          3 :                 return;
     143                 :            :             case TAMIL:
     144 [ +  - ][ +  - ]:          2 :                 internal = new InternalStemTamil;
                 [ +  - ]
     145                 :          2 :                 return;
     146                 :            :             case TURKISH:
     147 [ +  - ][ +  - ]:          3 :                 internal = new InternalStemTurkish;
                 [ +  - ]
     148                 :          3 :                 return;
     149                 :            :         }
     150                 :            :     }
     151         [ +  + ]:        259 :     if (language.empty())
     152                 :          3 :         return;
     153 [ +  - ][ +  - ]:       1963 :     throw Xapian::InvalidArgumentError("Language code " + language + " unknown");
         [ +  - ][ +  - ]
     154                 :            : }
     155                 :            : 
     156                 :          4 : Stem::Stem(StemImplementation * p) : internal(p) { }
     157                 :            : 
     158                 :       4364 : Stem::~Stem() { }
     159                 :            : 
     160                 :            : string
     161                 :    6329077 : Stem::operator()(const std::string &word) const
     162                 :            : {
     163 [ +  + ][ +  + ]:    6329077 :     if (!internal.get() || word.empty()) return word;
                 [ +  + ]
     164                 :    6232942 :     return internal->operator()(word);
     165                 :            : }
     166                 :            : 
     167                 :            : string
     168                 :         52 : Stem::get_description() const
     169                 :            : {
     170         [ +  - ]:         52 :     string desc = "Xapian::Stem(";
     171         [ +  + ]:         52 :     if (internal.get()) {
     172 [ +  - ][ +  - ]:         39 :         desc += internal->get_description();
     173         [ +  - ]:         39 :         desc += ')';
     174                 :            :     } else {
     175         [ +  - ]:         13 :         desc += "none)";
     176                 :            :     }
     177                 :         52 :     return desc;
     178                 :            : }
     179                 :            : 
     180                 :            : }

Generated by: LCOV version 1.11