diff options
author | Olivier Tilloy <olivier@tilloy.net> | 2009-01-26 09:09:43 +0100 |
---|---|---|
committer | Olivier Tilloy <olivier@tilloy.net> | 2009-01-26 09:09:43 +0100 |
commit | 5df2b0deb5c6fb13e9401b4fb3f4accdee1711b4 (patch) | |
tree | 6e35aed008cf6ac4b26cb4c0ab41c9b24ede0740 /src/pyexiv2.py | |
parent | c3d4e471123d05d297e43921121fc9fbce8cb8da (diff) | |
download | pyexiv2-5df2b0deb5c6fb13e9401b4fb3f4accdee1711b4.tar.gz |
XMP LangAlt conversion + unit tests.
Diffstat (limited to 'src/pyexiv2.py')
-rw-r--r-- | src/pyexiv2.py | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/src/pyexiv2.py b/src/pyexiv2.py index a2b2aef..2147c93 100644 --- a/src/pyexiv2.py +++ b/src/pyexiv2.py @@ -470,9 +470,6 @@ class XmpTag(MetadataTag): An XMP metadata tag can have several values. """ - # Valid dates, to check the correctness of the RE - # valid = ('1999', '1999-10', '1999-10-13', '1999-10-13T05:03Z', '1999-10-13T05:03+06:00', '1999-10-13T05:03-06:00', '1999-10-13T05:03:54Z', '1999-10-13T05:03:54+06:00', '1999-10-13T05:03:54-06:00', '1999-10-13T05:03:54.721Z', '1999-10-13T05:03:54.721+06:00', '1999-10-13T05:03:54.721-06:00') - # strptime is not flexible enough to handle all valid Date formats, we use a # custom regular expression # TODO: restrict the value ranges for year, month, day, hours, minutes, seconds, tzd @@ -480,8 +477,6 @@ class XmpTag(MetadataTag): _time_re = r'(?P<hours>\d{2}):(?P<minutes>\d{2})(:(?P<seconds>\d{2})(.(?P<decimal>\d+))?)?(?P<tzd>%s)' % _time_zone_re _date_re = re.compile(r'(?P<year>\d{4})(-(?P<month>\d{2})(-(?P<day>\d{2})(T(?P<time>%s))?)?)?' % _time_re) - #_lang_alt_re = r'lang=".*" .*, ' - def __init__(self, key, name, label, description, type, values): """ Constructor. @@ -560,8 +555,27 @@ class XmpTag(MetadataTag): return value elif xtype == 'Lang Alt': - # TODO - return value + matches = value.split('lang="') + nb = len(matches) + if nb < 2 or matches[0] != '': + return value + result = {} + for i, match in enumerate(matches[1:]): + try: + qualifier, text = match.split('" ', 1) + except ValueError: + return value + else: + if not text.rstrip().endswith(','): + if (i < nb - 2): + # If not the last match, it should end with a comma + return value + else: + result[qualifier] = text + else: + result[qualifier] = text.rstrip()[:-1] + return result + elif xtype == 'Locale': # TODO return value |