sw/source/filter/md/wrtmd.cxx | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+)
New commits: commit fe68c5a31312709bfadca0f9cbc1faa7f6673796 Author: Mike Kaganski <mike.kagan...@collabora.com> AuthorDate: Tue Jul 15 20:01:00 2025 +0500 Commit: Mike Kaganski <mike.kagan...@collabora.com> CommitDate: Tue Jul 15 18:41:41 2025 +0200 Add comments to some markdown export structures and functions Change-Id: I8d1d384cca090b50536cda0529e88a558d36c3de Reviewed-on: https://gerrit.libreoffice.org/c/core/+/187927 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> diff --git a/sw/source/filter/md/wrtmd.cxx b/sw/source/filter/md/wrtmd.cxx index 07315b4274e4..94f77cbc0048 100644 --- a/sw/source/filter/md/wrtmd.cxx +++ b/sw/source/filter/md/wrtmd.cxx @@ -48,6 +48,11 @@ namespace { +// This struct contains a state of the properties that we output. The integers represent "level" +// of a given feature. Positive values mean applied status; zero means cleared status. Sometimes +// values may be negative: e.g., when a node started, and some redline continues from a previous +// node, aRedlineChanges would be empty initially; and when the end of the continued redline is +// reached, its "applied" status is decremented, making it negative. struct FormattingStatus { int nCrossedOutChange = 0; @@ -58,6 +63,8 @@ struct FormattingStatus std::unordered_map<const SwRangeRedline*, int> aRedlineChanges; }; +// This is a vector of positions in the node text, where objects of class T start or end. +// The current position into the vector is maintained, and incremented using calls to next(). template <typename T> struct PosData { using value_type = std::pair<sal_Int32, const T*>; @@ -71,6 +78,9 @@ template <typename T> struct PosData void sort() { std::stable_sort(table.begin(), table.end(), value_less); } }; +// This is a collection of all positions into node's text: starts of hints, ends of hints, starts +// of redlines, and ends of redlines. Its getEndOfCurrent methos allows to obtain the position of +// the next (closest) position (which may happen in any list). struct NodePositions { PosData<SfxPoolItem> hintStarts; @@ -148,6 +158,10 @@ void ApplyItem(FormattingStatus& rChange, const SwRangeRedline* pItem, int incre rChange.aRedlineChanges[pItem] += increment; } +// currentFormatting is the state of properties before this position. For any hint and/or redline +// that starts and/or ends at this position, every property that starts here increments respective +// applied status, and properties that end here decrement their applied count (see comment for +// FormattingStatus). FormattingStatus CalculateFormattingChange(NodePositions& positions, sal_Int32 pos, const FormattingStatus& currentFormatting) { @@ -180,6 +194,10 @@ FormattingStatus CalculateFormattingChange(NodePositions& positions, sal_Int32 p bool ShouldCloseIt(int prev, int curr) { return prev != curr && prev >= 0 && curr <= 0; } bool ShouldOpenIt(int prev, int curr) { return prev != curr && prev <= 0 && curr > 0; } +// Calculate the updated status of properties. Then compare the status before and after; and for +// each event when a value changes from 0 to a positive number, output respective opening markup; +// when a value is decreased to 0, a closing markup is written. For redlines, closing markup is +// also written when its value changes from 0 to a negative (see comment for FormattingStatus). void OutFormattingChange(SwMDWriter& rWrt, NodePositions& positions, sal_Int32 pos, FormattingStatus& current) {