# Path: common/tool_connect.py
# class ToolConnect:
#     def __init__(self, server_name, port):
#     def _ill_formed_request(self, conn, data):
#     def wait_request(self):
#     def send_text_reply(self, conn, data):
#     def send_reply(self, conn, data):
#     def close(self):
# 
# Path: common/lifo_cache.py
# class LifoCacheMem(object):
# class LifoCache(LifoCacheMem):
#     def __init__(self, cache_size):
#     def get(self, key):
#     def set(self, key, data):
#     def stat_ratio(self, count, total = None):
#     def access_stat(self, as_type = None):
#     def __init__(self, cache_name, mem_cache_size = 4, disk_cache_size = 32):
#     def get(self, filename):
#     def set(self, filename, data):
#     def access_stat(self, as_type = None):
# 
# Path: common/common_html.py
# def get_head(title, css = None, html5 = False):
# 
# Path: common/utils.py
# def read_file(filename):
# def write_file(filename, text):
# def save_obj(filename, data):
# def load_obj(filename):
# def sha1(filename):
# def write_sha1(sha1, filename):
# def url_opener():
# def copy_file_from_url(url, out_file, expect_sha1 = None, max_retry = 4):
# def compress_file_data(out_filename, data, compress_type):
# def compress_file(out_filename, in_filename, compress_type):
# def uncompress_file(filename, compress_type):
# def _retry_on_eintr(func, *args):
# def safe_read(fd):
# def safe_write(fd, text):
# def print_traceback(*kwargs):
# def readline_backward(filename, buf_size=8192):
# 
# Path: common/job_queue.py
# class JobQueue:
#     def __init__(self, filename = None):
#     def put(self, *args):
#     def remove(self):
#     def get(self):
#     def copy_items(self, get_last = False):
#     def save(self, filename):
#     def empty(self):
#     def _load(self, filename):
#     def expect(func, data, *args):
#     def put_get_save_test():
#     def thread_test():
#         def thread1(jobs):
#         def thread2(jobs):
# 
# Path: common/pywikibot_utils.py
# def safe_put(page, text, comment):
#     if re.match("^[\s\n]*$", text):
#         return
# 
#     max_retry = 5
# 
#     retry_count = 0
#     while retry_count < max_retry:
#         retry_count += 1
#         try:
#             page.put(text, comment = comment)
#             break
#         except pywikibot.LockedPage:
#             print >> sys.stderr, "put error : Page %s is locked?!" % page.title(asUrl=True).encode("utf8")
#             utils.print_traceback()
#             break
#         except pywikibot.NoPage:
#             print >> sys.stderr, "put error : Page does not exist %s" % page.title(asUrl=True).encode("utf8")
#             utils.print_traceback()
#             break
#         except pywikibot.NoUsername:
#             print >> sys.stderr, "put error : No user name on wiki %s" % page.title(asUrl=True).encode("utf8")
#             utils.print_traceback()
#             break
#         except pywikibot.PageNotSaved:
#             print >> sys.stderr, "put error : Page not saved %s" % page.title(asUrl=True).encode("utf8") 
#             print >> sys.stderr, "text len: ", len(text)
#             utils.print_traceback()
#             print >> sys.stderr, "sleeping for:", 10 * retry_count
#             time.sleep(10 * retry_count)
#             continue
#         except pywikibot.OtherPageSaveError:
#             # this can occur for read-only DB because slave lag, so retry
#             # a few time
#             print >> sys.stderr, "put error : Page not saved %s" % page.title(asUrl=True).encode("utf8")
#             print >> sys.stderr, "retrying in", retry_count, "minute(s)"
#             time.sleep(retry_count * 60)
#             continue
#         except:
#             print >> sys.stderr, "put error: unknown exception"
#             utils.print_traceback()
#             time.sleep(10)
#             break
# 
#     if retry_count >= max_retry:
#         print >> sys.stderr, "unable to save page after", max_retry, "try, bailing out"
#         pass


import sys
import os
import re
import thread
import time
import align
import pywikibot
from common import tool_connect
from common import lifo_cache
from ws_namespaces import page as page_prefixes
from common import common_html
from common import utils
from common import job_queue
from common.pywikibot_utils import safe_put
        # FIXME: server is None?
        jobs['split_queue'].put(maintitle, codelang, user, time.time(), None, None, None)
        # FIXME: that's an abuse of E_ERROR
        return ret_val(E_ERROR, "ok : transfert en cours.")

    prefix = prefix.decode('utf-8')
    p = re.compile("==__MATCH__:\[\[" + prefix + ":(.*?)/(\d+)(\|step=(\d+))?\]\]==")
    m = re.search(p,text)
    if m:
        djvuname = m.group(1)
        number = m.group(2)
        pos = text.find(m.group(0))
        head = text[:pos]
        text = text[pos+len(m.group(0)):]
        if m.group(4):
            try:
                step = int(m.group(4))
            except:
                return ret_val(E_ERROR, "match tag invalid")
        else:
            step = 1
    else:
        return ret_val(E_ERROR, "match tag not found")

    pywikibot.output(djvuname + " " + number + " " + str(step))
    try:
        number = int(number)
    except:
        return ret_val(E_ERROR, "illformed __MATCH__: no page number ?")


# Path: common/tool_connect.py
# class ToolConnect:
#     def __init__(self, server_name, port):
#     def _ill_formed_request(self, conn, data):
#     def wait_request(self):
#     def send_text_reply(self, conn, data):
#     def send_reply(self, conn, data):
#     def close(self):
# 
# Path: common/lifo_cache.py
# class LifoCacheMem(object):
# class LifoCache(LifoCacheMem):
#     def __init__(self, cache_size):
#     def get(self, key):
#     def set(self, key, data):
#     def stat_ratio(self, count, total = None):
#     def access_stat(self, as_type = None):
#     def __init__(self, cache_name, mem_cache_size = 4, disk_cache_size = 32):
#     def get(self, filename):
#     def set(self, filename, data):
#     def access_stat(self, as_type = None):
# 
# Path: common/common_html.py
# def get_head(title, css = None, html5 = False):
# 
# Path: common/utils.py
# def read_file(filename):
# def write_file(filename, text):
# def save_obj(filename, data):
# def load_obj(filename):
# def sha1(filename):
# def write_sha1(sha1, filename):
# def url_opener():
# def copy_file_from_url(url, out_file, expect_sha1 = None, max_retry = 4):
# def compress_file_data(out_filename, data, compress_type):
# def compress_file(out_filename, in_filename, compress_type):
# def uncompress_file(filename, compress_type):
# def _retry_on_eintr(func, *args):
# def safe_read(fd):
# def safe_write(fd, text):
# def print_traceback(*kwargs):
# def readline_backward(filename, buf_size=8192):
# 
# Path: common/job_queue.py
# class JobQueue:
#     def __init__(self, filename = None):
#     def put(self, *args):
#     def remove(self):
#     def get(self):
#     def copy_items(self, get_last = False):
#     def save(self, filename):
#     def empty(self):
#     def _load(self, filename):
#     def expect(func, data, *args):
#     def put_get_save_test():
#     def thread_test():
#         def thread1(jobs):
#         def thread2(jobs):
# 
# Path: common/pywikibot_utils.py
# def safe_put(page, text, comment):
#     if re.match("^[\s\n]*$", text):
#         return
# 
#     max_retry = 5
# 
#     retry_count = 0
#     while retry_count < max_retry:
#         retry_count += 1
#         try:
#             page.put(text, comment = comment)
#             break
#         except pywikibot.LockedPage:
#             print >> sys.stderr, "put error : Page %s is locked?!" % page.title(asUrl=True).encode("utf8")
#             utils.print_traceback()
#             break
#         except pywikibot.NoPage:
#             print >> sys.stderr, "put error : Page does not exist %s" % page.title(asUrl=True).encode("utf8")
#             utils.print_traceback()
#             break
#         except pywikibot.NoUsername:
#             print >> sys.stderr, "put error : No user name on wiki %s" % page.title(asUrl=True).encode("utf8")
#             utils.print_traceback()
#             break
#         except pywikibot.PageNotSaved:
#             print >> sys.stderr, "put error : Page not saved %s" % page.title(asUrl=True).encode("utf8") 
#             print >> sys.stderr, "text len: ", len(text)
#             utils.print_traceback()
#             print >> sys.stderr, "sleeping for:", 10 * retry_count
#             time.sleep(10 * retry_count)
#             continue
#         except pywikibot.OtherPageSaveError:
#             # this can occur for read-only DB because slave lag, so retry
#             # a few time
#             print >> sys.stderr, "put error : Page not saved %s" % page.title(asUrl=True).encode("utf8")
#             print >> sys.stderr, "retrying in", retry_count, "minute(s)"
#             time.sleep(retry_count * 60)
#             continue
#         except:
#             print >> sys.stderr, "put error: unknown exception"
#             utils.print_traceback()
#             time.sleep(10)
#             break
# 
#     if retry_count >= max_retry:
#         print >> sys.stderr, "unable to save page after", max_retry, "try, bailing out"
#         pass


# Path: match_and_split/match_and_split.py
import sys
import os
import re
import thread
import time
import align
import pywikibot
from common import tool_connect
from common import lifo_cache
from ws_namespaces import page as page_prefixes
from common import common_html
from common import utils
from common import job_queue
from common.pywikibot_utils import safe_put

        # FIXME: server is None?
        jobs['split_queue'].put(maintitle, codelang, user, time.time(), None, None, None)
        # FIXME: that's an abuse of E_ERROR
        return ret_val(E_ERROR, "ok : transfert en cours.")

    prefix = prefix.decode('utf-8')
    p = re.compile("==__MATCH__:\[\[" + prefix + ":(.*?)/(\d+)(\|step=(\d+))?\]\]==")
    m = re.search(p,text)
    if m:
        djvuname = m.group(1)
        number = m.group(2)
        pos = text.find(m.group(0))
        head = text[:pos]
        text = text[pos+len(m.group(0)):]
        if m.group(4):
            try:
                step = int(m.group(4))
            except:
                return ret_val(E_ERROR, "match tag invalid")
        else:
            step = 1
    else:
        return ret_val(E_ERROR, "match tag not found")

    pywikibot.output(djvuname + " " + number + " " + str(step))
    try:
        number = int(number)
    except:
        return ret_val(E_ERROR, "illformed __MATCH__: no page number ?")


    cache = lifo_cache.LifoCache('match_and_split_text_layer')