OSDN Git Service

二語前の単語から拾う(CaptureText側のみ)
authortnishi <tnishi@git.osdn.net>
Fri, 25 Nov 2016 09:47:58 +0000 (18:47 +0900)
committertnishi <tnishi@git.osdn.net>
Fri, 25 Nov 2016 09:47:58 +0000 (18:47 +0900)
DCHookTest/DCHookMain.cpp
DCHookTest/StringLib.cpp

index 5e896d0..8aece02 100644 (file)
@@ -1262,13 +1262,16 @@ void TDCHookMainForm::EvPopup(TMessage &msg)
        if (!msg.LParam)
                return;
 
+       int pdicVer = GetPdicVersion();
+       const int numPrev = pdicVer >= 0x050A0018 ? 2 : 1;      // ver.5.10.24\88È\8fã
+               
        tchar *text = (tchar*)msg.LParam;
        int loc = msg.WParam & ~FLG_MOVESEND;
        bool movesend = msg.WParam & FLG_MOVESEND ? true : false;
        
        int start, end;
        int prevstart;
-       if ( !GetWord( text, loc, start, end, prevstart, true, 10, true, IgnoreJ ) ){
+       if ( !GetWord( text, loc, start, end, prevstart, true, 10, true, IgnoreJ, numPrev ) ){
                // no words
                delete[] text;
                return;
index 1531eff..8e9bca7 100644 (file)
@@ -14,8 +14,9 @@
 // fLongest\82ªTRUE\82Ì\8fê\8d\87\82Í\81A\8dÅ\8d\8210\8cê\82Ü\82Åget\82·\82é(.)\82ð\8fI\82í\82è\82Æ\82Ý\82È\82·
 // about   : \82¢\82¢\89Á\8c¸\82È\82Æ\82±\82ë\82ð\83N\83\8a\83b\83N\82µ\82Ä\82à\92P\8cê\82³\82¦\82 \82ê\82Î\95K\82¸get\82·\82é
 // alnum   : \89p\90\94\8e\9a\88È\8aO\82Í\96³\8e\8b
+// numPrev : N\8cê\91O\82Ì\92P\8cê\82ð\8fE\82¤
 
-bool GetWord( const tchar *str, int pos, int &start, int &end, int &prevstart, bool fLongest, int wordcount, bool about, bool alnum )
+bool GetWord( const tchar *str, int pos, int &start, int &end, int &prevstart, bool fLongest, int wordcount, bool about, bool alnum, int numPrev )
 {
        if ( !about )
                if ( !IsWordChar( *(str+pos) ) )
@@ -61,6 +62,7 @@ rescan:
                wordtop = p; 
        const tchar *wordtail = NULL;
        const tchar *wordprev = NULL;
+       const tchar *wordprev2 = NULL;
        bool fSpc = false;
        // pos\82É\82 \82é\92P\8cê\82Ìstart\82Æend\82ð\8b\81\82ß\82é
        while ( *p ){
@@ -83,6 +85,7 @@ rescan:
                } else {
                        // \92P\8cê\95\8e\9a
                        if ( fSpc ){
+                               wordprev2 = wordprev;
                                wordprev = wordtop;
                                wordtop = p;
                                fSpc = FALSE;
@@ -129,7 +132,10 @@ rescan:
        end = STR_DIFF( wordtail, orgp );
        if ( start == end )
                return false;
-       if ( wordprev ){
+       if ( numPrev >= 2 && wordprev2 ){
+               prevstart = STR_DIFF( wordprev2, orgp );
+       } else
+       if ( numPrev >= 1 && wordprev ){
                prevstart = STR_DIFF( wordprev, orgp );
        } else {
                prevstart = start;