Skip to content

Commit

Permalink
flatten method added
Browse files Browse the repository at this point in the history
  • Loading branch information
nikopol committed Jan 28, 2015
1 parent 4d7d87d commit fcd60d4
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 13 deletions.
25 changes: 22 additions & 3 deletions querytext.js
@@ -1,4 +1,4 @@
// querytext.js 1.0c (c) 2012-2014 niko
// querytext.js 1.1 (c) 2012-2015 niko
// https://github.com/nikopol/querytext.js

/*
Expand Down Expand Up @@ -35,6 +35,9 @@ querytext object methods:
parse('query'); // return {error:"msg",pos:offset} or the
// querytext object
flatten(); // return a flat version of the tree in the form :
// { or:[...], and:[...], not:[...] }
normalize(); // return the normalized query as string
match('text'); // test if the text match the query
Expand Down Expand Up @@ -73,7 +76,7 @@ match usages:
query: "T",
matches: true,
wholeword: false
}).match("toto") //-> {t:[0,2]}
}).match("toto") //-> [ {ofs:0,txt:'t'}, {ofs:2,txt:'t'} ]
analysis usages:
Expand Down Expand Up @@ -197,7 +200,7 @@ var querytext=(function(o){
return txt;
},
qt = {
VERSION: '1.0c',
VERSION: '1.1',
opts: {
dftbool: 'OR',
sensitive: false,
Expand Down Expand Up @@ -371,6 +374,22 @@ var querytext=(function(o){
? ind+not+node.bool+dst+hit+src+"\n"+node.subs.map(function(n){ return self.dump(n,ind+' | ') }).join("\n")
: ind+not+'"'+node.text+'"'+hit+pos;
},
flatten: function(node,flat,mode){
if(node==undefined) node = this.tree;
if(flat==undefined) flat = {not:[],or:[],and:[]};
if(mode==undefined) mode = {};
if(node.not) mode.not = !mode.not;
if(node.bool) {
var self = this;
node.subs.forEach(function(s){
flat = self.flatten(s,flat,{not:mode.not,or:node.bool=="OR",and:node.bool=="AND"});
});
}
else if(mode.not) flat.not.push(node.text);
else if(mode.and) flat.and.push(node.text);
else flat.or.push(node.text);
return flat;
},
normalize: function(node){
if(!node) node = this.tree;
if(!node) return '';
Expand Down
27 changes: 17 additions & 10 deletions test/tests.js
Expand Up @@ -226,6 +226,23 @@ test('highlight', function () {

/*17*/

qt = querytext('"de libre"~10 OR "de rocher"~10');
text = 'de je vais vous parler 3 correcteurs drugstore et donc peu chers. J\'ai une véritable passion pour les correcteurs. C\'est un produit que j\'adore tester même si j\'en parle assez peu sur le blog, je suis plutôt Cover Stick, Essence / teinte 06 Matt Ivory / environ 3€ Mon petit dernier est le Cover Stick d\'Essence et c\'est celui que j\'utilise actuellement, car oui j\'ai gardé les deux autres juste pour la revue car en fait, ils sont terminés. Il reste juste un peu de matière dans le Gemey mais j\'ai trop de mal à l\'attraper attraper attraper attraper attraper attraper attraper attraper et entre-temps j\'ai terminé le Rimmel. J\'avais envie de tester une nouvelle texture sachant que j\'avais déjà eu avoir des correcteurs stick par le passé (notamment chez Yves Rocher) et que j\'ai souvent de';
equal(
qt.highlight(text, '<i>', '</i>'),
'de je vais vous parler 3 correcteurs drugstore et donc peu chers. J\'ai une véritable passion pour les correcteurs. C\'est un produit que j\'adore tester même si j\'en parle assez peu sur le blog, je suis plutôt Cover Stick, Essence / teinte 06 Matt Ivory / environ 3€ Mon petit dernier est le Cover Stick d\'Essence et c\'est celui que j\'utilise actuellement, car oui j\'ai gardé les deux autres juste pour la revue car en fait, ils sont terminés. Il reste juste un peu de matière dans le Gemey mais j\'ai trop de mal à l\'attraper attraper attraper attraper attraper attraper attraper attraper et entre-temps j\'ai terminé le Rimmel. J\'avais envie de tester une nouvelle texture sachant que j\'avais déjà eu avoir des correcteurs stick par le passé (notamment chez Yves <i>Rocher</i>) et que j\'ai souvent <i>de</i>',
'should only highlight words to a distance of 10'
);

/*18*/
qt = querytext('boobs AND natural OR breast AND NOT fake');
deepEqual(
qt.flatten(),
{or:['breast'],and:['boobs','natural'],not:['fake']},
"should flatten"
);


// Double UTF chars
// Not ready yet, one day maybe...
//
Expand All @@ -238,14 +255,4 @@ test('highlight', function () {
// 'should highlight all words with double chars'
// );

/*18*/

qt = querytext('"de libre"~10 OR "de rocher"~10');
text = 'de je vais vous parler 3 correcteurs drugstore et donc peu chers. J\'ai une véritable passion pour les correcteurs. C\'est un produit que j\'adore tester même si j\'en parle assez peu sur le blog, je suis plutôt Cover Stick, Essence / teinte 06 Matt Ivory / environ 3€ Mon petit dernier est le Cover Stick d\'Essence et c\'est celui que j\'utilise actuellement, car oui j\'ai gardé les deux autres juste pour la revue car en fait, ils sont terminés. Il reste juste un peu de matière dans le Gemey mais j\'ai trop de mal à l\'attraper attraper attraper attraper attraper attraper attraper attraper et entre-temps j\'ai terminé le Rimmel. J\'avais envie de tester une nouvelle texture sachant que j\'avais déjà eu avoir des correcteurs stick par le passé (notamment chez Yves Rocher) et que j\'ai souvent de';
equal(
qt.highlight(text, '<i>', '</i>'),
'de je vais vous parler 3 correcteurs drugstore et donc peu chers. J\'ai une véritable passion pour les correcteurs. C\'est un produit que j\'adore tester même si j\'en parle assez peu sur le blog, je suis plutôt Cover Stick, Essence / teinte 06 Matt Ivory / environ 3€ Mon petit dernier est le Cover Stick d\'Essence et c\'est celui que j\'utilise actuellement, car oui j\'ai gardé les deux autres juste pour la revue car en fait, ils sont terminés. Il reste juste un peu de matière dans le Gemey mais j\'ai trop de mal à l\'attraper attraper attraper attraper attraper attraper attraper attraper et entre-temps j\'ai terminé le Rimmel. J\'avais envie de tester une nouvelle texture sachant que j\'avais déjà eu avoir des correcteurs stick par le passé (notamment chez Yves <i>Rocher</i>) et que j\'ai souvent <i>de</i>',
'should only highlight words to a distance of 10'
);

});

0 comments on commit fcd60d4

Please sign in to comment.