merging master
authorMarcin Koziej <marcin@lolownia.org>
Sat, 7 Dec 2013 17:17:06 +0000 (18:17 +0100)
committerMarcin Koziej <marcin@lolownia.org>
Sat, 7 Dec 2013 17:17:06 +0000 (18:17 +0100)
1  2 
librarian/dcparser.py

@@@ -66,23 -82,34 +82,35 @@@ for now we will translate this to some 
      try:
          # check out the "N. poł X w." syntax
          if isinstance(text, str): text = text.decode("utf-8")
-         m = re.match(u"(?:([12]) *poł[.]? )?([MCDXVI]+) *w[.]?", text)
++
+         century_format = u"(?:([12]) *poł[.]? +)?([MCDXVI]+) *w[.,]*(?: *l[.]? *([0-9]+))?"
+         vague_format = u"(?:po *|ok. *)?([0-9]{4})(-[0-9]{2}-[0-9]{2})?"
+         m = re.match(century_format, text)
+         m2 = re.match(vague_format, text)
          if m:
-             
-             half = m.groups()[0]
-             if half is not None: 
+             half = m.group(1)
+             decade = m.group(3)
+             century = roman_to_int(str(m.group(2)))
+             if half is not None:
+                 if decade is not None:
+                     raise ValueError("Bad date format. Cannot specify both half and decade of century")
                  half = int(half)
-             else: 
-                 half = 1
-             century = roman_to_int(str(m.groups()[1]))
-             t = ((century*100 + (half-1)*50), 1, 1)
+                 t = ((century*100 + (half-1)*50), 1, 1)
+             else:
+                 decade = int(decade or 0)
+                 t = ((century*100 + decade), 1, 1)
+         elif m2:
+             year = m2.group(1)
+             mon_day = m2.group(2)
+             if mon_day:
+                 t = time.strptime(year + mon_day, "%Y-%m-%d")
+             else:
+                 t = time.strptime(year, '%Y')
          else:
-             text = re.sub(r"(po|ok[.]?) *", "", text)
-             try:
-                 t = time.strptime(text, '%Y-%m-%d')
-             except ValueError:
-                 t = time.strptime(re.split(r'[-/]', text)[0], '%Y')
-         return date(t[0], t[1], t[2])
+             raise ValueError
+         return DatePlus(t[0], t[1], t[2])
      except ValueError, e:
          raise ValueError("Unrecognized date format. Try YYYY-MM-DD or YYYY.")