LCOV - code coverage report
Current view: top level - src/lib - TextUtil.h (source / functions) Hit Total Coverage
Test: mediawiki/php/wikidiff2 test coverage report Lines: 16 16 100.0 %
Date: 2023-07-04 10:20:16 Functions: 3 3 100.0 %

          Line data    Source code
       1             : #ifndef TEXTUTIL_H
       2             : #define TEXTUTIL_H
       3             : 
       4             : #include "wd2_allocator.h"
       5             : #include "Word.h"
       6             : #include <thai/thbrk.h>
       7             : #include <string>
       8             : #include <vector>
       9             : 
      10             : namespace wikidiff2 {
      11             : 
      12             : // helper functions used in both DiffEngine and Wikidiff2
      13             : class TextUtil
      14             : {
      15             : public:
      16             : 
      17             :     typedef std::basic_string<char, std::char_traits<char>, WD2_ALLOCATOR<char> > String;
      18             :     typedef std::vector<Word, WD2_ALLOCATOR<Word> > WordVector;
      19             :     typedef std::vector<int, WD2_ALLOCATOR<int> > IntVector;
      20             : 
      21             : private:
      22             :     ThBrk * breaker;
      23             : 
      24           4 :     ThBrk * getBreaker() {
      25           4 :         if (!breaker) {
      26           1 :             breaker = th_brk_new(NULL);
      27             :         }
      28           4 :         return breaker;
      29             :     }
      30             : 
      31      195019 :     inline bool isLetter(int ch)
      32             :     {
      33             :         // Standard alphanumeric
      34      195019 :         if ((ch >= '0' && ch <= '9') ||
      35      194125 :            (ch == '_') ||
      36      194125 :            (ch >= 'A' && ch <= 'Z') ||
      37      116160 :            (ch >= 'a' && ch <= 'z'))
      38             :         {
      39      115955 :             return true;
      40             :         }
      41             :         // Punctuation and control characters
      42       79064 :         if (ch < 0xc0) return false;
      43             :         // Chinese, Japanese: split up character by character
      44        2661 :         if (ch >= 0x3000 && ch <= 0x9fff) return false;
      45        2658 :         if (ch >= 0x20000 && ch <= 0x2a000) return false;
      46             :         // Otherwise assume it's from a language that uses spaces
      47        2658 :         return true;
      48             :     }
      49             : 
      50      117709 :     inline bool isSpace(int ch)
      51             :     {
      52      117709 :         return ch == ' ' || ch == '\t';
      53             :     }
      54             : 
      55             :     int nextUtf8Char(String::const_iterator & p, String::const_iterator & charStart,
      56             :         String::const_iterator end);
      57             : 
      58             : public:
      59             : 
      60             :     TextUtil();
      61             :     ~TextUtil();
      62             : 
      63             :     static TextUtil & getInstance();
      64             : 
      65             :     // Split a string into words
      66             :     void explodeWords(const String & text, WordVector &words);
      67             : };
      68             : 
      69             : } // namespace wikidiff2
      70             : 
      71             : #endif // TEXTUTIL_H

Generated by: LCOV version 1.13