[ 
http://issues.apache.org/jira/browse/LUCENE-682?page=comments#action_12456294 ] 
            
Yonik Seeley commented on LUCENE-682:
-------------------------------------



Something like this perhaps:

  public static String change(String s, String AND, String OR, String NOT) {
    int len = s.length();
    StringBuilder b = new StringBuilder();
    boolean newString=false;
    boolean changed=false;
    boolean inString=false;
    char prev='!';
    for (int i=0; i<s.length(); i++) {
     char ch = s.charAt(i);
     switch (ch) {
       case '\\' : b.append(s.charAt(++i)); break;
       case '\'' : inString=!inString; break;
       case 'A' :
         if (!inString
             && !Character.isJavaIdentifierPart(prev)
             && i+2 < s.length()
             && s.charAt(i+1) == 'N'
             && s.charAt(i+2) == 'D'
             && (i+3==s.length() || 
!Character.isJavaIdentifierPart(s.charAt(i+3))))
         {
           b.append(AND);
           changed=true;
           i+=2;
         }
         break;
       case 'O' :
         if (!inString
             && !Character.isJavaIdentifierPart(prev)
             && i+1 < s.length()
             && s.charAt(i+1) == 'R'
             && (i+2==s.length() || 
!Character.isJavaIdentifierPart(s.charAt(i+2))))
         {
           b.append(OR);
           changed=true;
           i+=1;
         }
         break;
       case 'N' :
         if (!inString
             && !Character.isJavaIdentifierPart(prev)
             && i+2 < s.length()
             && s.charAt(i+1) == 'O'
             && s.charAt(i+2) == 'T'
             && (i+3==s.length() || 
!Character.isJavaIdentifierPart(s.charAt(i+3))))
         {
           b.append(NOT);
           changed=true;
           i+=2;           
         }
         break;
       default: break;
     }
     if (changed) {
       newString=true;
       changed=false;
     } else {
       b.append(ch);
       prev = ch;
     }
    }
    return newString ? b.toString() : s;
  }

> QueryParser with Locale Based Operators (French included)
> ---------------------------------------------------------
>
>                 Key: LUCENE-682
>                 URL: http://issues.apache.org/jira/browse/LUCENE-682
>             Project: Lucene - Java
>          Issue Type: New Feature
>          Components: QueryParser
>            Reporter: Patrick Turcotte
>         Assigned To: Hoss Man
>            Priority: Minor
>         Attachments: LocalizedQueryParser.patch, LocalizedQueryParser.patch, 
> LocalizedQueryParser.zip, LocalizedQueryParserDemo.java, 
> LocalizedQueryParserOperatorsMicroBench.java, QueryParser.jj, 
> QueryParser.jj.patch, QueryParser.properties, QueryParser_fr.properties, 
> TestQueryParserLocaleOperators.java
>
>
> Here is a version of the QueryParser that can "understand" the AND, OR and 
> NOT keyword in other languages.
> If activated, 
> - "a ET b" should return the same query as "a AND b", namely: "+a +b"
> - "a OU b" should return the same query as "a OR b", namely: "a b"
> - "a SAUF b" should return the same query as "a NOT b", namely: "a -b"
> Here are its main points : 
> 1) Patched from revision 454774 of lucene 2.1dev (trunk) (probably could be 
> used with other versions)
> 2) The "ant test" target is still successful when the modified QueryParser is 
> used
> 3) It doesn't break actual code
> 4) The default behavior is the same as before
> 5) It has to be deliberately activated
> 6) It use ResourceBundle to find the keywords translation
> 7) Comes with FRENCH translation
> 8) Comes with JUnit testCases
> 9) Adds 1 public method to QueryParser
> 10) Expands the TOKEN <TERM>
> 11) Use TOKEN_MGR_DECLS to set some field for the TokenManager

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to