| 281 | } |
| 282 | |
| 283 | func (q *Query) String() string { |
| 284 | if q == nil { |
| 285 | return "?" |
| 286 | } |
| 287 | if q.Op == QNone { |
| 288 | return "-" |
| 289 | } |
| 290 | if q.Op == QAll { |
| 291 | return "+" |
| 292 | } |
| 293 | |
| 294 | if len(q.Sub) == 0 && len(q.Trigram) == 1 { |
| 295 | return strconv.Quote(q.Trigram[0]) |
| 296 | } |
| 297 | |
| 298 | var ( |
| 299 | s string |
| 300 | sjoin string |
| 301 | end string |
| 302 | tjoin string |
| 303 | ) |
| 304 | if q.Op == QAnd { |
| 305 | sjoin = " " |
| 306 | tjoin = " " |
| 307 | } else { |
| 308 | s = "(" |
| 309 | sjoin = ")|(" |
| 310 | end = ")" |
| 311 | tjoin = "|" |
| 312 | } |
| 313 | for i, t := range q.Trigram { |
| 314 | if i > 0 { |
| 315 | s += tjoin |
| 316 | } |
| 317 | s += strconv.Quote(t) |
| 318 | } |
| 319 | if len(q.Sub) > 0 { |
| 320 | if len(q.Trigram) > 0 { |
| 321 | s += sjoin |
| 322 | } |
| 323 | s += q.Sub[0].String() |
| 324 | for i := 1; i < len(q.Sub); i++ { |
| 325 | s += sjoin + q.Sub[i].String() |
| 326 | } |
| 327 | } |
| 328 | s += end |
| 329 | return s |
| 330 | } |
| 331 | |
| 332 | // RegexpQuery returns a Query for the given regexp. |
| 333 | func RegexpQuery(re *syntax.Regexp) *Query { |