Bert, Thanks. This will be very helpful. I will have more questions. Your explanations can serve as the start of documentation. I'll find out about performance as I continue to implement the utd functions. John On Thu, Jan 19, 2012 at 02:52:53PM +0100, Bert Frees wrote: > Hi John, > > outbuf1 is the buffer that was already there (used to be just outbuf I > think). I've added 2 additional buffers that come after the first. > Unlike the first, the 2nd and 3th can be bypassed. They are only > needed in some special cases, which I will explain below: > > Special case 1: The setting printPageNumberRange is set to yes, and > the setting printPageNumberAt is set to top. > > This means that the whole range of print pages contained in a Braille > page is displayed at the top of the page. This is used a lot in > Belgium. For example, if a braille page contains the last part of > print page 10 and the first part of print page 11, the first line of > the braille page will say: 10-11. > > Because in this case, the first line of the page can not be created > until the rest of the page is finished, lines 2 till N are first > written to outbuf2. Then, the first line is written, bypassing > outbuf2. Then, outbuf2 is read out. All this is done in the function > nextBraillePage. > > Special case 2: For some element, one or more of the style attributes > dontSplit, keepWithNext or orphanControl are set to yes. > > Processing such elements sometimes requires multiple iterations. For > example, let's say dontSplit is set to yes. Before writing the > element, the whole 'state' of the program (including outbuf1 and > outbuf2) is stored. Then, outbuf3 is enabled and the first iteration > is done. If the element fits on the Braille page, outbuf3 is read out > and we can move on. If the element doesn't fit on the Braille page, > the previous state is restored, outbuf3 is discarded and we do a > second iteration. This time, we start the element on a new Braille > page so that it will fit on this page. All this is done in > transcribe_paragraph.c > > I still like the idea of cascading multiple buffers, but I'm not sure > if my implementation is very good, performance-wise. You may have to > look at that. > > Best, > Bert > > > On 18-jan-12, at 19:33, John J. Boyer wrote: > > >Hi Bert, > > > >I am putting your changes into the utd functions in liblouisutdml. > >Could > >you explain the use of the three buffers, outbuf1 outbuf2 outbuf3 > > > >Incidentally, I have moved the buffers off the stack and into > >user_data. > >This makes them available for the string translation functions as well > >for file translation functions. They also come in handy for utd and > >for > >converting utd to other formats. > > > >Thanks, > >John > -- John J. Boyer; President, Chief Software Developer Abilitiessoft, Inc. http://www.abilitiessoft.com Madison, Wisconsin USA Developing software for people with disabilities For a description of the software, to download it and links to project pages go to http://www.abilitiessoft.com