You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by ke...@apache.org on 2004/02/18 07:20:15 UTC

cvs commit: jakarta-lucene-sandbox/contributions/javascript/queryEscaper testQueryEscaper.html luceneQueryEscaper.js

kelvint     2004/02/17 22:20:15

  Added:       contributions/javascript/queryEscaper testQueryEscaper.html
                        luceneQueryEscaper.js
  Log:
  Initial commit.
  
  Revision  Changes    Path
  1.1                  jakarta-lucene-sandbox/contributions/javascript/queryEscaper/testQueryEscaper.html
  
  Index: testQueryEscaper.html
  ===================================================================
  <html>
  
  <head>
  <!-- Change Me -->
  <script language="JavaScript" src="jsUnitCore.js"></script>
  <script language="JavaScript" src="luceneQueryEscaper.js"></script>
  </head>
  <body>
  <script>
  function testGetQueryValue()
  {
    var str = "The quick brown fox jumped over the lazy dog";
    document.test.foobar.value = str;
    assertEquals("Not getting field value correctly", str, getQueryValue(document.test.foobar));
    assertEquals("Not getting string value correctly", str, getQueryValue(str));
  }
  
  function testNormalString()
  {
    var str = "The quick brown fox jumped over the lazy dog";
    assertEquals("Should not be escaping", str, escapeAsterisk(str));
    assertEquals("Should not be escaping", str, escapeQuotes(str));
    assertEquals("Should not be escaping", str, escapeColon(str));
    assertEquals("Should not be escaping", str, escapeQuestionMark(str));
    assertEquals("Should not be escaping", str, escapeExclamationMark(str));
  }
  
  function testEscapeAsterisk()
  {
    var str = "foo*";
    assertEquals("Not escaping " + str, "foo\\*", escapeAsterisk(str));
    
    str = " foo bar *";
    assertEquals("Not escaping " + str, " foo bar \\*", escapeAsterisk(str));
    
    str = "foo* bar*";
    assertEquals("Not escaping " + str, "foo\\* bar\\*", escapeAsterisk(str));  
  }
  
  function testEscapeQuotes()
  {
    var str = "\"foo\"";
    assertEquals("Not escaping " + str, "\\\"foo\\\"", escapeQuotes(str));
  }
  
  function testEscapeColon()
  {
    var str = "foo:bar zoo:zaa";
    assertEquals("Not escaping " + str, "foo\\:bar zoo\\:zaa", escapeColon(str));
  }
  
  function testEscapeQuestionMark()
  {
    var str = "foo? bar?";
    assertEquals("Not escaping " + str, "foo\\? bar\\?", escapeQuestionMark(str));
  }
  
  function testEscapeExclamationMark()
  {
    var str = "foo! bar!";
    assertEquals("Not escaping " + str, "foo\\! bar\\!", escapeExclamationMark(str));
  }
  
  function testEscapeParentheses()
  {
    var str = "foo (bar) (me)";
    assertEquals("Not escaping " + str, "foo \\(bar\\) \\(me\\)", escapeParentheses(str));
  }
  
  function testEscapeSquareBrackets()
  {
    var str = "foo [bar] [me]";
    assertEquals("Not escaping " + str, "foo \\[bar\\] \\[me\\]", escapeSquareBrackets(str));
  }
  
  function testEscapeBraces()
  {
    var str = "foo {bar} {me}";
    assertEquals("Not escaping " + str, "foo \\{bar\\} \\{me\\}", escapeBraces(str));
  }
  
  function testEscapeCaret()
  {
    var str = "f^oo bar^ me";
    assertEquals("Not escaping " + str, "f\\^oo bar\\^ me", escapeCaret(str));
  }
  
  function testEscapeSquiggle()
  {
    var str = "f~oo bar~ me";
    assertEquals("Not escaping " + str, "f\\~oo bar\\~ me", escapeSquiggle(str));
  }
  
  function testEscapeDoubleAmpersands()
  {
    var str = "foo && bar me";
    assertEquals("Not escaping " + str, "foo \\&\\& bar me", escapeDoubleAmpersands(str));
  
    str = "foo && bar& m&e";
    assertEquals("Not escaping " + str, "foo \\&\\& bar& m&e", escapeDoubleAmpersands(str));
  }
  
  function testEscapeDoubleBars()
  {
    var str = "foo || bar me";
    assertEquals("Not escaping " + str, "foo \\|\\| bar me", escapeDoubleBars(str));
  }
  
  function testDoEscapeQuery()
  {
    var str = "The: quick*} {~brown? ^fox! (jumped:[over] || me) \"the && lazy: dog\"";
    assertEquals("Not escaping " + str, "The\\: quick\\*\\} \\{\\~brown\\? \\^fox\\! \\(jumped\\:\\[over\\] \\|\\| me\\) \\\"the \\&\\& lazy\\: dog\\\"", doEscapeQuery(str));
  }
  
  
  </script>
  <form name="test">
  <input type="text" name="foobar">
  </form>
  </body>
  </html>
  
  
  
  1.1                  jakarta-lucene-sandbox/contributions/javascript/queryEscaper/luceneQueryEscaper.js
  
  Index: luceneQueryEscaper.js
  ===================================================================
  // Special characters are + - && || ! ( ) { } [ ] ^ " ~ * ? : \
  // Special words are (case-sensitive) AND NOT OR
  // We escape the common ones, i.e. ! ? * ( ) " :
  
  // escapes a lucene query.
  // @param Form field that contains the query, or the query string
  function doEscapeQuery(queryArg)
  {
    var query = getQueryValue(queryArg);
    query = escapeAsterisk(query);
    query = escapeQuotes(query);
    query = escapeColon(query);
    query = escapeQuestionMark(query);
    query = escapeExclamationMark(query);
    query = escapeParentheses(query);  
    query = escapeSquareBrackets(query);  
    query = escapeBraces(query);  
    query = escapeCaret(query);  
    query = escapeSquiggle(query);  
    query = escapeDoubleAmpersands(query);  
    query = escapeDoubleBars(query);  
    return query;
  }
  
  function getQueryValue(queryArg)
  {
    var query;
    // check if its a form field
    if(typeof(queryArg.form) != "undefined")
    {
      query = queryArg.value;
    }
    else
    {
      query = queryArg;
    }
    return query;
  }
  
  function escapeAsterisk(query)
  {
    return query.replace(/[\*]/g, "\\*");
  }
  
  function escapeQuotes(query)
  {
    return query.replace(/[\"]/g, "\\\"");
  }
  
  function escapeColon(query)
  {
    return query.replace(/[\:]/g, "\\:");
  }
  
  function escapeQuestionMark(query)
  {
    return query.replace(/[?]/g, "\\?");
  }
  
  function escapeExclamationMark(query)
  {
    return query.replace(/[!]/g, "\\!");
  }
  
  function escapeParentheses(query)
  {
    return query.replace(/[(]/g, "\\(").replace(/[)]/g, "\\)");
  }
  
  function escapeSquareBrackets(query)
  {
    return query.replace(/[\[]/g, "\\[").replace(/[\]]/g, "\\]");
  }
  
  function escapeBraces(query)
  {
    return query.replace(/[{]/g, "\\{").replace(/[}]/g, "\\}");
  }
  
  function escapeCaret(query)
  {
    return query.replace(/[\^]/g, "\\^");
  }
  
  function escapeSquiggle(query)
  {
    return query.replace(/[~]/g, "\\~");
  }
  
  function escapeDoubleAmpersands(query)
  {
    return query.replace(/[&]{2}/g, "\\&\\&");
  }
  
  function escapeDoubleBars(query)
  {
    return query.replace(/[\|]{2}/g, "\\|\\|");
  }
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: lucene-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: lucene-dev-help@jakarta.apache.org