You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2015/09/02 15:06:22 UTC

svn commit: r1700800 [15/24] - in /lucene/dev/branches/lucene6699: ./ dev-tools/ dev-tools/eclipse/ dev-tools/idea/.idea/ dev-tools/scripts/ lucene/ lucene/analysis/ lucene/analysis/common/ lucene/analysis/common/src/java/org/apache/lucene/analysis/ar/...

Modified: lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/mail/conf/xslt/example_rss.xsl
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/mail/conf/xslt/example_rss.xsl?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/mail/conf/xslt/example_rss.xsl (original)
+++ lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/mail/conf/xslt/example_rss.xsl Wed Sep  2 13:06:13 2015
@@ -32,7 +32,7 @@
   <xsl:template match='/'>
     <rss version="2.0">
        <channel>
-	 <title>Example Solr RSS 2.0 Feed</title>
+         <title>Example Solr RSS 2.0 Feed</title>
          <link>http://localhost:8983/solr</link>
          <description>
           This has been formatted by the sample "example_rss.xsl" transform -

Modified: lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/mail/conf/xslt/updateXml.xsl
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/mail/conf/xslt/updateXml.xsl?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/mail/conf/xslt/updateXml.xsl (original)
+++ lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/mail/conf/xslt/updateXml.xsl Wed Sep  2 13:06:13 2015
@@ -49,10 +49,10 @@
       <xsl:variable name="fn" select="@name"/>
       
       <xsl:for-each select="*">
-		<xsl:element name="field">
-		    <xsl:attribute name="name"><xsl:value-of select="$fn"/></xsl:attribute>
-	        <xsl:value-of select="."/>
-		</xsl:element>
+        <xsl:element name="field">
+          <xsl:attribute name="name"><xsl:value-of select="$fn"/></xsl:attribute>
+          <xsl:value-of select="."/>
+        </xsl:element>
       </xsl:for-each>
   </xsl:template>
 
@@ -60,10 +60,10 @@
   <xsl:template match="doc/*">
       <xsl:variable name="fn" select="@name"/>
 
-	<xsl:element name="field">
-	    <xsl:attribute name="name"><xsl:value-of select="$fn"/></xsl:attribute>
+      <xsl:element name="field">
+        <xsl:attribute name="name"><xsl:value-of select="$fn"/></xsl:attribute>
         <xsl:value-of select="."/>
-	</xsl:element>
+      </xsl:element>
   </xsl:template>
 
   <xsl:template match="*"/>

Modified: lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/rss/conf/rss-data-config.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/rss/conf/rss-data-config.xml?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/rss/conf/rss-data-config.xml (original)
+++ lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/rss/conf/rss-data-config.xml Wed Sep  2 13:06:13 2015
@@ -7,11 +7,11 @@
                 processor="XPathEntityProcessor"
                 forEach="/rss/channel/item"
                 transformer="DateFormatTransformer">
-				
+        
             <field column="source" xpath="/rss/channel/title" commonField="true" />
             <field column="source-link" xpath="/rss/channel/link" commonField="true" />
             <field column="subject" xpath="/rss/channel/subject" commonField="true" />
-			
+      
             <field column="title" xpath="/rss/channel/item/title" />
             <field column="link" xpath="/rss/channel/item/link" />
             <field column="description" xpath="/rss/channel/item/description" />

Modified: lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/rss/conf/schema.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/rss/conf/schema.xml?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/rss/conf/schema.xml (original)
+++ lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/rss/conf/schema.xml Wed Sep  2 13:06:13 2015
@@ -215,10 +215,10 @@
     <copyField source="item-subject" dest="text"/>
 
    <!-- Above, multiple source fields are copied to the [text] field. 
-	  Another way to map multiple source fields to the same 
-	  destination field is to use the dynamic field syntax. 
-	  copyField also supports a maxChars to copy setting.  -->
-	   
+    Another way to map multiple source fields to the same 
+    destination field is to use the dynamic field syntax. 
+    copyField also supports a maxChars to copy setting.  -->
+     
    <!-- <copyField source="*_t" dest="text" maxChars="3000"/> -->
 
    <!-- copy name to alphaNameSort, a field designed for sorting by name -->
@@ -272,8 +272,8 @@
     <!-- sortMissingLast and sortMissingFirst attributes are optional attributes are
          currently supported on types that are sorted internally as strings
          and on numeric types.
-	     This includes "string","boolean", and, as of 3.5 (and 4.x),
-	     int, float, long, date, double, including the "Trie" variants.
+       This includes "string","boolean", and, as of 3.5 (and 4.x),
+       int, float, long, date, double, including the "Trie" variants.
        - If sortMissingLast="true", then a sort on this field will cause documents
          without the field to come after documents with the field,
          regardless of the requested sort order (asc or desc).
@@ -384,9 +384,9 @@
 
     <!-- A general text field that has reasonable, generic
          cross-language defaults: it tokenizes with StandardTokenizer,
-	 removes stop words from case-insensitive "stopwords.txt"
-	 (empty by default), and down cases.  At query time only, it
-	 also applies synonyms. -->
+   removes stop words from case-insensitive "stopwords.txt"
+   (empty by default), and down cases.  At query time only, it
+   also applies synonyms. -->
     <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
       <analyzer type="index">
         <tokenizer class="solr.StandardTokenizerFactory"/>
@@ -422,11 +422,11 @@
                 words="lang/stopwords_en.txt"
                 />
         <filter class="solr.LowerCaseFilterFactory"/>
-	<filter class="solr.EnglishPossessiveFilterFactory"/>
+  <filter class="solr.EnglishPossessiveFilterFactory"/>
         <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
-	<!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
+  <!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
         <filter class="solr.EnglishMinimalStemFilterFactory"/>
-	-->
+  -->
         <filter class="solr.PorterStemFilterFactory"/>
       </analyzer>
       <analyzer type="query">
@@ -437,23 +437,23 @@
                 words="lang/stopwords_en.txt"
                 />
         <filter class="solr.LowerCaseFilterFactory"/>
-	<filter class="solr.EnglishPossessiveFilterFactory"/>
+  <filter class="solr.EnglishPossessiveFilterFactory"/>
         <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
-	<!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
+  <!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
         <filter class="solr.EnglishMinimalStemFilterFactory"/>
-	-->
+  -->
         <filter class="solr.PorterStemFilterFactory"/>
       </analyzer>
     </fieldType>
 
     <!-- A text field with defaults appropriate for English, plus
-	 aggressive word-splitting and autophrase features enabled.
-	 This field is just like text_en, except it adds
-	 WordDelimiterFilter to enable splitting and matching of
-	 words on case-change, alpha numeric boundaries, and
-	 non-alphanumeric chars.  This means certain compound word
-	 cases will work, for example query "wi fi" will match
-	 document "WiFi" or "wi-fi".
+   aggressive word-splitting and autophrase features enabled.
+   This field is just like text_en, except it adds
+   WordDelimiterFilter to enable splitting and matching of
+   words on case-change, alpha numeric boundaries, and
+   non-alphanumeric chars.  This means certain compound word
+   cases will work, for example query "wi fi" will match
+   document "WiFi" or "wi-fi".
         -->
     <fieldType name="text_en_splitting" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
       <analyzer type="index">
@@ -504,7 +504,7 @@
     </fieldType>
 
     <!-- Just like text_general except it reverses the characters of
-	 each token, to enable more efficient leading wildcard queries. -->
+   each token, to enable more efficient leading wildcard queries. -->
     <fieldType name="text_general_rev" class="solr.TextField" positionIncrementGap="100">
       <analyzer type="index">
         <tokenizer class="solr.StandardTokenizerFactory"/>
@@ -579,10 +579,10 @@
         a token of "foo|1.4"  would be indexed as "foo" with a payload of 1.4f
         Attributes of the DelimitedPayloadTokenFilterFactory : 
          "delimiter" - a one character delimiter. Default is | (pipe)
-	 "encoder" - how to encode the following value into a playload
-	    float -> org.apache.lucene.analysis.payloads.FloatEncoder,
-	    integer -> o.a.l.a.p.IntegerEncoder
-	    identity -> o.a.l.a.p.IdentityEncoder
+   "encoder" - how to encode the following value into a playload
+      float -> org.apache.lucene.analysis.payloads.FloatEncoder,
+      integer -> o.a.l.a.p.IntegerEncoder
+      identity -> o.a.l.a.p.IdentityEncoder
             Fully Qualified class name implementing PayloadEncoder, Encoder must have a no arg constructor.
          -->
         <filter class="solr.DelimitedPayloadTokenFilterFactory" encoder="float"/>
@@ -603,10 +603,10 @@
     -->
     <fieldType name="descendent_path" class="solr.TextField">
       <analyzer type="index">
-	<tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/" />
+  <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/" />
       </analyzer>
       <analyzer type="query">
-	<tokenizer class="solr.KeywordTokenizerFactory" />
+  <tokenizer class="solr.KeywordTokenizerFactory" />
       </analyzer>
     </fieldType>
     <!-- 
@@ -615,10 +615,10 @@
     -->
     <fieldType name="ancestor_path" class="solr.TextField">
       <analyzer type="index">
-	<tokenizer class="solr.KeywordTokenizerFactory" />
+  <tokenizer class="solr.KeywordTokenizerFactory" />
       </analyzer>
       <analyzer type="query">
-	<tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/" />
+  <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/" />
       </analyzer>
     </fieldType>
 

Modified: lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/rss/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/rss/conf/solrconfig.xml?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/rss/conf/solrconfig.xml (original)
+++ lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/rss/conf/solrconfig.xml Wed Sep  2 13:06:13 2015
@@ -1065,7 +1065,7 @@
       <!-- maximum threshold of documents a query term can appear to be considered for correction -->
       <float name="maxQueryFrequency">0.01</float>
       <!-- uncomment this to require suggestions to occur in 1% of the documents
-      	<float name="thresholdTokenFrequency">.01</float>
+        <float name="thresholdTokenFrequency">.01</float>
       -->
     </lst>
     
@@ -1156,7 +1156,7 @@
   </requestHandler>
 
   <searchComponent name="suggest" class="solr.SuggestComponent">
-  	<lst name="suggester">
+    <lst name="suggester">
       <str name="name">mySuggester</str>
       <str name="lookupImpl">FuzzyLookupFactory</str>      <!-- org.apache.solr.spelling.suggest.fst -->
       <str name="dictionaryImpl">DocumentDictionaryFactory</str>     <!-- org.apache.solr.spelling.suggest.HighFrequencyDictionaryFactory --> 

Modified: lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/rss/conf/xslt/example_rss.xsl
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/rss/conf/xslt/example_rss.xsl?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/rss/conf/xslt/example_rss.xsl (original)
+++ lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/rss/conf/xslt/example_rss.xsl Wed Sep  2 13:06:13 2015
@@ -32,7 +32,7 @@
   <xsl:template match='/'>
     <rss version="2.0">
        <channel>
-	 <title>Example Solr RSS 2.0 Feed</title>
+         <title>Example Solr RSS 2.0 Feed</title>
          <link>http://localhost:8983/solr</link>
          <description>
           This has been formatted by the sample "example_rss.xsl" transform -

Modified: lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/rss/conf/xslt/updateXml.xsl
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/rss/conf/xslt/updateXml.xsl?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/rss/conf/xslt/updateXml.xsl (original)
+++ lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/rss/conf/xslt/updateXml.xsl Wed Sep  2 13:06:13 2015
@@ -49,10 +49,10 @@
       <xsl:variable name="fn" select="@name"/>
       
       <xsl:for-each select="*">
-		<xsl:element name="field">
-		    <xsl:attribute name="name"><xsl:value-of select="$fn"/></xsl:attribute>
-	        <xsl:value-of select="."/>
-		</xsl:element>
+        <xsl:element name="field">
+          <xsl:attribute name="name"><xsl:value-of select="$fn"/></xsl:attribute>
+          <xsl:value-of select="."/>
+        </xsl:element>
       </xsl:for-each>
   </xsl:template>
 
@@ -60,10 +60,10 @@
   <xsl:template match="doc/*">
       <xsl:variable name="fn" select="@name"/>
 
-	<xsl:element name="field">
-	    <xsl:attribute name="name"><xsl:value-of select="$fn"/></xsl:attribute>
+      <xsl:element name="field">
+        <xsl:attribute name="name"><xsl:value-of select="$fn"/></xsl:attribute>
         <xsl:value-of select="."/>
-	</xsl:element>
+      </xsl:element>
   </xsl:template>
 
   <xsl:template match="*"/>

Modified: lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/solr/conf/schema.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/solr/conf/schema.xml?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/solr/conf/schema.xml (original)
+++ lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/solr/conf/schema.xml Wed Sep  2 13:06:13 2015
@@ -290,12 +290,12 @@
 
    <!-- Create a string version of author for faceting -->
    <copyField source="author" dest="author_s"/>
-	
+  
    <!-- Above, multiple source fields are copied to the [text] field. 
-	  Another way to map multiple source fields to the same 
-	  destination field is to use the dynamic field syntax. 
-	  copyField also supports a maxChars to copy setting.  -->
-	   
+    Another way to map multiple source fields to the same 
+    destination field is to use the dynamic field syntax. 
+    copyField also supports a maxChars to copy setting.  -->
+     
    <!-- <copyField source="*_t" dest="text" maxChars="3000"/> -->
 
    <!-- copy name to alphaNameSort, a field designed for sorting by name -->
@@ -322,8 +322,8 @@
     <!-- sortMissingLast and sortMissingFirst attributes are optional attributes are
          currently supported on types that are sorted internally as strings
          and on numeric types.
-	     This includes "string","boolean", and, as of 3.5 (and 4.x),
-	     int, float, long, date, double, including the "Trie" variants.
+       This includes "string","boolean", and, as of 3.5 (and 4.x),
+       int, float, long, date, double, including the "Trie" variants.
        - If sortMissingLast="true", then a sort on this field will cause documents
          without the field to come after documents with the field,
          regardless of the requested sort order (asc or desc).
@@ -434,9 +434,9 @@
 
     <!-- A general text field that has reasonable, generic
          cross-language defaults: it tokenizes with StandardTokenizer,
-	 removes stop words from case-insensitive "stopwords.txt"
-	 (empty by default), and down cases.  At query time only, it
-	 also applies synonyms. -->
+   removes stop words from case-insensitive "stopwords.txt"
+   (empty by default), and down cases.  At query time only, it
+   also applies synonyms. -->
     <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
       <analyzer type="index">
         <tokenizer class="solr.StandardTokenizerFactory"/>
@@ -472,11 +472,11 @@
                 words="lang/stopwords_en.txt"
                 />
         <filter class="solr.LowerCaseFilterFactory"/>
-	<filter class="solr.EnglishPossessiveFilterFactory"/>
+  <filter class="solr.EnglishPossessiveFilterFactory"/>
         <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
-	<!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
+  <!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
         <filter class="solr.EnglishMinimalStemFilterFactory"/>
-	-->
+  -->
         <filter class="solr.PorterStemFilterFactory"/>
       </analyzer>
       <analyzer type="query">
@@ -487,23 +487,23 @@
                 words="lang/stopwords_en.txt"
                 />
         <filter class="solr.LowerCaseFilterFactory"/>
-	<filter class="solr.EnglishPossessiveFilterFactory"/>
+  <filter class="solr.EnglishPossessiveFilterFactory"/>
         <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
-	<!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
+  <!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
         <filter class="solr.EnglishMinimalStemFilterFactory"/>
-	-->
+  -->
         <filter class="solr.PorterStemFilterFactory"/>
       </analyzer>
     </fieldType>
 
     <!-- A text field with defaults appropriate for English, plus
-	 aggressive word-splitting and autophrase features enabled.
-	 This field is just like text_en, except it adds
-	 WordDelimiterFilter to enable splitting and matching of
-	 words on case-change, alpha numeric boundaries, and
-	 non-alphanumeric chars.  This means certain compound word
-	 cases will work, for example query "wi fi" will match
-	 document "WiFi" or "wi-fi".
+   aggressive word-splitting and autophrase features enabled.
+   This field is just like text_en, except it adds
+   WordDelimiterFilter to enable splitting and matching of
+   words on case-change, alpha numeric boundaries, and
+   non-alphanumeric chars.  This means certain compound word
+   cases will work, for example query "wi fi" will match
+   document "WiFi" or "wi-fi".
         -->
     <fieldType name="text_en_splitting" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
       <analyzer type="index">
@@ -554,7 +554,7 @@
     </fieldType>
 
     <!-- Just like text_general except it reverses the characters of
-	 each token, to enable more efficient leading wildcard queries. -->
+   each token, to enable more efficient leading wildcard queries. -->
     <fieldType name="text_general_rev" class="solr.TextField" positionIncrementGap="100">
       <analyzer type="index">
         <tokenizer class="solr.StandardTokenizerFactory"/>
@@ -629,10 +629,10 @@
         a token of "foo|1.4"  would be indexed as "foo" with a payload of 1.4f
         Attributes of the DelimitedPayloadTokenFilterFactory : 
          "delimiter" - a one character delimiter. Default is | (pipe)
-	 "encoder" - how to encode the following value into a playload
-	    float -> org.apache.lucene.analysis.payloads.FloatEncoder,
-	    integer -> o.a.l.a.p.IntegerEncoder
-	    identity -> o.a.l.a.p.IdentityEncoder
+   "encoder" - how to encode the following value into a playload
+      float -> org.apache.lucene.analysis.payloads.FloatEncoder,
+      integer -> o.a.l.a.p.IntegerEncoder
+      identity -> o.a.l.a.p.IdentityEncoder
             Fully Qualified class name implementing PayloadEncoder, Encoder must have a no arg constructor.
          -->
         <filter class="solr.DelimitedPayloadTokenFilterFactory" encoder="float"/>
@@ -653,10 +653,10 @@
     -->
     <fieldType name="descendent_path" class="solr.TextField">
       <analyzer type="index">
-	<tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/" />
+  <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/" />
       </analyzer>
       <analyzer type="query">
-	<tokenizer class="solr.KeywordTokenizerFactory" />
+  <tokenizer class="solr.KeywordTokenizerFactory" />
       </analyzer>
     </fieldType>
     <!-- 
@@ -665,10 +665,10 @@
     -->
     <fieldType name="ancestor_path" class="solr.TextField">
       <analyzer type="index">
-	<tokenizer class="solr.KeywordTokenizerFactory" />
+  <tokenizer class="solr.KeywordTokenizerFactory" />
       </analyzer>
       <analyzer type="query">
-	<tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/" />
+  <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/" />
       </analyzer>
     </fieldType>
 

Modified: lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/solr/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/solr/conf/solrconfig.xml?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/solr/conf/solrconfig.xml (original)
+++ lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/solr/conf/solrconfig.xml Wed Sep  2 13:06:13 2015
@@ -1066,7 +1066,7 @@
       <!-- maximum threshold of documents a query term can appear to be considered for correction -->
       <float name="maxQueryFrequency">0.01</float>
       <!-- uncomment this to require suggestions to occur in 1% of the documents
-      	<float name="thresholdTokenFrequency">.01</float>
+        <float name="thresholdTokenFrequency">.01</float>
       -->
     </lst>
     
@@ -1157,7 +1157,7 @@
   </requestHandler>
 
   <searchComponent name="suggest" class="solr.SuggestComponent">
-  	<lst name="suggester">
+    <lst name="suggester">
       <str name="name">mySuggester</str>
       <str name="lookupImpl">FuzzyLookupFactory</str>      <!-- org.apache.solr.spelling.suggest.fst -->
       <str name="dictionaryImpl">DocumentDictionaryFactory</str>     <!-- org.apache.solr.spelling.suggest.HighFrequencyDictionaryFactory --> 

Modified: lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/solr/conf/xslt/example_rss.xsl
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/solr/conf/xslt/example_rss.xsl?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/solr/conf/xslt/example_rss.xsl (original)
+++ lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/solr/conf/xslt/example_rss.xsl Wed Sep  2 13:06:13 2015
@@ -32,7 +32,7 @@
   <xsl:template match='/'>
     <rss version="2.0">
        <channel>
-	 <title>Example Solr RSS 2.0 Feed</title>
+         <title>Example Solr RSS 2.0 Feed</title>
          <link>http://localhost:8983/solr</link>
          <description>
           This has been formatted by the sample "example_rss.xsl" transform -

Modified: lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/solr/conf/xslt/updateXml.xsl
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/solr/conf/xslt/updateXml.xsl?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/solr/conf/xslt/updateXml.xsl (original)
+++ lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/solr/conf/xslt/updateXml.xsl Wed Sep  2 13:06:13 2015
@@ -49,10 +49,10 @@
       <xsl:variable name="fn" select="@name"/>
       
       <xsl:for-each select="*">
-		<xsl:element name="field">
-		    <xsl:attribute name="name"><xsl:value-of select="$fn"/></xsl:attribute>
-	        <xsl:value-of select="."/>
-		</xsl:element>
+        <xsl:element name="field">
+          <xsl:attribute name="name"><xsl:value-of select="$fn"/></xsl:attribute>
+          <xsl:value-of select="."/>
+        </xsl:element>
       </xsl:for-each>
   </xsl:template>
 
@@ -60,10 +60,10 @@
   <xsl:template match="doc/*">
       <xsl:variable name="fn" select="@name"/>
 
-	<xsl:element name="field">
-	    <xsl:attribute name="name"><xsl:value-of select="$fn"/></xsl:attribute>
+      <xsl:element name="field">
+        <xsl:attribute name="name"><xsl:value-of select="$fn"/></xsl:attribute>
         <xsl:value-of select="."/>
-	</xsl:element>
+      </xsl:element>
   </xsl:template>
 
   <xsl:template match="*"/>

Modified: lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/tika/conf/schema.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/tika/conf/schema.xml?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/tika/conf/schema.xml (original)
+++ lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/tika/conf/schema.xml Wed Sep  2 13:06:13 2015
@@ -201,8 +201,8 @@
     <!-- sortMissingLast and sortMissingFirst attributes are optional attributes are
          currently supported on types that are sorted internally as strings
          and on numeric types.
-	     This includes "string","boolean", and, as of 3.5 (and 4.x),
-	     int, float, long, date, double, including the "Trie" variants.
+       This includes "string","boolean", and, as of 3.5 (and 4.x),
+       int, float, long, date, double, including the "Trie" variants.
        - If sortMissingLast="true", then a sort on this field will cause documents
          without the field to come after documents with the field,
          regardless of the requested sort order (asc or desc).
@@ -332,31 +332,31 @@
       <analyzer type="index">
         <tokenizer class="solr.StandardTokenizerFactory"/>
         <filter class="solr.LowerCaseFilterFactory"/>
-	<filter class="solr.EnglishPossessiveFilterFactory"/>
-	<!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
+  <filter class="solr.EnglishPossessiveFilterFactory"/>
+  <!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
         <filter class="solr.EnglishMinimalStemFilterFactory"/>
-	-->
+  -->
         <filter class="solr.PorterStemFilterFactory"/>
       </analyzer>
       <analyzer type="query">
         <tokenizer class="solr.StandardTokenizerFactory"/>
         <filter class="solr.LowerCaseFilterFactory"/>
-	<filter class="solr.EnglishPossessiveFilterFactory"/>
-	<!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
+  <filter class="solr.EnglishPossessiveFilterFactory"/>
+  <!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
         <filter class="solr.EnglishMinimalStemFilterFactory"/>
-	-->
+  -->
         <filter class="solr.PorterStemFilterFactory"/>
       </analyzer>
     </fieldType>
 
     <!-- A text field with defaults appropriate for English, plus
-	 aggressive word-splitting and autophrase features enabled.
-	 This field is just like text_en, except it adds
-	 WordDelimiterFilter to enable splitting and matching of
-	 words on case-change, alpha numeric boundaries, and
-	 non-alphanumeric chars.  This means certain compound word
-	 cases will work, for example query "wi fi" will match
-	 document "WiFi" or "wi-fi".
+   aggressive word-splitting and autophrase features enabled.
+   This field is just like text_en, except it adds
+   WordDelimiterFilter to enable splitting and matching of
+   words on case-change, alpha numeric boundaries, and
+   non-alphanumeric chars.  This means certain compound word
+   cases will work, for example query "wi fi" will match
+   document "WiFi" or "wi-fi".
         -->
     <fieldType name="text_en_splitting" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true">
       <analyzer type="index">
@@ -388,7 +388,7 @@
     </fieldType>
 
     <!-- Just like text_general except it reverses the characters of
-	 each token, to enable more efficient leading wildcard queries. -->
+   each token, to enable more efficient leading wildcard queries. -->
     <fieldType name="text_general_rev" class="solr.TextField" positionIncrementGap="100">
       <analyzer type="index">
         <tokenizer class="solr.StandardTokenizerFactory"/>
@@ -460,10 +460,10 @@
         a token of "foo|1.4"  would be indexed as "foo" with a payload of 1.4f
         Attributes of the DelimitedPayloadTokenFilterFactory : 
          "delimiter" - a one character delimiter. Default is | (pipe)
-	 "encoder" - how to encode the following value into a playload
-	    float -> org.apache.lucene.analysis.payloads.FloatEncoder,
-	    integer -> o.a.l.a.p.IntegerEncoder
-	    identity -> o.a.l.a.p.IdentityEncoder
+   "encoder" - how to encode the following value into a playload
+      float -> org.apache.lucene.analysis.payloads.FloatEncoder,
+      integer -> o.a.l.a.p.IntegerEncoder
+      identity -> o.a.l.a.p.IdentityEncoder
             Fully Qualified class name implementing PayloadEncoder, Encoder must have a no arg constructor.
          -->
         <filter class="solr.DelimitedPayloadTokenFilterFactory" encoder="float"/>
@@ -484,10 +484,10 @@
     -->
     <fieldType name="descendent_path" class="solr.TextField">
       <analyzer type="index">
-	<tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/" />
+  <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/" />
       </analyzer>
       <analyzer type="query">
-	<tokenizer class="solr.KeywordTokenizerFactory" />
+  <tokenizer class="solr.KeywordTokenizerFactory" />
       </analyzer>
     </fieldType>
     <!-- 
@@ -496,10 +496,10 @@
     -->
     <fieldType name="ancestor_path" class="solr.TextField">
       <analyzer type="index">
-	<tokenizer class="solr.KeywordTokenizerFactory" />
+  <tokenizer class="solr.KeywordTokenizerFactory" />
       </analyzer>
       <analyzer type="query">
-	<tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/" />
+  <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/" />
       </analyzer>
     </fieldType>
 

Modified: lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/tika/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/tika/conf/solrconfig.xml?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/tika/conf/solrconfig.xml (original)
+++ lucene/dev/branches/lucene6699/solr/example/example-DIH/solr/tika/conf/solrconfig.xml Wed Sep  2 13:06:13 2015
@@ -1068,7 +1068,7 @@
       <!-- maximum threshold of documents a query term can appear to be considered for correction -->
       <float name="maxQueryFrequency">0.01</float>
       <!-- uncomment this to require suggestions to occur in 1% of the documents
-      	<float name="thresholdTokenFrequency">.01</float>
+        <float name="thresholdTokenFrequency">.01</float>
       -->
     </lst>
     
@@ -1159,7 +1159,7 @@
   </requestHandler>
 
   <searchComponent name="suggest" class="solr.SuggestComponent">
-  	<lst name="suggester">
+    <lst name="suggester">
       <str name="name">mySuggester</str>
       <str name="lookupImpl">FuzzyLookupFactory</str>      <!-- org.apache.solr.spelling.suggest.fst -->
       <str name="dictionaryImpl">DocumentDictionaryFactory</str>     <!-- org.apache.solr.spelling.suggest.HighFrequencyDictionaryFactory --> 

Modified: lucene/dev/branches/lucene6699/solr/example/exampledocs/mem.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/example/exampledocs/mem.xml?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/example/exampledocs/mem.xml (original)
+++ lucene/dev/branches/lucene6699/solr/example/exampledocs/mem.xml Wed Sep  2 13:06:13 2015
@@ -24,7 +24,7 @@
   <field name="manu_id_s">corsair</field>
   <field name="cat">electronics</field>
   <field name="cat">memory</field>
-  <field name="features">CAS latency 2,	2-3-3-6 timing, 2.75v, unbuffered, heat-spreader</field>
+  <field name="features">CAS latency 2,  2-3-3-6 timing, 2.75v, unbuffered, heat-spreader</field>
   <field name="price">185.00</field>
   <field name="popularity">5</field>
   <field name="inStock">true</field>
@@ -62,7 +62,7 @@
   <field name="manu_id_s">corsair</field>
   <field name="cat">electronics</field>
   <field name="cat">memory</field>
-  <field name="features">CAS latency 3,	 2.7v</field>
+  <field name="features">CAS latency 3,   2.7v</field>
   <!-- note: price & popularity is missing on this one -->
   <field name="popularity">0</field>
   <field name="inStock">true</field>

Modified: lucene/dev/branches/lucene6699/solr/example/exampledocs/test_utf8.sh
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/example/exampledocs/test_utf8.sh?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/example/exampledocs/test_utf8.sh (original)
+++ lucene/dev/branches/lucene6699/solr/example/exampledocs/test_utf8.sh Wed Sep  2 13:06:13 2015
@@ -17,13 +17,13 @@
 #Test script to tell if the server is accepting UTF-8
 #The python writer currently escapes non-ascii chars, so it's good for testing
 
-URL=http://localhost:8983/solr
+SOLR_URL=http://localhost:8983/solr
 
 if [ ! -z $1 ]; then
-  URL=$1
+  SOLR_URL=$1
 fi
 
-curl "$URL/select?q=hello&params=explicit&wt=python" 2> /dev/null | grep 'hello' > /dev/null 2>&1
+curl "$SOLR_URL/select?q=hello&params=explicit&wt=python" 2> /dev/null | grep 'hello' > /dev/null 2>&1
 if [ $? = 0 ]; then
   echo "Solr server is up."
 else
@@ -31,21 +31,21 @@ else
   exit 1
 fi
 
-curl "$URL/select?q=h%C3%A9llo&echoParams=explicit&wt=python" 2> /dev/null | grep 'h\\u00e9llo' > /dev/null 2>&1
+curl "$SOLR_URL/select?q=h%C3%A9llo&echoParams=explicit&wt=python" 2> /dev/null | grep 'h\\u00e9llo' > /dev/null 2>&1
 if [ $? = 0 ]; then
   echo "HTTP GET is accepting UTF-8"
 else
   echo "ERROR: HTTP GET is not accepting UTF-8"
 fi
 
-curl $URL/select --data-binary 'q=h%C3%A9llo&echoParams=explicit&wt=python' -H 'Content-type:application/x-www-form-urlencoded; charset=UTF-8' 2> /dev/null | grep 'h\\u00e9llo' > /dev/null 2>&1
+curl $SOLR_URL/select --data-binary 'q=h%C3%A9llo&echoParams=explicit&wt=python' -H 'Content-type:application/x-www-form-urlencoded; charset=UTF-8' 2> /dev/null | grep 'h\\u00e9llo' > /dev/null 2>&1
 if [ $? = 0 ]; then
   echo "HTTP POST is accepting UTF-8"
 else
   echo "ERROR: HTTP POST is not accepting UTF-8"
 fi
 
-curl $URL/select --data-binary 'q=h%C3%A9llo&echoParams=explicit&wt=python' 2> /dev/null | grep 'h\\u00e9llo' > /dev/null 2>&1
+curl $SOLR_URL/select --data-binary 'q=h%C3%A9llo&echoParams=explicit&wt=python' 2> /dev/null | grep 'h\\u00e9llo' > /dev/null 2>&1
 if [ $? = 0 ]; then
   echo "HTTP POST defaults to UTF-8"
 else
@@ -57,33 +57,33 @@ fi
 CHAR="𐌈"
 CODEPOINT='0x10308'
 #URL encoded UTF8 of the codepoint
-URL_UTF8='%F0%90%8C%88'
+UTF8_Q='%F0%90%8C%88'
 #expected return of the python writer (currently uses UTF-16 surrogates)
 EXPECTED='\\ud800\\udf08'
 
-curl "$URL/select?q=$URL_UTF8&echoParams=explicit&wt=python" 2> /dev/null | grep $EXPECTED > /dev/null 2>&1
+curl "$SOLR_URL/select?q=$UTF8_Q&echoParams=explicit&wt=python" 2> /dev/null | grep $EXPECTED > /dev/null 2>&1
 if [ $? = 0 ]; then
   echo "HTTP GET is accepting UTF-8 beyond the basic multilingual plane"
 else
   echo "ERROR: HTTP GET is not accepting UTF-8 beyond the basic multilingual plane"
 fi
 
-curl $URL/select --data-binary "q=$URL_UTF8&echoParams=explicit&wt=python"  -H 'Content-type:application/x-www-form-urlencoded; charset=UTF-8' 2> /dev/null | grep $EXPECTED > /dev/null 2>&1
+curl $SOLR_URL/select --data-binary "q=$UTF8_Q&echoParams=explicit&wt=python"  -H 'Content-type:application/x-www-form-urlencoded; charset=UTF-8' 2> /dev/null | grep $EXPECTED > /dev/null 2>&1
 if [ $? = 0 ]; then
   echo "HTTP POST is accepting UTF-8 beyond the basic multilingual plane"
 else
   echo "ERROR: HTTP POST is not accepting UTF-8 beyond the basic multilingual plane"
 fi
 
-curl "$URL/select?q=$URL_UTF8&echoParams=explicit&wt=python" --data-binary '' 2> /dev/null | grep $EXPECTED > /dev/null 2>&1
+curl "$SOLR_URL/select?q=$UTF8_Q&echoParams=explicit&wt=python" --data-binary '' 2> /dev/null | grep $EXPECTED > /dev/null 2>&1
 if [ $? = 0 ]; then
   echo "HTTP POST + URL params is accepting UTF-8 beyond the basic multilingual plane"
 else
   echo "ERROR: HTTP POST + URL params is not accepting UTF-8 beyond the basic multilingual plane"
 fi
 
-#curl "$URL/select?q=$URL_UTF8&echoParams=explicit&wt=json" 2> /dev/null | od -tx1 -w1000 | sed 's/ //g' | grep 'f4808198' > /dev/null 2>&1
-curl "$URL/select?q=$URL_UTF8&echoParams=explicit&wt=json" 2> /dev/null | grep "$CHAR" > /dev/null 2>&1
+#curl "$SOLR_URL/select?q=$UTF8_Q&echoParams=explicit&wt=json" 2> /dev/null | od -tx1 -w1000 | sed 's/ //g' | grep 'f4808198' > /dev/null 2>&1
+curl "$SOLR_URL/select?q=$UTF8_Q&echoParams=explicit&wt=json" 2> /dev/null | grep "$CHAR" > /dev/null 2>&1
 if [ $? = 0 ]; then
   echo "Response correctly returns UTF-8 beyond the basic multilingual plane"
 else

Modified: lucene/dev/branches/lucene6699/solr/example/files/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/example/files/conf/solrconfig.xml?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/example/files/conf/solrconfig.xml (original)
+++ lucene/dev/branches/lucene6699/solr/example/files/conf/solrconfig.xml Wed Sep  2 13:06:13 2015
@@ -1052,7 +1052,7 @@
       <!-- maximum threshold of documents a query term can appear to be considered for correction -->
       <float name="maxQueryFrequency">0.01</float>
       <!-- uncomment this to require suggestions to occur in 1% of the documents
-      	<float name="thresholdTokenFrequency">.01</float>
+        <float name="thresholdTokenFrequency">.01</float>
       -->
     </lst>
 

Modified: lucene/dev/branches/lucene6699/solr/example/files/conf/velocity/js/jquery.autocomplete.js
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/example/files/conf/velocity/js/jquery.autocomplete.js?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/example/files/conf/velocity/js/jquery.autocomplete.js (original)
+++ lucene/dev/branches/lucene6699/solr/example/files/conf/velocity/js/jquery.autocomplete.js Wed Sep  2 13:06:13 2015
@@ -12,752 +12,752 @@
  */
 
 ;(function($) {
-	
+  
 $.fn.extend({
-	autocomplete: function(urlOrData, options) {
-		var isUrl = typeof urlOrData == "string";
-		options = $.extend({}, $.Autocompleter.defaults, {
-			url: isUrl ? urlOrData : null,
-			data: isUrl ? null : urlOrData,
-			delay: isUrl ? $.Autocompleter.defaults.delay : 10,
-			max: options && !options.scroll ? 10 : 150
-		}, options);
-		
-		// if highlight is set to false, replace it with a do-nothing function
-		options.highlight = options.highlight || function(value) { return value; };
-		
-		// if the formatMatch option is not specified, then use formatItem for backwards compatibility
-		options.formatMatch = options.formatMatch || options.formatItem;
-		
-		return this.each(function() {
-			new $.Autocompleter(this, options);
-		});
-	},
-	result: function(handler) {
-		return this.bind("result", handler);
-	},
-	search: function(handler) {
-		return this.trigger("search", [handler]);
-	},
-	flushCache: function() {
-		return this.trigger("flushCache");
-	},
-	setOptions: function(options){
-		return this.trigger("setOptions", [options]);
-	},
-	unautocomplete: function() {
-		return this.trigger("unautocomplete");
-	}
+  autocomplete: function(urlOrData, options) {
+    var isUrl = typeof urlOrData == "string";
+    options = $.extend({}, $.Autocompleter.defaults, {
+      url: isUrl ? urlOrData : null,
+      data: isUrl ? null : urlOrData,
+      delay: isUrl ? $.Autocompleter.defaults.delay : 10,
+      max: options && !options.scroll ? 10 : 150
+    }, options);
+    
+    // if highlight is set to false, replace it with a do-nothing function
+    options.highlight = options.highlight || function(value) { return value; };
+    
+    // if the formatMatch option is not specified, then use formatItem for backwards compatibility
+    options.formatMatch = options.formatMatch || options.formatItem;
+    
+    return this.each(function() {
+      new $.Autocompleter(this, options);
+    });
+  },
+  result: function(handler) {
+    return this.bind("result", handler);
+  },
+  search: function(handler) {
+    return this.trigger("search", [handler]);
+  },
+  flushCache: function() {
+    return this.trigger("flushCache");
+  },
+  setOptions: function(options){
+    return this.trigger("setOptions", [options]);
+  },
+  unautocomplete: function() {
+    return this.trigger("unautocomplete");
+  }
 });
 
 $.Autocompleter = function(input, options) {
 
-	var KEY = {
-		UP: 38,
-		DOWN: 40,
-		DEL: 46,
-		TAB: 9,
-		RETURN: 13,
-		ESC: 27,
-		COMMA: 188,
-		PAGEUP: 33,
-		PAGEDOWN: 34,
-		BACKSPACE: 8
-	};
-
-	// Create $ object for input element
-	var $input = $(input).attr("autocomplete", "off").addClass(options.inputClass);
-
-	var timeout;
-	var previousValue = "";
-	var cache = $.Autocompleter.Cache(options);
-	var hasFocus = 0;
-	var lastKeyPressCode;
-	var config = {
-		mouseDownOnSelect: false
-	};
-	var select = $.Autocompleter.Select(options, input, selectCurrent, config);
-	
-	var blockSubmit;
-	
-	// prevent form submit in opera when selecting with return key
-	$.browser.opera && $(input.form).bind("submit.autocomplete", function() {
-		if (blockSubmit) {
-			blockSubmit = false;
-			return false;
-		}
-	});
-	
-	// only opera doesn't trigger keydown multiple times while pressed, others don't work with keypress at all
-	$input.bind(($.browser.opera ? "keypress" : "keydown") + ".autocomplete", function(event) {
-		// track last key pressed
-		lastKeyPressCode = event.keyCode;
-		switch(event.keyCode) {
-		
-			case KEY.UP:
-				event.preventDefault();
-				if ( select.visible() ) {
-					select.prev();
-				} else {
-					onChange(0, true);
-				}
-				break;
-				
-			case KEY.DOWN:
-				event.preventDefault();
-				if ( select.visible() ) {
-					select.next();
-				} else {
-					onChange(0, true);
-				}
-				break;
-				
-			case KEY.PAGEUP:
-				event.preventDefault();
-				if ( select.visible() ) {
-					select.pageUp();
-				} else {
-					onChange(0, true);
-				}
-				break;
-				
-			case KEY.PAGEDOWN:
-				event.preventDefault();
-				if ( select.visible() ) {
-					select.pageDown();
-				} else {
-					onChange(0, true);
-				}
-				break;
-			
-			// matches also semicolon
-			case options.multiple && $.trim(options.multipleSeparator) == "," && KEY.COMMA:
-			case KEY.TAB:
-			case KEY.RETURN:
-				if( selectCurrent() ) {
-					// stop default to prevent a form submit, Opera needs special handling
-					event.preventDefault();
-					blockSubmit = true;
-					return false;
-				}
-				break;
-				
-			case KEY.ESC:
-				select.hide();
-				break;
-				
-			default:
-				clearTimeout(timeout);
-				timeout = setTimeout(onChange, options.delay);
-				break;
-		}
-	}).focus(function(){
-		// track whether the field has focus, we shouldn't process any
-		// results if the field no longer has focus
-		hasFocus++;
-	}).blur(function() {
-		hasFocus = 0;
-		if (!config.mouseDownOnSelect) {
-			hideResults();
-		}
-	}).click(function() {
-		// show select when clicking in a focused field
-		if ( hasFocus++ > 1 && !select.visible() ) {
-			onChange(0, true);
-		}
-	}).bind("search", function() {
-		// TODO why not just specifying both arguments?
-		var fn = (arguments.length > 1) ? arguments[1] : null;
-		function findValueCallback(q, data) {
-			var result;
-			if( data && data.length ) {
-				for (var i=0; i < data.length; i++) {
-					if( data[i].result.toLowerCase() == q.toLowerCase() ) {
-						result = data[i];
-						break;
-					}
-				}
-			}
-			if( typeof fn == "function" ) fn(result);
-			else $input.trigger("result", result && [result.data, result.value]);
-		}
-		$.each(trimWords($input.val()), function(i, value) {
-			request(value, findValueCallback, findValueCallback);
-		});
-	}).bind("flushCache", function() {
-		cache.flush();
-	}).bind("setOptions", function() {
-		$.extend(options, arguments[1]);
-		// if we've updated the data, repopulate
-		if ( "data" in arguments[1] )
-			cache.populate();
-	}).bind("unautocomplete", function() {
-		select.unbind();
-		$input.unbind();
-		$(input.form).unbind(".autocomplete");
-	});
-	
-	
-	function selectCurrent() {
-		var selected = select.selected();
-		if( !selected )
-			return false;
-		
-		var v = selected.result;
-		previousValue = v;
-		
-		if ( options.multiple ) {
-			var words = trimWords($input.val());
-			if ( words.length > 1 ) {
-				v = words.slice(0, words.length - 1).join( options.multipleSeparator ) + options.multipleSeparator + v;
-			}
-			v += options.multipleSeparator;
-		}
-		
-		$input.val(v);
-		hideResultsNow();
-		$input.trigger("result", [selected.data, selected.value]);
-		return true;
-	}
-	
-	function onChange(crap, skipPrevCheck) {
-		if( lastKeyPressCode == KEY.DEL ) {
-			select.hide();
-			return;
-		}
-		
-		var currentValue = $input.val();
-		
-		if ( !skipPrevCheck && currentValue == previousValue )
-			return;
-		
-		previousValue = currentValue;
-		
-		currentValue = lastWord(currentValue);
-		if ( currentValue.length >= options.minChars) {
-			$input.addClass(options.loadingClass);
-			if (!options.matchCase)
-				currentValue = currentValue.toLowerCase();
-			request(currentValue, receiveData, hideResultsNow);
-		} else {
-			stopLoading();
-			select.hide();
-		}
-	};
-	
-	function trimWords(value) {
-		if ( !value ) {
-			return [""];
-		}
-		var words = value.split( options.multipleSeparator );
-		var result = [];
-		$.each(words, function(i, value) {
-			if ( $.trim(value) )
-				result[i] = $.trim(value);
-		});
-		return result;
-	}
-	
-	function lastWord(value) {
-		if ( !options.multiple )
-			return value;
-		var words = trimWords(value);
-		return words[words.length - 1];
-	}
-	
-	// fills in the input box w/the first match (assumed to be the best match)
-	// q: the term entered
-	// sValue: the first matching result
-	function autoFill(q, sValue){
-		// autofill in the complete box w/the first match as long as the user hasn't entered in more data
-		// if the last user key pressed was backspace, don't autofill
-		if( options.autoFill && (lastWord($input.val()).toLowerCase() == q.toLowerCase()) && lastKeyPressCode != KEY.BACKSPACE ) {
-			// fill in the value (keep the case the user has typed)
-			$input.val($input.val() + sValue.substring(lastWord(previousValue).length));
-			// select the portion of the value not typed by the user (so the next character will erase)
-			$.Autocompleter.Selection(input, previousValue.length, previousValue.length + sValue.length);
-		}
-	};
-
-	function hideResults() {
-		clearTimeout(timeout);
-		timeout = setTimeout(hideResultsNow, 200);
-	};
-
-	function hideResultsNow() {
-		var wasVisible = select.visible();
-		select.hide();
-		clearTimeout(timeout);
-		stopLoading();
-		if (options.mustMatch) {
-			// call search and run callback
-			$input.search(
-				function (result){
-					// if no value found, clear the input box
-					if( !result ) {
-						if (options.multiple) {
-							var words = trimWords($input.val()).slice(0, -1);
-							$input.val( words.join(options.multipleSeparator) + (words.length ? options.multipleSeparator : "") );
-						}
-						else
-							$input.val( "" );
-					}
-				}
-			);
-		}
-		if (wasVisible)
-			// position cursor at end of input field
-			$.Autocompleter.Selection(input, input.value.length, input.value.length);
-	};
-
-	function receiveData(q, data) {
-		if ( data && data.length && hasFocus ) {
-			stopLoading();
-			select.display(data, q);
-			autoFill(q, data[0].value);
-			select.show();
-		} else {
-			hideResultsNow();
-		}
-	};
-
-	function request(term, success, failure) {
-		if (!options.matchCase)
-			term = term.toLowerCase();
-		var data = cache.load(term);
-		data = null; // Avoid buggy cache and go to Solr every time 
-		// recieve the cached data
-		if (data && data.length) {
-			success(term, data);
-		// if an AJAX url has been supplied, try loading the data now
-		} else if( (typeof options.url == "string") && (options.url.length > 0) ){
-			
-			var extraParams = {
-				timestamp: +new Date()
-			};
-			$.each(options.extraParams, function(key, param) {
-				extraParams[key] = typeof param == "function" ? param() : param;
-			});
-			
-			$.ajax({
-				// try to leverage ajaxQueue plugin to abort previous requests
-				mode: "abort",
-				// limit abortion to this input
-				port: "autocomplete" + input.name,
-				dataType: options.dataType,
-				url: options.url,
-				data: $.extend({
-					q: lastWord(term),
-					limit: options.max
-				}, extraParams),
-				success: function(data) {
-					var parsed = options.parse && options.parse(data) || parse(data);
-					cache.add(term, parsed);
-					success(term, parsed);
-				}
-			});
-		} else {
-			// if we have a failure, we need to empty the list -- this prevents the the [TAB] key from selecting the last successful match
-			select.emptyList();
-			failure(term);
-		}
-	};
-	
-	function parse(data) {
-		var parsed = [];
-		var rows = data.split("\n");
-		for (var i=0; i < rows.length; i++) {
-			var row = $.trim(rows[i]);
-			if (row) {
-				row = row.split("|");
-				parsed[parsed.length] = {
-					data: row,
-					value: row[0],
-					result: options.formatResult && options.formatResult(row, row[0]) || row[0]
-				};
-			}
-		}
-		return parsed;
-	};
-
-	function stopLoading() {
-		$input.removeClass(options.loadingClass);
-	};
+  var KEY = {
+    UP: 38,
+    DOWN: 40,
+    DEL: 46,
+    TAB: 9,
+    RETURN: 13,
+    ESC: 27,
+    COMMA: 188,
+    PAGEUP: 33,
+    PAGEDOWN: 34,
+    BACKSPACE: 8
+  };
+
+  // Create $ object for input element
+  var $input = $(input).attr("autocomplete", "off").addClass(options.inputClass);
+
+  var timeout;
+  var previousValue = "";
+  var cache = $.Autocompleter.Cache(options);
+  var hasFocus = 0;
+  var lastKeyPressCode;
+  var config = {
+    mouseDownOnSelect: false
+  };
+  var select = $.Autocompleter.Select(options, input, selectCurrent, config);
+  
+  var blockSubmit;
+  
+  // prevent form submit in opera when selecting with return key
+  $.browser.opera && $(input.form).bind("submit.autocomplete", function() {
+    if (blockSubmit) {
+      blockSubmit = false;
+      return false;
+    }
+  });
+  
+  // only opera doesn't trigger keydown multiple times while pressed, others don't work with keypress at all
+  $input.bind(($.browser.opera ? "keypress" : "keydown") + ".autocomplete", function(event) {
+    // track last key pressed
+    lastKeyPressCode = event.keyCode;
+    switch(event.keyCode) {
+    
+      case KEY.UP:
+        event.preventDefault();
+        if ( select.visible() ) {
+          select.prev();
+        } else {
+          onChange(0, true);
+        }
+        break;
+        
+      case KEY.DOWN:
+        event.preventDefault();
+        if ( select.visible() ) {
+          select.next();
+        } else {
+          onChange(0, true);
+        }
+        break;
+        
+      case KEY.PAGEUP:
+        event.preventDefault();
+        if ( select.visible() ) {
+          select.pageUp();
+        } else {
+          onChange(0, true);
+        }
+        break;
+        
+      case KEY.PAGEDOWN:
+        event.preventDefault();
+        if ( select.visible() ) {
+          select.pageDown();
+        } else {
+          onChange(0, true);
+        }
+        break;
+      
+      // matches also semicolon
+      case options.multiple && $.trim(options.multipleSeparator) == "," && KEY.COMMA:
+      case KEY.TAB:
+      case KEY.RETURN:
+        if( selectCurrent() ) {
+          // stop default to prevent a form submit, Opera needs special handling
+          event.preventDefault();
+          blockSubmit = true;
+          return false;
+        }
+        break;
+        
+      case KEY.ESC:
+        select.hide();
+        break;
+        
+      default:
+        clearTimeout(timeout);
+        timeout = setTimeout(onChange, options.delay);
+        break;
+    }
+  }).focus(function(){
+    // track whether the field has focus, we shouldn't process any
+    // results if the field no longer has focus
+    hasFocus++;
+  }).blur(function() {
+    hasFocus = 0;
+    if (!config.mouseDownOnSelect) {
+      hideResults();
+    }
+  }).click(function() {
+    // show select when clicking in a focused field
+    if ( hasFocus++ > 1 && !select.visible() ) {
+      onChange(0, true);
+    }
+  }).bind("search", function() {
+    // TODO why not just specifying both arguments?
+    var fn = (arguments.length > 1) ? arguments[1] : null;
+    function findValueCallback(q, data) {
+      var result;
+      if( data && data.length ) {
+        for (var i=0; i < data.length; i++) {
+          if( data[i].result.toLowerCase() == q.toLowerCase() ) {
+            result = data[i];
+            break;
+          }
+        }
+      }
+      if( typeof fn == "function" ) fn(result);
+      else $input.trigger("result", result && [result.data, result.value]);
+    }
+    $.each(trimWords($input.val()), function(i, value) {
+      request(value, findValueCallback, findValueCallback);
+    });
+  }).bind("flushCache", function() {
+    cache.flush();
+  }).bind("setOptions", function() {
+    $.extend(options, arguments[1]);
+    // if we've updated the data, repopulate
+    if ( "data" in arguments[1] )
+      cache.populate();
+  }).bind("unautocomplete", function() {
+    select.unbind();
+    $input.unbind();
+    $(input.form).unbind(".autocomplete");
+  });
+  
+  
+  function selectCurrent() {
+    var selected = select.selected();
+    if( !selected )
+      return false;
+    
+    var v = selected.result;
+    previousValue = v;
+    
+    if ( options.multiple ) {
+      var words = trimWords($input.val());
+      if ( words.length > 1 ) {
+        v = words.slice(0, words.length - 1).join( options.multipleSeparator ) + options.multipleSeparator + v;
+      }
+      v += options.multipleSeparator;
+    }
+    
+    $input.val(v);
+    hideResultsNow();
+    $input.trigger("result", [selected.data, selected.value]);
+    return true;
+  }
+  
+  function onChange(crap, skipPrevCheck) {
+    if( lastKeyPressCode == KEY.DEL ) {
+      select.hide();
+      return;
+    }
+    
+    var currentValue = $input.val();
+    
+    if ( !skipPrevCheck && currentValue == previousValue )
+      return;
+    
+    previousValue = currentValue;
+    
+    currentValue = lastWord(currentValue);
+    if ( currentValue.length >= options.minChars) {
+      $input.addClass(options.loadingClass);
+      if (!options.matchCase)
+        currentValue = currentValue.toLowerCase();
+      request(currentValue, receiveData, hideResultsNow);
+    } else {
+      stopLoading();
+      select.hide();
+    }
+  };
+  
+  function trimWords(value) {
+    if ( !value ) {
+      return [""];
+    }
+    var words = value.split( options.multipleSeparator );
+    var result = [];
+    $.each(words, function(i, value) {
+      if ( $.trim(value) )
+        result[i] = $.trim(value);
+    });
+    return result;
+  }
+  
+  function lastWord(value) {
+    if ( !options.multiple )
+      return value;
+    var words = trimWords(value);
+    return words[words.length - 1];
+  }
+  
+  // fills in the input box w/the first match (assumed to be the best match)
+  // q: the term entered
+  // sValue: the first matching result
+  function autoFill(q, sValue){
+    // autofill in the complete box w/the first match as long as the user hasn't entered in more data
+    // if the last user key pressed was backspace, don't autofill
+    if( options.autoFill && (lastWord($input.val()).toLowerCase() == q.toLowerCase()) && lastKeyPressCode != KEY.BACKSPACE ) {
+      // fill in the value (keep the case the user has typed)
+      $input.val($input.val() + sValue.substring(lastWord(previousValue).length));
+      // select the portion of the value not typed by the user (so the next character will erase)
+      $.Autocompleter.Selection(input, previousValue.length, previousValue.length + sValue.length);
+    }
+  };
+
+  function hideResults() {
+    clearTimeout(timeout);
+    timeout = setTimeout(hideResultsNow, 200);
+  };
+
+  function hideResultsNow() {
+    var wasVisible = select.visible();
+    select.hide();
+    clearTimeout(timeout);
+    stopLoading();
+    if (options.mustMatch) {
+      // call search and run callback
+      $input.search(
+        function (result){
+          // if no value found, clear the input box
+          if( !result ) {
+            if (options.multiple) {
+              var words = trimWords($input.val()).slice(0, -1);
+              $input.val( words.join(options.multipleSeparator) + (words.length ? options.multipleSeparator : "") );
+            }
+            else
+              $input.val( "" );
+          }
+        }
+      );
+    }
+    if (wasVisible)
+      // position cursor at end of input field
+      $.Autocompleter.Selection(input, input.value.length, input.value.length);
+  };
+
+  function receiveData(q, data) {
+    if ( data && data.length && hasFocus ) {
+      stopLoading();
+      select.display(data, q);
+      autoFill(q, data[0].value);
+      select.show();
+    } else {
+      hideResultsNow();
+    }
+  };
+
+  function request(term, success, failure) {
+    if (!options.matchCase)
+      term = term.toLowerCase();
+    var data = cache.load(term);
+    data = null; // Avoid buggy cache and go to Solr every time 
+    // recieve the cached data
+    if (data && data.length) {
+      success(term, data);
+    // if an AJAX url has been supplied, try loading the data now
+    } else if( (typeof options.url == "string") && (options.url.length > 0) ){
+      
+      var extraParams = {
+        timestamp: +new Date()
+      };
+      $.each(options.extraParams, function(key, param) {
+        extraParams[key] = typeof param == "function" ? param() : param;
+      });
+      
+      $.ajax({
+        // try to leverage ajaxQueue plugin to abort previous requests
+        mode: "abort",
+        // limit abortion to this input
+        port: "autocomplete" + input.name,
+        dataType: options.dataType,
+        url: options.url,
+        data: $.extend({
+          q: lastWord(term),
+          limit: options.max
+        }, extraParams),
+        success: function(data) {
+          var parsed = options.parse && options.parse(data) || parse(data);
+          cache.add(term, parsed);
+          success(term, parsed);
+        }
+      });
+    } else {
+      // if we have a failure, we need to empty the list -- this prevents the the [TAB] key from selecting the last successful match
+      select.emptyList();
+      failure(term);
+    }
+  };
+  
+  function parse(data) {
+    var parsed = [];
+    var rows = data.split("\n");
+    for (var i=0; i < rows.length; i++) {
+      var row = $.trim(rows[i]);
+      if (row) {
+        row = row.split("|");
+        parsed[parsed.length] = {
+          data: row,
+          value: row[0],
+          result: options.formatResult && options.formatResult(row, row[0]) || row[0]
+        };
+      }
+    }
+    return parsed;
+  };
+
+  function stopLoading() {
+    $input.removeClass(options.loadingClass);
+  };
 
 };
 
 $.Autocompleter.defaults = {
-	inputClass: "ac_input",
-	resultsClass: "ac_results",
-	loadingClass: "ac_loading",
-	minChars: 1,
-	delay: 400,
-	matchCase: false,
-	matchSubset: true,
-	matchContains: false,
-	cacheLength: 10,
-	max: 100,
-	mustMatch: false,
-	extraParams: {},
-	selectFirst: false,
-	formatItem: function(row) { return row[0]; },
-	formatMatch: null,
-	autoFill: false,
-	width: 0,
-	multiple: false,
-	multipleSeparator: ", ",
-	highlight: function(value, term) {
-		return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>");
-	},
+  inputClass: "ac_input",
+  resultsClass: "ac_results",
+  loadingClass: "ac_loading",
+  minChars: 1,
+  delay: 400,
+  matchCase: false,
+  matchSubset: true,
+  matchContains: false,
+  cacheLength: 10,
+  max: 100,
+  mustMatch: false,
+  extraParams: {},
+  selectFirst: false,
+  formatItem: function(row) { return row[0]; },
+  formatMatch: null,
+  autoFill: false,
+  width: 0,
+  multiple: false,
+  multipleSeparator: ", ",
+  highlight: function(value, term) {
+    return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>");
+  },
     scroll: true,
     scrollHeight: 180
 };
 
 $.Autocompleter.Cache = function(options) {
 
-	var data = {};
-	var length = 0;
-	
-	function matchSubset(s, sub) {
-		if (!options.matchCase) 
-			s = s.toLowerCase();
-		var i = s.indexOf(sub);
-		if (options.matchContains == "word"){
-			i = s.toLowerCase().search("\\b" + sub.toLowerCase());
-		}
-		if (i == -1) return false;
-		return i == 0 || options.matchContains;
-	};
-	
-	function add(q, value) {
-		if (length > options.cacheLength){
-			flush();
-		}
-		if (!data[q]){ 
-			length++;
-		}
-		data[q] = value;
-	}
-	
-	function populate(){
-		if( !options.data ) return false;
-		// track the matches
-		var stMatchSets = {},
-			nullData = 0;
-
-		// no url was specified, we need to adjust the cache length to make sure it fits the local data store
-		if( !options.url ) options.cacheLength = 1;
-		
-		// track all options for minChars = 0
-		stMatchSets[""] = [];
-		
-		// loop through the array and create a lookup structure
-		for ( var i = 0, ol = options.data.length; i < ol; i++ ) {
-			var rawValue = options.data[i];
-			// if rawValue is a string, make an array otherwise just reference the array
-			rawValue = (typeof rawValue == "string") ? [rawValue] : rawValue;
-			
-			var value = options.formatMatch(rawValue, i+1, options.data.length);
-			if ( value === false )
-				continue;
-				
-			var firstChar = value.charAt(0).toLowerCase();
-			// if no lookup array for this character exists, look it up now
-			if( !stMatchSets[firstChar] ) 
-				stMatchSets[firstChar] = [];
-
-			// if the match is a string
-			var row = {
-				value: value,
-				data: rawValue,
-				result: options.formatResult && options.formatResult(rawValue) || value
-			};
-			
-			// push the current match into the set list
-			stMatchSets[firstChar].push(row);
-
-			// keep track of minChars zero items
-			if ( nullData++ < options.max ) {
-				stMatchSets[""].push(row);
-			}
-		};
-
-		// add the data items to the cache
-		$.each(stMatchSets, function(i, value) {
-			// increase the cache size
-			options.cacheLength++;
-			// add to the cache
-			add(i, value);
-		});
-	}
-	
-	// populate any existing data
-	setTimeout(populate, 25);
-	
-	function flush(){
-		data = {};
-		length = 0;
-	}
-	
-	return {
-		flush: flush,
-		add: add,
-		populate: populate,
-		load: function(q) {
-			if (!options.cacheLength || !length)
-				return null;
-			/* 
-			 * if dealing w/local data and matchContains than we must make sure
-			 * to loop through all the data collections looking for matches
-			 */
-			if( !options.url && options.matchContains ){
-				// track all matches
-				var csub = [];
-				// loop through all the data grids for matches
-				for( var k in data ){
-					// don't search through the stMatchSets[""] (minChars: 0) cache
-					// this prevents duplicates
-					if( k.length > 0 ){
-						var c = data[k];
-						$.each(c, function(i, x) {
-							// if we've got a match, add it to the array
-							if (matchSubset(x.value, q)) {
-								csub.push(x);
-							}
-						});
-					}
-				}				
-				return csub;
-			} else 
-			// if the exact item exists, use it
-			if (data[q]){
-				return data[q];
-			} else
-			if (options.matchSubset) {
-				for (var i = q.length - 1; i >= options.minChars; i--) {
-					var c = data[q.substr(0, i)];
-					if (c) {
-						var csub = [];
-						$.each(c, function(i, x) {
-							if (matchSubset(x.value, q)) {
-								csub[csub.length] = x;
-							}
-						});
-						return csub;
-					}
-				}
-			}
-			return null;
-		}
-	};
+  var data = {};
+  var length = 0;
+  
+  function matchSubset(s, sub) {
+    if (!options.matchCase) 
+      s = s.toLowerCase();
+    var i = s.indexOf(sub);
+    if (options.matchContains == "word"){
+      i = s.toLowerCase().search("\\b" + sub.toLowerCase());
+    }
+    if (i == -1) return false;
+    return i == 0 || options.matchContains;
+  };
+  
+  function add(q, value) {
+    if (length > options.cacheLength){
+      flush();
+    }
+    if (!data[q]){ 
+      length++;
+    }
+    data[q] = value;
+  }
+  
+  function populate(){
+    if( !options.data ) return false;
+    // track the matches
+    var stMatchSets = {},
+      nullData = 0;
+
+    // no url was specified, we need to adjust the cache length to make sure it fits the local data store
+    if( !options.url ) options.cacheLength = 1;
+    
+    // track all options for minChars = 0
+    stMatchSets[""] = [];
+    
+    // loop through the array and create a lookup structure
+    for ( var i = 0, ol = options.data.length; i < ol; i++ ) {
+      var rawValue = options.data[i];
+      // if rawValue is a string, make an array otherwise just reference the array
+      rawValue = (typeof rawValue == "string") ? [rawValue] : rawValue;
+      
+      var value = options.formatMatch(rawValue, i+1, options.data.length);
+      if ( value === false )
+        continue;
+        
+      var firstChar = value.charAt(0).toLowerCase();
+      // if no lookup array for this character exists, look it up now
+      if( !stMatchSets[firstChar] ) 
+        stMatchSets[firstChar] = [];
+
+      // if the match is a string
+      var row = {
+        value: value,
+        data: rawValue,
+        result: options.formatResult && options.formatResult(rawValue) || value
+      };
+      
+      // push the current match into the set list
+      stMatchSets[firstChar].push(row);
+
+      // keep track of minChars zero items
+      if ( nullData++ < options.max ) {
+        stMatchSets[""].push(row);
+      }
+    };
+
+    // add the data items to the cache
+    $.each(stMatchSets, function(i, value) {
+      // increase the cache size
+      options.cacheLength++;
+      // add to the cache
+      add(i, value);
+    });
+  }
+  
+  // populate any existing data
+  setTimeout(populate, 25);
+  
+  function flush(){
+    data = {};
+    length = 0;
+  }
+  
+  return {
+    flush: flush,
+    add: add,
+    populate: populate,
+    load: function(q) {
+      if (!options.cacheLength || !length)
+        return null;
+      /* 
+       * if dealing w/local data and matchContains than we must make sure
+       * to loop through all the data collections looking for matches
+       */
+      if( !options.url && options.matchContains ){
+        // track all matches
+        var csub = [];
+        // loop through all the data grids for matches
+        for( var k in data ){
+          // don't search through the stMatchSets[""] (minChars: 0) cache
+          // this prevents duplicates
+          if( k.length > 0 ){
+            var c = data[k];
+            $.each(c, function(i, x) {
+              // if we've got a match, add it to the array
+              if (matchSubset(x.value, q)) {
+                csub.push(x);
+              }
+            });
+          }
+        }        
+        return csub;
+      } else 
+      // if the exact item exists, use it
+      if (data[q]){
+        return data[q];
+      } else
+      if (options.matchSubset) {
+        for (var i = q.length - 1; i >= options.minChars; i--) {
+          var c = data[q.substr(0, i)];
+          if (c) {
+            var csub = [];
+            $.each(c, function(i, x) {
+              if (matchSubset(x.value, q)) {
+                csub[csub.length] = x;
+              }
+            });
+            return csub;
+          }
+        }
+      }
+      return null;
+    }
+  };
 };
 
 $.Autocompleter.Select = function (options, input, select, config) {
-	var CLASSES = {
-		ACTIVE: "ac_over"
-	};
-	
-	var listItems,
-		active = -1,
-		data,
-		term = "",
-		needsInit = true,
-		element,
-		list;
-	
-	// Create results
-	function init() {
-		if (!needsInit)
-			return;
-		element = $("<div/>")
-		.hide()
-		.addClass(options.resultsClass)
-		.css("position", "absolute")
-		.appendTo(document.body);
-	
-		list = $("<ul/>").appendTo(element).mouseover( function(event) {
-			if(target(event).nodeName && target(event).nodeName.toUpperCase() == 'LI') {
-	            active = $("li", list).removeClass(CLASSES.ACTIVE).index(target(event));
-			    $(target(event)).addClass(CLASSES.ACTIVE);            
-	        }
-		}).click(function(event) {
-			$(target(event)).addClass(CLASSES.ACTIVE);
-			select();
-			// TODO provide option to avoid setting focus again after selection? useful for cleanup-on-focus
-			input.focus();
-			return false;
-		}).mousedown(function() {
-			config.mouseDownOnSelect = true;
-		}).mouseup(function() {
-			config.mouseDownOnSelect = false;
-		});
-		
-		if( options.width > 0 )
-			element.css("width", options.width);
-			
-		needsInit = false;
-	} 
-	
-	function target(event) {
-		var element = event.target;
-		while(element && element.tagName != "LI")
-			element = element.parentNode;
-		// more fun with IE, sometimes event.target is empty, just ignore it then
-		if(!element)
-			return [];
-		return element;
-	}
-
-	function moveSelect(step) {
-		listItems.slice(active, active + 1).removeClass(CLASSES.ACTIVE);
-		movePosition(step);
+  var CLASSES = {
+    ACTIVE: "ac_over"
+  };
+  
+  var listItems,
+    active = -1,
+    data,
+    term = "",
+    needsInit = true,
+    element,
+    list;
+  
+  // Create results
+  function init() {
+    if (!needsInit)
+      return;
+    element = $("<div/>")
+    .hide()
+    .addClass(options.resultsClass)
+    .css("position", "absolute")
+    .appendTo(document.body);
+  
+    list = $("<ul/>").appendTo(element).mouseover( function(event) {
+      if(target(event).nodeName && target(event).nodeName.toUpperCase() == 'LI') {
+              active = $("li", list).removeClass(CLASSES.ACTIVE).index(target(event));
+          $(target(event)).addClass(CLASSES.ACTIVE);            
+          }
+    }).click(function(event) {
+      $(target(event)).addClass(CLASSES.ACTIVE);
+      select();
+      // TODO provide option to avoid setting focus again after selection? useful for cleanup-on-focus
+      input.focus();
+      return false;
+    }).mousedown(function() {
+      config.mouseDownOnSelect = true;
+    }).mouseup(function() {
+      config.mouseDownOnSelect = false;
+    });
+    
+    if( options.width > 0 )
+      element.css("width", options.width);
+      
+    needsInit = false;
+  } 
+  
+  function target(event) {
+    var element = event.target;
+    while(element && element.tagName != "LI")
+      element = element.parentNode;
+    // more fun with IE, sometimes event.target is empty, just ignore it then
+    if(!element)
+      return [];
+    return element;
+  }
+
+  function moveSelect(step) {
+    listItems.slice(active, active + 1).removeClass(CLASSES.ACTIVE);
+    movePosition(step);
         var activeItem = listItems.slice(active, active + 1).addClass(CLASSES.ACTIVE);
         if(options.scroll) {
             var offset = 0;
             listItems.slice(0, active).each(function() {
-				offset += this.offsetHeight;
-			});
+        offset += this.offsetHeight;
+      });
             if((offset + activeItem[0].offsetHeight - list.scrollTop()) > list[0].clientHeight) {
                 list.scrollTop(offset + activeItem[0].offsetHeight - list.innerHeight());
             } else if(offset < list.scrollTop()) {
                 list.scrollTop(offset);
             }
         }
-	};
-	
-	function movePosition(step) {
-		active += step;
-		if (active < 0) {
-			active = listItems.size() - 1;
-		} else if (active >= listItems.size()) {
-			active = 0;
-		}
-	}
-	
-	function limitNumberOfItems(available) {
-		return options.max && options.max < available
-			? options.max
-			: available;
-	}
-	
-	function fillList() {
-		list.empty();
-		var max = limitNumberOfItems(data.length);
-		for (var i=0; i < max; i++) {
-			if (!data[i])
-				continue;
-			var formatted = options.formatItem(data[i].data, i+1, max, data[i].value, term);
-			if ( formatted === false )
-				continue;
-			var li = $("<li/>").html( options.highlight(formatted, term) ).addClass(i%2 == 0 ? "ac_even" : "ac_odd").appendTo(list)[0];
-			$.data(li, "ac_data", data[i]);
-		}
-		listItems = list.find("li");
-		if ( options.selectFirst ) {
-			listItems.slice(0, 1).addClass(CLASSES.ACTIVE);
-			active = 0;
-		}
-		// apply bgiframe if available
-		if ( $.fn.bgiframe )
-			list.bgiframe();
-	}
-	
-	return {
-		display: function(d, q) {
-			init();
-			data = d;
-			term = q;
-			fillList();
-		},
-		next: function() {
-			moveSelect(1);
-		},
-		prev: function() {
-			moveSelect(-1);
-		},
-		pageUp: function() {
-			if (active != 0 && active - 8 < 0) {
-				moveSelect( -active );
-			} else {
-				moveSelect(-8);
-			}
-		},
-		pageDown: function() {
-			if (active != listItems.size() - 1 && active + 8 > listItems.size()) {
-				moveSelect( listItems.size() - 1 - active );
-			} else {
-				moveSelect(8);
-			}
-		},
-		hide: function() {
-			element && element.hide();
-			listItems && listItems.removeClass(CLASSES.ACTIVE);
-			active = -1;
-		},
-		visible : function() {
-			return element && element.is(":visible");
-		},
-		current: function() {
-			return this.visible() && (listItems.filter("." + CLASSES.ACTIVE)[0] || options.selectFirst && listItems[0]);
-		},
-		show: function() {
-			var offset = $(input).offset();
-			element.css({
-				width: typeof options.width == "string" || options.width > 0 ? options.width : $(input).width(),
-				top: offset.top + input.offsetHeight,
-				left: offset.left
-			}).show();
+  };
+  
+  function movePosition(step) {
+    active += step;
+    if (active < 0) {
+      active = listItems.size() - 1;
+    } else if (active >= listItems.size()) {
+      active = 0;
+    }
+  }
+  
+  function limitNumberOfItems(available) {
+    return options.max && options.max < available
+      ? options.max
+      : available;
+  }
+  
+  function fillList() {
+    list.empty();
+    var max = limitNumberOfItems(data.length);
+    for (var i=0; i < max; i++) {
+      if (!data[i])
+        continue;
+      var formatted = options.formatItem(data[i].data, i+1, max, data[i].value, term);
+      if ( formatted === false )
+        continue;
+      var li = $("<li/>").html( options.highlight(formatted, term) ).addClass(i%2 == 0 ? "ac_even" : "ac_odd").appendTo(list)[0];
+      $.data(li, "ac_data", data[i]);
+    }
+    listItems = list.find("li");
+    if ( options.selectFirst ) {
+      listItems.slice(0, 1).addClass(CLASSES.ACTIVE);
+      active = 0;
+    }
+    // apply bgiframe if available
+    if ( $.fn.bgiframe )
+      list.bgiframe();
+  }
+  
+  return {
+    display: function(d, q) {
+      init();
+      data = d;
+      term = q;
+      fillList();
+    },
+    next: function() {
+      moveSelect(1);
+    },
+    prev: function() {
+      moveSelect(-1);
+    },
+    pageUp: function() {
+      if (active != 0 && active - 8 < 0) {
+        moveSelect( -active );
+      } else {
+        moveSelect(-8);
+      }
+    },
+    pageDown: function() {
+      if (active != listItems.size() - 1 && active + 8 > listItems.size()) {
+        moveSelect( listItems.size() - 1 - active );
+      } else {
+        moveSelect(8);
+      }
+    },
+    hide: function() {
+      element && element.hide();
+      listItems && listItems.removeClass(CLASSES.ACTIVE);
+      active = -1;
+    },
+    visible : function() {
+      return element && element.is(":visible");
+    },
+    current: function() {
+      return this.visible() && (listItems.filter("." + CLASSES.ACTIVE)[0] || options.selectFirst && listItems[0]);
+    },
+    show: function() {
+      var offset = $(input).offset();
+      element.css({
+        width: typeof options.width == "string" || options.width > 0 ? options.width : $(input).width(),
+        top: offset.top + input.offsetHeight,
+        left: offset.left
+      }).show();
             if(options.scroll) {
                 list.scrollTop(0);
                 list.css({
-					maxHeight: options.scrollHeight,
-					overflow: 'auto'
-				});
-				
+          maxHeight: options.scrollHeight,
+          overflow: 'auto'
+        });
+        
                 if($.browser.msie && typeof document.body.style.maxHeight === "undefined") {
-					var listHeight = 0;
-					listItems.each(function() {
-						listHeight += this.offsetHeight;
-					});
-					var scrollbarsVisible = listHeight > options.scrollHeight;
+          var listHeight = 0;
+          listItems.each(function() {
+            listHeight += this.offsetHeight;
+          });
+          var scrollbarsVisible = listHeight > options.scrollHeight;
                     list.css('height', scrollbarsVisible ? options.scrollHeight : listHeight );
-					if (!scrollbarsVisible) {
-						// IE doesn't recalculate width when scrollbar disappears
-						listItems.width( list.width() - parseInt(listItems.css("padding-left")) - parseInt(listItems.css("padding-right")) );
-					}
+          if (!scrollbarsVisible) {
+            // IE doesn't recalculate width when scrollbar disappears
+            listItems.width( list.width() - parseInt(listItems.css("padding-left")) - parseInt(listItems.css("padding-right")) );
+          }
                 }
                 
             }
-		},
-		selected: function() {
-			var selected = listItems && listItems.filter("." + CLASSES.ACTIVE).removeClass(CLASSES.ACTIVE);
-			return selected && selected.length && $.data(selected[0], "ac_data");
-		},
-		emptyList: function (){
-			list && list.empty();
-		},
-		unbind: function() {
-			element && element.remove();
-		}
-	};
+    },
+    selected: function() {
+      var selected = listItems && listItems.filter("." + CLASSES.ACTIVE).removeClass(CLASSES.ACTIVE);
+      return selected && selected.length && $.data(selected[0], "ac_data");
+    },
+    emptyList: function (){
+      list && list.empty();
+    },
+    unbind: function() {
+      element && element.remove();
+    }
+  };
 };
 
 $.Autocompleter.Selection = function(field, start, end) {
-	if( field.createTextRange ){
-		var selRange = field.createTextRange();
-		selRange.collapse(true);
-		selRange.moveStart("character", start);
-		selRange.moveEnd("character", end);
-		selRange.select();
-	} else if( field.setSelectionRange ){
-		field.setSelectionRange(start, end);
-	} else {
-		if( field.selectionStart ){
-			field.selectionStart = start;
-			field.selectionEnd = end;
-		}
-	}
-	field.focus();
+  if( field.createTextRange ){
+    var selRange = field.createTextRange();
+    selRange.collapse(true);
+    selRange.moveStart("character", start);
+    selRange.moveEnd("character", end);
+    selRange.select();
+  } else if( field.setSelectionRange ){
+    field.setSelectionRange(start, end);
+  } else {
+    if( field.selectionStart ){
+      field.selectionStart = start;
+      field.selectionEnd = end;
+    }
+  }
+  field.focus();
 };
 
 })(jQuery);
\ No newline at end of file

Modified: lucene/dev/branches/lucene6699/solr/example/files/conf/velocity/js/jquery.tx3-tag-cloud.js
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/example/files/conf/velocity/js/jquery.tx3-tag-cloud.js?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/example/files/conf/velocity/js/jquery.tx3-tag-cloud.js (original)
+++ lucene/dev/branches/lucene6699/solr/example/files/conf/velocity/js/jquery.tx3-tag-cloud.js Wed Sep  2 13:06:13 2015
@@ -8,25 +8,25 @@
  */
 (function($)
 {
-	var settings;
+  var settings;
     $.fn.tx3TagCloud = function(options)
     {
 
-    	//
-    	// DEFAULT SETTINGS
-    	//
-    	settings = $.extend({
-    		multiplier		: 1
-    	}, options);
-    	main(this);
+      //
+      // DEFAULT SETTINGS
+      //
+      settings = $.extend({
+        multiplier    : 1
+      }, options);
+      main(this);
 
     }
 
     function main(element)
     {
-    	// adding style attr
-    	element.addClass("tx3-tag-cloud");
-    	addListElementFontSize(element);
+      // adding style attr
+      element.addClass("tx3-tag-cloud");
+      addListElementFontSize(element);
     }
 
     /**
@@ -35,36 +35,36 @@
      */
     function addListElementFontSize(element)
     {
-    	var hDataWeight = -9007199254740992;
-    	var lDataWeight = 9007199254740992;
-    	$.each(element.find("li"), function(){
-    		cDataWeight = getDataWeight(this);
-    		if (cDataWeight == undefined)
-    		{
-    			logWarning("No \"data-weight\" attribut defined on <li> element");
-    		}
-    		else
-    		{
-    			hDataWeight = cDataWeight > hDataWeight ? cDataWeight : hDataWeight;
-    			lDataWeight = cDataWeight < lDataWeight ? cDataWeight : lDataWeight;
-    		}
-    	});
-    	$.each(element.find("li"), function(){
-    		var dataWeight = getDataWeight(this);
-    		var percent = Math.abs((dataWeight - lDataWeight)/(lDataWeight - hDataWeight));
-    		$(this).css('font-size', (1 + (percent * settings['multiplier'])) + "em");
-    	});
+      var hDataWeight = -9007199254740992;
+      var lDataWeight = 9007199254740992;
+      $.each(element.find("li"), function(){
+        cDataWeight = getDataWeight(this);
+        if (cDataWeight == undefined)
+        {
+          logWarning("No \"data-weight\" attribut defined on <li> element");
+        }
+        else
+        {
+          hDataWeight = cDataWeight > hDataWeight ? cDataWeight : hDataWeight;
+          lDataWeight = cDataWeight < lDataWeight ? cDataWeight : lDataWeight;
+        }
+      });
+      $.each(element.find("li"), function(){
+        var dataWeight = getDataWeight(this);
+        var percent = Math.abs((dataWeight - lDataWeight)/(lDataWeight - hDataWeight));
+        $(this).css('font-size', (1 + (percent * settings['multiplier'])) + "em");
+      });
 
     }
 
     function getDataWeight(element)
     {
-    	return parseInt($(element).attr("data-weight"));
+      return parseInt($(element).attr("data-weight"));
     }
 
     function logWarning(message)
     {
-    	console.log("[WARNING] " + Date.now() + " : " + message);
+      console.log("[WARNING] " + Date.now() + " : " + message);
     }
 
 }(jQuery));
\ No newline at end of file

Modified: lucene/dev/branches/lucene6699/solr/licenses/start.jar.sha1
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/licenses/start.jar.sha1?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/licenses/start.jar.sha1 (original)
+++ lucene/dev/branches/lucene6699/solr/licenses/start.jar.sha1 Wed Sep  2 13:06:13 2015
@@ -1 +1 @@
-a809ba53e3ec3ed2f3a6e17cec646cf4444ad196
+e400e65c5217a25a1fa024e414700287e6c07a61

Modified: lucene/dev/branches/lucene6699/solr/server/build.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/server/build.xml?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/server/build.xml (original)
+++ lucene/dev/branches/lucene6699/solr/server/build.xml Wed Sep  2 13:06:13 2015
@@ -40,9 +40,9 @@
     <sequential>
     <!-- jetty libs in lib/ -->
     <ivy:retrieve conf="jetty,servlet" type="jar" log="download-only" symlink="${ivy.symlink}"
-    	          pattern="lib/[artifact]-[revision].[ext]" sync="true"/>
+                pattern="lib/[artifact]-[revision].[ext]" sync="${ivy.sync}"/>
     <ivy:retrieve conf="logging" type="jar,bundle" log="download-only" symlink="${ivy.symlink}"
-                  pattern="lib/ext/[artifact]-[revision].[ext]" sync="true"/>
+                  pattern="lib/ext/[artifact]-[revision].[ext]" sync="${ivy.sync}"/>
     <!-- start.jar - we don't use sync=true here, we don't own the dir, but
          it's one jar with a constant name and we don't need it -->
     <ivy:retrieve conf="start" type="jar" log="download-only" symlink="${ivy.symlink}"