diff --git a/orgparse/node.py b/orgparse/node.py index da26f0d..32a93ae 100644 --- a/orgparse/node.py +++ b/orgparse/node.py @@ -152,8 +152,8 @@ def parse_comment(line): >>> parse_comment('# not a special comment') # None """ - if line.startswith('#+'): - comment = line.lstrip('#+').split(':', 1) + if re.match(r'\s*#\+', line): + comment = re.split(r':\s+', re.split(r'\s*#\+',line)[1]) if len(comment) == 2: return (comment[0], comment[1].strip()) @@ -717,6 +717,27 @@ def __unicode__(self): def __str__(self): return unicode(self).encode('utf-8') + def get_file_property(self, property): + """ + Return a list of the selected property + """ + print(self._special_comments) + if property in self._special_comments: + return self._special_comments[property] + else: + return None + + def get_only_file_property(self, property): + """ + Return a single element of the selected property + """ + elements = self.get_file_property(property) + if elements: + return elements[0] + else: + return None + + class OrgRootNode(OrgBaseNode): diff --git a/orgparse/tests/test_misc.py b/orgparse/tests/test_misc.py index 61f4802..e8f25c9 100644 --- a/orgparse/tests/test_misc.py +++ b/orgparse/tests/test_misc.py @@ -82,3 +82,38 @@ def test_add_custom_todo_keys(): root = loads(content, filename, env) assert root.env.all_todo_keys == ['CUSTOM_TODO', 'COMMENT_TODO', 'CUSTOM_DONE', 'COMMENT_DONE'] + +def test_get_custom_property(): + filename = '' # default for loads + content = """#+TITLE: Test title + * Node 1 + test 1 + * Node 2 + test 2 + """ + + env = OrgEnv(filename=filename) + + # after parsing, all keys are set + root = loads(content, filename, env) + assert root.get_file_property('TITLE') == ['Test title'] + assert root.get_only_file_property('TITLE') == 'Test title' + +def test_get_custom_property_multivalued(): + filename = '' # default for loads + content = """#+TITLE: Test + #+OTHER: Test title + #+TITLE: alternate title + + * Node 1 + test 1 + * Node 2 + test 2 + """ + + env = OrgEnv(filename=filename) + + # after parsing, all keys are set + root = loads(content, filename, env) + assert root.get_file_property('TITLE') == ['Test', 'alternate title'] + assert root.get_only_file_property('TITLE') == 'Test'