michael stahl cib software gmbh brussels, 2019-02-02 · 2019-04-15 · brussels, 2019-02-02 are we...

24
1 MICHAEL STAHL CIB SOFTWARE GMBH BRUSSELS, 2019-02-02 ARE WE OPTIMIERT YET?

Upload: others

Post on 16-Jul-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: MICHAEL STAHL CIB SOFTWARE GMBH BRUSSELS, 2019-02-02 · 2019-04-15 · BRUSSELS, 2019-02-02 ARE WE OPTIMIERT YET? 2 AGENDA 1.THE PROBLEM 2.THE SOLUTION 3.IMPLEMENTATION. 3 ... [ 10]

1

MICHAEL STAHLCIB SOFTWARE GMBHBRUSSELS, 2019-02-02

ARE WE OPTIMIERT YET?

Page 2: MICHAEL STAHL CIB SOFTWARE GMBH BRUSSELS, 2019-02-02 · 2019-04-15 · BRUSSELS, 2019-02-02 ARE WE OPTIMIERT YET? 2 AGENDA 1.THE PROBLEM 2.THE SOLUTION 3.IMPLEMENTATION. 3 ... [ 10]

2

AGENDA

1. THE PROBLEM2. THE SOLUTION3. IMPLEMENTATION

Page 3: MICHAEL STAHL CIB SOFTWARE GMBH BRUSSELS, 2019-02-02 · 2019-04-15 · BRUSSELS, 2019-02-02 ARE WE OPTIMIERT YET? 2 AGENDA 1.THE PROBLEM 2.THE SOLUTION 3.IMPLEMENTATION. 3 ... [ 10]

3

1 |

THE (MOST OBVIOUS) PROBLEM OF CHANGE TRACKING IN WRITER

Page 4: MICHAEL STAHL CIB SOFTWARE GMBH BRUSSELS, 2019-02-02 · 2019-04-15 · BRUSSELS, 2019-02-02 ARE WE OPTIMIERT YET? 2 AGENDA 1.THE PROBLEM 2.THE SOLUTION 3.IMPLEMENTATION. 3 ... [ 10]

4

Edit→Track Changes→Show

A document View setting!

Duplicated inView menu:

Page 5: MICHAEL STAHL CIB SOFTWARE GMBH BRUSSELS, 2019-02-02 · 2019-04-15 · BRUSSELS, 2019-02-02 ARE WE OPTIMIERT YET? 2 AGENDA 1.THE PROBLEM 2.THE SOLUTION 3.IMPLEMENTATION. 3 ... [ 10]

5

Tracked Delete Change (Show)

<BigPtrArray> = BigPtrArray of length 12 = {

[ 0] 0x3949750 StartNode ,

[ 1] 0x395a310 EndNode ,

[ 2] 0x39551c0 StartNode ,

[ 3] 0x3956360 EndNode ,

[ 4] 0x395a6e0 StartNode ,

[ 5] 0x395a650 EndNode ,

[ 6] 0x395a1c0 StartNode ,

[ 7] 0x3958560 EndNode ,

[ 8] 0x395bee0 StartNode ,

[ 9] 0x97c0bb0 TextNode "Foo",

[ 10] 0x3de7d60 TextNode "bar",

[ 11] 0x3959b00 EndNode }

There‘s a tracked deletion change in the Model (blue)

Page 6: MICHAEL STAHL CIB SOFTWARE GMBH BRUSSELS, 2019-02-02 · 2019-04-15 · BRUSSELS, 2019-02-02 ARE WE OPTIMIERT YET? 2 AGENDA 1.THE PROBLEM 2.THE SOLUTION 3.IMPLEMENTATION. 3 ... [ 10]

6

Tracked Delete Change (Hide)

<BigPtrArray> = BigPtrArray of length 15 = {

[ 0] 0x3949750 StartNode ,

[ 1] 0x395a310 EndNode ,

[ 2] 0x39551c0 StartNode ,

[ 3] 0x3956360 EndNode ,

[ 4] 0x395a6e0 StartNode ,

[ 5] 0x395a650 EndNode ,

[ 6] 0x395a1c0 StartNode ,

[ 7] 0x7afdf40 StartNode ,

[ 8] 0x7a93cd0 TextNode "o",

[ 9] 0x9785030 TextNode "ba",

[ 10] 0x7a86590 EndNode ,

[ 11] 0x3958560 EndNode ,

[ 12] 0x395bee0 StartNode ,

[ 13] 0x97c0bb0 TextNode "For",

[ 14] 0x3959b00 EndNode }

Moved into special section

Page 7: MICHAEL STAHL CIB SOFTWARE GMBH BRUSSELS, 2019-02-02 · 2019-04-15 · BRUSSELS, 2019-02-02 ARE WE OPTIMIERT YET? 2 AGENDA 1.THE PROBLEM 2.THE SOLUTION 3.IMPLEMENTATION. 3 ... [ 10]

7

Change Tracking: The Problem

● DocumentContentManager.cxx editing operations:

//JP 06.01.98: MUSS noch optimiert werden!!!

RedlineFlags eOld =getIDocumentRedlineAccess().GetRedlineFlags();

getIDocumentRedlineAccess().SetRedlineFlags(RedlineFlags::On | RedlineFlags::ShowInsert |RedlineFlags::ShowDelete );

… (impl.) ...

getIDocumentRedlineAccess().SetRedlineFlags( eOld );

Page 8: MICHAEL STAHL CIB SOFTWARE GMBH BRUSSELS, 2019-02-02 · 2019-04-15 · BRUSSELS, 2019-02-02 ARE WE OPTIMIERT YET? 2 AGENDA 1.THE PROBLEM 2.THE SOLUTION 3.IMPLEMENTATION. 3 ... [ 10]

8

Change Tracking: The Problem

Page 9: MICHAEL STAHL CIB SOFTWARE GMBH BRUSSELS, 2019-02-02 · 2019-04-15 · BRUSSELS, 2019-02-02 ARE WE OPTIMIERT YET? 2 AGENDA 1.THE PROBLEM 2.THE SOLUTION 3.IMPLEMENTATION. 3 ... [ 10]

9

2 |

THE (PROPOSED) SOLUTION

Page 10: MICHAEL STAHL CIB SOFTWARE GMBH BRUSSELS, 2019-02-02 · 2019-04-15 · BRUSSELS, 2019-02-02 ARE WE OPTIMIERT YET? 2 AGENDA 1.THE PROBLEM 2.THE SOLUTION 3.IMPLEMENTATION. 3 ... [ 10]

10

Change Tracking: The Solution (hopefully)

● Don‘t hide the redlines in the Model,hide them in the View (layout)

● struct sw::MergedPara {

sw::WriterMultiListener listener;

vector<Extents> extents;

OUString mergedText;

SwTextNode * pParaPropsNode;

SwTextNode * pFirstNode;

SwTextNode * pLastNode;

}

Page 11: MICHAEL STAHL CIB SOFTWARE GMBH BRUSSELS, 2019-02-02 · 2019-04-15 · BRUSSELS, 2019-02-02 ARE WE OPTIMIERT YET? 2 AGENDA 1.THE PROBLEM 2.THE SOLUTION 3.IMPLEMENTATION. 3 ... [ 10]

11

Change Tracking: The Solution

● From identity between frame content index and node content index to mapping via extents

SwTextNodem_Text

„foo bar baz“SwTextFrame

SwLinePortion

SwLinePortion

SwLinePortion

Page 12: MICHAEL STAHL CIB SOFTWARE GMBH BRUSSELS, 2019-02-02 · 2019-04-15 · BRUSSELS, 2019-02-02 ARE WE OPTIMIERT YET? 2 AGENDA 1.THE PROBLEM 2.THE SOLUTION 3.IMPLEMENTATION. 3 ... [ 10]

12

Change Tracking: The Solution

● From identity between frame content index and node content index to mapping via extents

SwTextNodem_Text

„foo bar baz“

SwTextFrame

SwLinePortion

SwLinePortion

SwLinePortion

MergedPara

(0,3)(7,11)

„foo baz“

SwPosition_,9

TextFrameIndex5

Extent Mapping

Page 13: MICHAEL STAHL CIB SOFTWARE GMBH BRUSSELS, 2019-02-02 · 2019-04-15 · BRUSSELS, 2019-02-02 ARE WE OPTIMIERT YET? 2 AGENDA 1.THE PROBLEM 2.THE SOLUTION 3.IMPLEMENTATION. 3 ... [ 10]

13

Nodes And FramesPreviously: 1:N

SwTextNode

Sw

Mod

ify

SwTextFrame

Sw

Clie

ntSwTextFrame

Sw

Clie

nt

SwTextFrame

Sw

Clie

nt

Page 14: MICHAEL STAHL CIB SOFTWARE GMBH BRUSSELS, 2019-02-02 · 2019-04-15 · BRUSSELS, 2019-02-02 ARE WE OPTIMIERT YET? 2 AGENDA 1.THE PROBLEM 2.THE SOLUTION 3.IMPLEMENTATION. 3 ... [ 10]

14

Nodes And FramesWith MergedPara: M:N

SwTextNode

Sw

Mod

ify

SwTextFrame

Sw

Clie

ntSwTextFrame

Sw

Clie

nt

SwTextFrame

Sw

Clie

nt

WriterMulti

Listener

WriterMulti

Listener

WriterMulti

Listener

SwTextNode

Sw

Mod

ifySwTextNode

Sw

Mod

ify

Page 15: MICHAEL STAHL CIB SOFTWARE GMBH BRUSSELS, 2019-02-02 · 2019-04-15 · BRUSSELS, 2019-02-02 ARE WE OPTIMIERT YET? 2 AGENDA 1.THE PROBLEM 2.THE SOLUTION 3.IMPLEMENTATION. 3 ... [ 10]

15

3 |

IMPLEMENTATION

1. Adapt Text Formatting / Layout2. Adapt Core Model & View Code3. Accessibility & Numberings4. Misc. Stuff

Page 16: MICHAEL STAHL CIB SOFTWARE GMBH BRUSSELS, 2019-02-02 · 2019-04-15 · BRUSSELS, 2019-02-02 ARE WE OPTIMIERT YET? 2 AGENDA 1.THE PROBLEM 2.THE SOLUTION 3.IMPLEMENTATION. 3 ... [ 10]

16

Adapt Text Formatting

● SwRootFrame::IsHideRedlines()– Replacement for GetRedlineFlags()

● SwTextFrame– use MergedPara for invalidation– etc.

● SwScriptInfo– confusing static vs. member functions

● SwAttrIter/SwRedlineItr– Avoid kerning issue; redlines must not split

portions● Even if the redline merges paragraphs

Page 17: MICHAEL STAHL CIB SOFTWARE GMBH BRUSSELS, 2019-02-02 · 2019-04-15 · BRUSSELS, 2019-02-02 ARE WE OPTIMIERT YET? 2 AGENDA 1.THE PROBLEM 2.THE SOLUTION 3.IMPLEMENTATION. 3 ... [ 10]

17

Adapt Text Formatting:Index Mapping

● Where is index mapping necessary?(SwTextNode ↔ SwTextFrame)

● Types to the rescue:

typedef

o3tl::strong_int<sal_Int32>

TextFrameIndex;

● First convert all headers

● Convert translation units incrementally– git bisect is really useful!

Page 18: MICHAEL STAHL CIB SOFTWARE GMBH BRUSSELS, 2019-02-02 · 2019-04-15 · BRUSSELS, 2019-02-02 ARE WE OPTIMIERT YET? 2 AGENDA 1.THE PROBLEM 2.THE SOLUTION 3.IMPLEMENTATION. 3 ... [ 10]

18

Adapt Text Formatting:Multiple Nodes

● Replace– SwTextFrame::GetTextNode()– SwContentFrame::GetNode()– SwFrame::GetDep()– GetRegisteredIn()– SwFrame::GetAttrSet()

with– GetTextNodeForParaProps()– GetTextNodeFirst(), GetBreakItem(),

GetPageDescItem()– GetText()

● SwIterator IteratorMode::UnwrapMulti

Page 19: MICHAEL STAHL CIB SOFTWARE GMBH BRUSSELS, 2019-02-02 · 2019-04-15 · BRUSSELS, 2019-02-02 ARE WE OPTIMIERT YET? 2 AGENDA 1.THE PROBLEM 2.THE SOLUTION 3.IMPLEMENTATION. 3 ... [ 10]

19

Adapt Core Model & View Code

● Load document: create merged frames

● Switch between Show/Hide– Flys and footnotes...

● Editing operations & Undo:– Invalidation of frames– Moving of frames– Deletion of frames– „Merging“ of frames

● View cursor movement, SwCursorShell

● ExperimentalMode to enable

Page 20: MICHAEL STAHL CIB SOFTWARE GMBH BRUSSELS, 2019-02-02 · 2019-04-15 · BRUSSELS, 2019-02-02 ARE WE OPTIMIERT YET? 2 AGENDA 1.THE PROBLEM 2.THE SOLUTION 3.IMPLEMENTATION. 3 ... [ 10]

20

Accessibility & Numberings

● Accessibility:– Refactored to listen to SwTextFrame– Additional index indirection...

● Numberings:– Footnotes– Numbered lists– Outline numbering– Reference fields– Chapter fields– Bibliography fields– Page variable fields

Page 21: MICHAEL STAHL CIB SOFTWARE GMBH BRUSSELS, 2019-02-02 · 2019-04-15 · BRUSSELS, 2019-02-02 ARE WE OPTIMIERT YET? 2 AGENDA 1.THE PROBLEM 2.THE SOLUTION 3.IMPLEMENTATION. 3 ... [ 10]

21

Miscellaneous Stuff

● Format→Paragraph etc.

● AutoFormat / AutoCorrect

● Comments in the margin

● PDF export

● Find & Replace

● ToX

● Linguistic?– Not ideal yet...

● Turn it on by default!

● Remove that silly dialog…

Page 22: MICHAEL STAHL CIB SOFTWARE GMBH BRUSSELS, 2019-02-02 · 2019-04-15 · BRUSSELS, 2019-02-02 ARE WE OPTIMIERT YET? 2 AGENDA 1.THE PROBLEM 2.THE SOLUTION 3.IMPLEMENTATION. 3 ... [ 10]

22

Final Status: ~500 Commits Later...

● executeDispatch(".uno:ShowTrackedChanges")

now toggles layout Show/Hide

● RedlineFlags ~always ShowInsert|ShowDelete

● What still calls SetRedlineFlags to toggle ShowMask?– Document Compare / Merge– Import / Export filters & related (linked

section update)– SwXTextDocument props "ShowChanges",

"RedlineDisplayType"● for API clients

● Every other call is a no-op in case of ShowInsert|ShowDelete

Page 23: MICHAEL STAHL CIB SOFTWARE GMBH BRUSSELS, 2019-02-02 · 2019-04-15 · BRUSSELS, 2019-02-02 ARE WE OPTIMIERT YET? 2 AGENDA 1.THE PROBLEM 2.THE SOLUTION 3.IMPLEMENTATION. 3 ... [ 10]

23

Thanks For Funding This Work

Page 24: MICHAEL STAHL CIB SOFTWARE GMBH BRUSSELS, 2019-02-02 · 2019-04-15 · BRUSSELS, 2019-02-02 ARE WE OPTIMIERT YET? 2 AGENDA 1.THE PROBLEM 2.THE SOLUTION 3.IMPLEMENTATION. 3 ... [ 10]

THANK YOU!

OUR PRODUCTS:

HTTP://LIBREOFFICE.CIB.DE/

WE CAN HELP:

HTTP://LIBREOFFICE.CIB.DE/SUPPORT