diff --git a/README.org b/README.org index 95ec98a..6f03720 100644 --- a/README.org +++ b/README.org @@ -7,6 +7,12 @@ A python library to parse, modify and save Org-mode files. - Modify these data and write it back to disk. - Keep the original structure intact (indentation, spaces, format, ...). +** Principles +- Avoid any dependency outside of Python's standard library. +- Don't do anything outside of the scope of parsing/re-serializing Org-mode files. +- *Modification of the original text if there's no change is considered a bug (see [[id:7363ba38-1662-4d3c-9e83-0999824975b7][Known issues]]).* +- Data structures should be exposed as it's read on Emacs's org-mode or when in doubt as raw as possible. +- Data in the objects should be modificable as a way to update the document itself. *Consider this a Object-oriented design.* ** Safety mechanism As this library is still in early development. Running it over files might produce unexpected changes on them. For this reason it's heavily recommended to @@ -21,6 +27,9 @@ Also, see [[id:76e77f7f-c9e0-4c83-ad2f-39a5a8894a83][Known issues:Structure modi not properly stored and can trigger this safety mechanism on a false-positive. * Known issues +:PROPERTIES: +:ID: 7363ba38-1662-4d3c-9e83-0999824975b7 +:END: ** Structure modifications :PROPERTIES: :ID: 76e77f7f-c9e0-4c83-ad2f-39a5a8894a83 diff --git a/org_rw/org_rw.py b/org_rw/org_rw.py index a6ba0da..6baadd1 100644 --- a/org_rw/org_rw.py +++ b/org_rw/org_rw.py @@ -417,6 +417,7 @@ class Headline: and line.delimiter_type == DelimiterLineType.END_BLOCK and line.type_data.subtype == current_node.header.type_data.subtype ): + start = current_node.header.linenum end = line.linenum @@ -823,6 +824,7 @@ class Headline: def set_property(self, name: str, value: str): for prop in self.properties: + # A matching property is found, update it if prop.key == name: prop.value = value @@ -1022,6 +1024,7 @@ class Headline: and result_first[0] == "structural" and result_first[1].strip().upper() == ":RESULTS:" ): + (end_line, _) = self.get_structural_end_after( kword.linenum + 1 ) @@ -1816,7 +1819,7 @@ def token_list_to_plaintext(tok_list) -> str: else: assert isinstance(chunk, MarkerToken) - return "".join(contents).strip() + return "".join(contents) def token_list_to_raw(tok_list): @@ -2038,6 +2041,7 @@ def tokenize_contents(contents: str) -> List[TokenItems]: and is_pre(last_char) and ((i + 1 < len(contents)) and is_border(contents[i + 1])) ): + is_valid_mark = False # Check that is closed later text_in_line = True @@ -2430,6 +2434,7 @@ class OrgDoc: # Writing def dump_headline(self, headline, recursive=True): + tags = "" if len(headline.shallow_tags) > 0: tags = ":" + ":".join(headline.shallow_tags) + ":" @@ -2443,14 +2448,7 @@ class OrgDoc: if not (raw_title.endswith(" ") or raw_title.endswith("\t")) and tags: tags_padding = " " - yield ( - "*" * headline.depth - + headline.spacing - + state - + raw_title - + tags_padding - + tags - ) + yield "*" * headline.depth + headline.spacing + state + raw_title + tags_padding + tags planning = headline.get_planning_line() if planning is not None: diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 1c51c66..0000000 --- a/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -# No external requirements at this point