 So, I'm working for a city software, I think it's a little sketchy, so I'm just talking about, I'm worried about gene tracking in Russian, which, yeah, I don't know. First we're going to talk about, you know, especially the problem that we are working on and what we're supposed to pursue, which people like. And for philosophy, we're going to talk about the current state of the implementation of the department especially my just talking about the improvements. So, this is a, one problem of Gene Ratioff of course, and this is my philosophy, So, you know, in the menu, there's this new option that I'm talking about to show when I spin the WU, or when I want to run it. And that is what wants to be added in the menu. And it's so important that the reason is actually complicated in the menu. So, what does this actually do? So, this is what the model of a very simple right element looks like. This is the node array where you have, in this example, you have two paragraphs here at the bottom, the red, that's the important part. And these are the installs of the text node. And then there is the track relation there, which is the blue characters there. And, yeah, so this is what your model will look like if you have the track change user being sent to the shoulder view. The track changes. And then, in the other case, when you hide them, what happens is that in the double body here at the bottom, you have now one text node that contains the part of the text that is not deleted. And then you have two more text nodes here in the special section of the node array that contain the beauty text. So, the important thing here is that in order to change the view of the document, we actually have to change the model itself. And now, this is the performance problem. This is something, an editing operation. There are a couple of things in document content manager where the operation can only be performed if all the track changes are in the document body. It cannot be performed if they are hidden. There is such a special section of the document model. So, what is happening here is that we can't set what has an extension to move all the elements around the document model. And then, the editing operation is performed. And then at the end, we saw the previous red line. So, this moves all the elements, for example, and delete that character. And this is then slow. So, if you have all the two red lines, we will not have that. But if you have a couple of them in your document, then there is a style of content. They ask the user if they want to actually not try to learn from children, then it's going to be faster. And yes, this is not such a good user experience, I think. Yes, this is the performance problem that we are trying to address here. But what is the solution for the document model? Yes, so we don't want to hide the red lines in the document model. But we set red lines in the document view, actually, so that the view setting is actually a view setting. And basically, in the layout, it's not conceptually really that difficult. It's just this original data type for our management paradigm that contains a bunch of things like some listeners so that it's going to connect to more and more, which I'm going to describe in detail in a bit. And this range is our extent to describe which parts of these paragraphs will be different in which they're visible. And the merge text of all of these paragraphs. And when we look at the number of pointers, like the pointer to the text note that contains the paragraph, the first note, which is not necessarily the same as the paragraph. Because the paragraph is coming from the first note that is not completely empty. But, yeah, then it doesn't need a last note. But yeah. It doesn't look actually all that difficult. The difficulty in this change is then to actually make use of this data type everywhere that it now needs to be used. Because as a general model, there are some barriers that used to be guaranteed by the implementation but now it has been adapted for these changes inside of the text note. And the indexes inside of the A L frame, which is called the assembly of text frame, are basically identical. So the text frame will contain numerous text portions, many portions, etc. that refer to parts of the text of the paragraph. And the indexes there are sort of two different indexes and they would just invert the indexes into the string, but this is completely in the text note. What we need now is a bit of an indirection. Right now it contains one of these large parts, the objects. And this vector of the extents is the invisible text. So here in this example, we have a set of mergers deleted. So it's not visible. So we have the very extents from the start of the paragraph until the end of the paragraph until the end of the paragraph. And yeah, we have the large text that's still visible here, the large paragraph. And then we have these portions of the text frame. They now have indexes that point into the large text, sort of the large text. And there is a data div here, a text frame index that is used for these indexes that point into the text frame. If we want to convert between these frame indexes and the indexes that are used as a document or everywhere, which is usually sort of positioned as a W index, then we need to use the extensive information in the Mergera to do a pattern. And yeah, this needs to be done everywhere, where there is some access from the model into the layout or the malware. But it's no longer valid, it's that the previously we had this relationship between the extents and the index frames that was the one to end. So one text dot can have multiple text frames. So for example, if you have so much text in the paragraphs, that it doesn't fit in one page, you get one text frame per page. And these text frames are connected to their text dot via this, it's something modifiable, it's something that clients can assume that if you're on a talk spot, yes, it's being created, but every text frame always has a unique text note that connects to it. Now with the Mergera, what we actually have is an end-to-end register, some indeed track change that starts in the text note. So all of these text notes are basically connected and should be displayed in the view as one text frame, as one paragraph. And so what we need to do now, in the text frame only, which has this limitation that it can only listen at one, it's something modified at a time, which is an interaction mechanism that can be used to connect to the multiple SW-25 objects. So we connect basically every one of these text frames, which every one of these three text notes, and the multiple number of the director who sees the events that are sent by the text note to forward them to the text frame. So all of this we have is an end-to-end relationship. And now the problem is that there are a lot of places that in the code that ask for the text note that is connected to the current text frame, and yeah, this then meets the limitation. So, so much for the general idea of the solution. And now we come to the, it's basically a procedure for larger milestones. And the first one is that we need to conduct the text format in there itself so that it makes use of the virtual camera, the second milestone was that the document in the writer-core code needs to be adapted to create the layout properly so that it looks right when you order a document or when you edit it in the form. The third step is to to showcase the accessibility and adapt it to the requirements and also various things in the document that are numbered. And then we have some of the catch-all issues in the proxy code. We've got some models yet teachers don't need the subject of the fourth advisor about the text format itself. So, the changes there are but in many parts quite superficial about simple changes to either of these are needed. The thing that we need is a place to store this view setting whether we want to show our hand-to-hand guidelines. And the reason for this is the document model the random language there was used but of course we want to get away from using the document model for this. So the obvious place to store this setting would be the view shell but as I just thought it's better to use the root frame which is the root class, the entire layout because as it turns out we can have multiple view shells or we cannot have multiple layouts because all of the view shells actually share one layout. This is something that could of course be improved that would be for a different project. And then the most of the changes are going to the guidance is now using this merge paragraph data set in many issues one part to reformat create the correct part of the frame when something is changing the document that I have used in the edit set and some other small changes there it has some quite new functions to map instance and so on and then there was this SW script in the full class which I have existed but it's actually quite a problem to me in the text format process because it stores lots of information about what scripts are being used what parts of the text are being hidden by that sort of thing and continuing because this class contains lots of duplication between static functions and member functions that solve it the same thing but it turns out that the static functions usually run from the document model and the member functions from the text working in layout and so here I have needed a bit of a factory to move things around then another area that we did quite large changes were the... three tightly coupled classes that used all of the text formatting and the text painting to iterate over the content of the program and break into text portions that are all so each text portion has the same formatting so it has only one formatting for all of the text inside of it and the important there was that we cannot just break into a new text portion every time it starts or ends because then we would have a problem there as the font timing only happens inside of the text portion if you arrange one place then those two characters can get turning or painting in the digital so the iterate is a bit more complex because it has to a simple the digital ones as the changes the formatting of the other is the same as that but the beginning happens to anything in a different paragraph then there are a lot of places where we have to map between these two index types so as I said we now have different indexes for the text document for the iterate and previously these were both just 32-bit integers so there was no annotation of what I talked about to actually find differences where we need to add calls to these new mapping functions but in general we can leverage the text in the compiler there so programming has this great strong link to the template which is basically an intermediate has both the arithmetic operations detailed but you can actually mix a strong link with the ordinary in operation because that also has to explicitly convert to the two types and so we have added a strong link for the text document and then just convert first of the last declarations the data files basically to to just look at which of these functions operate on expert indexes convert also and then we can leverage the compiler to just print an error in place in the natural limitations where this needs to be mapped in the right direction what's very nice about this is if we just the definition of this text then we can incrementally convert all the code so we can have a large long series of small commits that each compiler on their own then if we have to make mistakes somewhere it's it's the last part of it was the multiple nodes of the MNN relationship that is now happening so actually it is a crazy amount of different functions that can be used to retrieve the LX node from the LX family so we have to go through all of them and just replace them with different functions so the new function the most useful one is that the text formating wants to get the formating properties so the function for that in some cases it's necessary to actually get the first of the text node and there are also two special formating methods for the interface that for reasons I don't really understand are actually always taken from the first node in contrast to all the other so for those of you who have distinct functions in the test range together and of course we also need quite often this function to get the text nodes in the test range so this merge text in the internal and of course all of these functions work if the paragraph is merged then the return value from the merged paragraph and if it isn't merged then they just work with the way they create the form then use the SWO modifier to get that and we try to get the text nodes inside the text node oh my god what we also need is this new node for the extravictorator because there is we try to take the modifier in a way that is not really a text node to just use the graph context node and iterate over all of its finance of a particular object so for example we also find or iterate all of the text frames registered at a node because the relationship between the electron and its dog is now indirect because there is this modulus in the middle between the two. This would break, but with an electricity indirect iteration of that looks, we find this model checks the type of the object in most of the points. So that should also work. We'll get a bit short of time. So this was all in the first milestone that was integrated into a milestone of months ago, but it was not actually enabled. Now the second milestone was to let the right-hand corner go to make the basic editing of the documents on possible to make the things that basically will be useful. So if you load a document and it has a set example that says that the evidence are in, then you want to initially create the layout of the merge frames. And then you also want to be able to click the item in the menu to switch between the two modes. And then you need to iterate or create a merge frame to the old frames as well. And what's great in there is that you don't only need to look at the experiment themselves, but there are also other frames connected to the experiment. And these need to be maintained and populated as well. So twice the experiment is drawing shapes and to find a difference that you can insert. Then also the texture is made of a folklore. The folklore may be deleted and so on, but then... Yeah, that's a good point. Right, at least not only may it be deleted, but they also may need to be moved from one texture into the other. That's also a good point. If it happens to be a new diverge. And then you have the editing operations in the document model and these now also need to ensure that the correct frame is embedded in some text inserted or deleted, whatever. They also may need to move the texture into one mode to move into a different mode. So when you join to a paragraph, when you come to the start of the second one and place that something, generally, this was actually the point, the part of the work that took somewhat longer than expected. So finding all the things and continuing to actually work. Then the next point was that the cursor show. It's mentioning the new cursor that the user can move around and of course in the beginning it would happen that if you move things and delete the line then it just didn't really move so you have to change all that stuff so that it jumps over the user. And this is now connected to the experimental mode. So if you choose to actually click this experimental mode then it's going to be made. And this is already much, much better. So just quickly, just to move it, I'm planning for a product that's quite small is that we need to fix it. Accessibility, which hardly crashes, which is, of course, currently, they're coming out in a couple. And there are various things in the document that are numbered, at some points, this, etc. and these currently displayed the wrong number so we need to fix them that they can display two different numbers. And the fourth one is then going to be various things like obscure features like the auto format that is currently making a bit of a mess of things and a table of contents, maybe. I'm not sure if it actually needs changing. The finding the place in the data currently in the laboratory world may find things that are deleted and that you can actually see, which is a bit of the format of paragraph. I'm not sure what paragraph the insult should be actually implied to because, well, you only see one. The main text also. So which text should the insult be implied to? I can't be able to get rid of this dialogue actually. Of course, thank you to the city of Munich for sponsoring this work. It wouldn't be possible for us otherwise. And it's finally done. Do you have any questions for me?