#!/usr/bin/python
# -*- coding: utf-8 -*-

import re

star_re = re.compile('(?<!\*)\*{1}(?!\*)')
fname_star_re = re.compile('\*\.([^/\.]+)$')

cache = dict()


def prepare(pattern):
    m = fname_star_re.match(pattern)
    if m:
        p = '.*\.{}'.format(m.group(1))
    else:
        p = star_re.sub('[^\/]*', pattern)
        p = p.replace('.', '\.').replace('**', '.*').replace('?', '.')
        if p.find('/') < 0 or p.find('\\') < 0:
            p = '.*{}.*'.format(p)
    if p in cache:
        return cache[p]
    else:
        gb = GlobMatch(p)
        cache[p] = gb
        return gb


class GlobMatch:

    def __init__(self, p):
        self.r = re.compile('^' + p + '$')
        self.p = p

    def match(self, name):
        return self.r.match(name) != None



@@ -175,16 +175,79 @@
 ttern):%0A
+    if pattern in cache:%0A        return cache%5Bp%5D%0A    else:%0A    
     m = 
@@ -271,24 +271,28 @@
 ch(pattern)%0A
+    
     if m:%0A  
@@ -289,16 +289,20 @@
   if m:%0A
+    
         
@@ -333,30 +333,38 @@
 oup(1))%0A    
+ 
+   
 else:%0A
+    
         p = 
@@ -398,24 +398,28 @@
 rn)%0A        
+  
+  
 p = p.replac
@@ -473,24 +473,28 @@
 .')%0A        
+    
 if p.find('/
@@ -529,24 +529,28 @@
             
+   
+ 
 p = '.*%7B%7D.*'
@@ -564,61 +564,8 @@
 (p)%0A
-    if p in cache:%0A        return cache%5Bp%5D%0A    else:%0A
     

improve globbing cache. fixes #9