IRC Logs

Log of #ghostscript at irc.freenode.net.

Search:
 <<<Back 1 day (to 2016/02/21)20160222 
tor8 sebras: 'em' is an abstract unit of font size. it has no relation to any actual features of the font, other than being used to scale the font from its 'unit' size.10:15.37 
  ex is 0.5 * em10:15.54 
  and line-height in css is defined in terms of 'em' (i.e. line-height: 120% is 'em' * 1.2)10:17.43 
  sebras: in freetype there is a face->units_per_EM scale which is typically 2048 for truetype and 1000 for postscript fonts10:20.23 
  this is used to scale fonts; the outlines are scaled first by dividing by this units_per_EM and then multiplied by the font size (i.e. 'em')10:21.02 
  how big an ascender is has no actual relation to this; there are other values in the font header that say how tall they are10:22.03 
HenryStiles kens: we got a signed release from michael (ram file system) and the money should go out this week. Be nice if the cash was incentive to do more work, we'll see15:08.18 
kens I htnk he does other stuff nowadays but it'll be good to have that cleared up15:08.41 
HenryStiles kens: by the way can I have a few test files for the pcl->pdf/a. I'm changing a good amount of the pl code and don't want to much that up.15:09.34 
  s/much/muck15:09.46 
kens OK I'll mail something to you15:09.52 
HenryStiles chrisl: I'm free all day today to talk about pcl.15:10.33 
chrisl HenryStiles: I looked at the initialisation code, and it's not going to be easy to do what you wanted at all15:11.13 
HenryStiles chrisl: what did I want to do ? I've given up on so many things I can't keep them straight ;-)15:12.00 
chrisl HenryStiles: you wanted the interpreter to pass the allocator in for FAPI to use15:12.28 
HenryStiles chrisl: oh that ...doesn't really matter I now pass in the chunk manager, and it wraps that, which results in the same thing you have now.15:13.34 
chrisl HenryStiles: I was thinking we could change it so if only wraps the allocator if it is not already a chunk allocator instance15:14.17 
  s/if/it15:14.24 
HenryStiles chrisl: you could but the output is the same right?15:14.58 
chrisl HenryStiles: No, I think at the moment we'll end up with a new chunk allocator instance "on top of" the previous one15:15.55 
HenryStiles chrisl: but this is used by gs no? So you've basically disable gc for everything that uses fapi ...15:16.02 
chrisl HenryStiles: We can't use gc memory for fapi15:16.23 
  Freetype and UFST really don't expect allocations to move around15:16.53 
HenryStiles chrisl: how did it work before that change?15:17.49 
chrisl HenryStiles: it just used non gc memory15:18.07 
  HenryStiles: Using the chunk allocator was a performance gain, not a bug fix15:19.15 
HenryStiles chrisl: right. I can easily fix it not to wrap twice, but it also seemed consistent to leave it as is. You have a separate allocator for fapi15:22.21 
chrisl HenryStiles: That's fine by me.15:23.19 
tor8 Robin_Watts: got a minute?15:24.09 
HenryStiles chrisl: now reading the logs kens said he has made progress getting gc out of pdfwrite but you thought this was hopeless. devices free of gc really change the direction of the language switching project.15:25.16 
chrisl HenryStiles: Then other thing was something I want to do. At the moment PCL passes disk fonts to FAPI in a memory buffer, that FAPI copies. I'd like to add a FAPI call to allocate the font buffer, and have PCL read the font file straight into that (so we avoid a duplicate memory allocation, and a buffer copy)15:25.16 
  HenryStiles: *NOT EVEN REMOTELY THE SAME THING*!!!!!!!!!15:25.47 
kens pdfwrite should no longer rely on GC. I say 'should'.....15:26.31 
tor8 Robin_Watts: on tor/script there is a new mutool -- run. it runs a javascript with bindings similar to the JNI ones.15:26.36 
chrisl kens: But the *device* is still allocated in gc memory15:26.49 
kens Oh yeah, different problem15:27.01 
tor8 doing the bindings, I've stumbled across the fz_rect argument to several of the fz_clip_* functions15:27.11 
  but that rect looks like it's redundant15:27.21 
  so I wonder if we can just remove it15:27.30 
  or make sure we can leave it null and recompute in the fz_clip_xxx wrappers, and not expose it in the jni/js bindings15:28.04 
chrisl As we have discussed at least five times before: devices (including pdfwrite) are entirely free to use whatever memory allocator they like for their *own* memory, but the device object itself still has to be in gc memory.15:28.09 
HenryStiles chrisl: I'm certainly in favor of the change not to copy the font data.15:38.04 
chrisl HenryStiles: I may have had a better idea on that - I'll probably look at it properly on the way to the staff meeting15:38.48 
HenryStiles chrisl: I've always lumped together the allocator the device uses and the devices allocator as one huge problem. Actually I thought the largest obstacle to having a shared language switch device was pdfwrite and high level devices. Indeed the current LS environment works to some extent with raster devices not but not pdfwrite.15:43.25 
chrisl HenryStiles: I'm not at all sure a) why pdfwrite should (now) be an exception, and b) how allocating devices outside gc can work correctly, in all cases, with Postscript15:44.47 
HenryStiles chrisl: well if you search for PSI_INCLUDED in "psi" there are lots of places where we sidestepped problems. The change in zsetdevice is perhaps the most important.15:52.51 
chrisl HenryStiles: I'd define that as breaking Postscript.....15:54.09 
Robin_Watts tor8: Apologies, I didn't see your message.15:56.57 
  (I blame Scott for making my facebook beep every couple of seconds)15:57.11 
HenryStiles chrisl: are there other issues you have with sharing a device other than that?15:59.04 
Robin_Watts tor8: Where do you think the rect is not used?15:59.15 
  fz_clip_text ?16:00.05 
chrisl HenryStiles: Just the interaction with Postscript - even without the gc problem, I think it's going to be problematic that Postscript can select a new device "under the feet" of the language switching front end16:00.19 
tor8 Robin_Watts: it's always computed from the object being passed, so it's a cached value in essence16:00.41 
  for fz_clip_image_mask it's always the unit rect transformed by the ctm16:01.02 
  for paths it's always the fz_bound_path rect transformed by the ctm16:01.14 
  etc16:01.25 
Robin_Watts No. For paths, it's *either* what is passed in, or it's calculated.16:01.43 
  If a value is passed in, we use that, if not we recalculate.16:02.08 
  IMHO we should do that on all the functions.16:02.26 
  of course, that may be hard :)16:02.32 
tor8 Robin_Watts: I looked at all the call sites; and where we have calculated it it's always the same as we calculate when nothing is passed in16:03.08 
  though there are a few cases where we don't calculate if it's null16:03.29 
Robin_Watts tor8: OK, so that's the case now, but we could have other people calling this.16:03.39 
tor8 I'm uncomfortable with having this argument -- it's an optimization so we don't need to recompute the bounding boxes16:04.09 
Robin_Watts Is exposing the rect purely a performance thing?16:04.16 
chrisl HenryStiles: So, we might be able to deal with the gc problems by changing how the PS interpreter handles device objects (refs), so they actually use reference counting for the device memory. And we might be able to deal with Postscript's ability to change the device by encapsulating each PS job in an extra save/restore layer.16:04.16 
tor8 it's purely performance related. passi n the wrong thing and you'll get slow performance or wrong results16:04.33 
Robin_Watts So the rect is not honoured on playback?16:04.58 
  I'm thinking, for instance, of doing an fz_clip_path, and passing in a big path, but a smaller rectangle.16:05.29 
  My hopes would be that the clip would be the path clipped to the rectangle.16:05.49 
  If that's what we do, then dropping the rect from the API leaves us with a less capable API.16:06.18 
tor8 it's not designed as a separate scissor rectangle16:06.33 
Robin_Watts If that's not what we do, then it's false advertising, and we should fix it, or change the API.16:06.37 
tor8 it may behave like one now, but that's purely accidental16:06.43 
  to save us recomputing the bounds of a text or path when deciding how big the temporary buffers need to be in the draw device16:07.14 
  unless you've gone and added something else to it; it's been a while since I poked at this code16:07.55 
Robin_Watts tor8: I understood that it was supposed to be a separate scissor rectangle.16:08.26 
  and the display list device stores the rectangle, and transforms it on playback before passing it through.16:08.46 
  So it saves a lot of repeated bound calculations.16:08.55 
tor8 it's supposed to be the cached bound calculation, nothing else16:09.10 
  so we can use it as a scissor, but that is not its purpose16:09.19 
  that would completely break the device interface assumptions16:09.29 
Robin_Watts OK, so what would you like to do here?16:09.48 
tor8 I can't imagine we'd add clip rectangles based on this to the pdf_device, for instance?16:09.51 
  I can think of two things -- remove it altogether and always recompute. that might be slow for paths, but we do it for text objects already.16:10.25 
  or make sure it can always be null, and don't expose it to java16:10.48 
Robin_Watts Minimum thing would be to add a comment to the device interface to specify that if used, it must be the bounds of the path.16:11.09 
  I'd be in favour of the latter, I think.16:11.17 
tor8 I would still remove it from the clip_image_mask call (that's a simple transform of the unit rect)16:12.03 
  but yes, I think the latter will be better16:12.16 
  and we can make sure that all calls to fz_clip_xxx can take null16:12.55 
HenryStiles chrisl: that leads me to believe we or I should try and patch up the old language switch stuff and go from there. I think it can be made a bit more sane.16:13.09 
tor8 we could also ensure that all device->clip_xxx callbacks take the computed bounds, but that may be wasted if they don't need it16:13.18 
Robin_Watts tor8: OK. The displaylist will need updating then for the clip_image_mask call.16:13.28 
tor8 so the question is whether to handle null at the fz_clip or inside the devices16:13.36 
Robin_Watts In the fz_clip, controlled by a device hint?16:14.30 
  DEVICE_HONOURS_CLIPS or something.16:14.56 
chrisl HenryStiles: We'd have to establish a good way to know when a PS job is starting, and when it's complete.16:15.05 
Robin_Watts DEVICE_IGNORES_CLIPS maybe.16:15.11 
  so the text device can set that, and we can avoid doing the calculation in that case.16:15.21 
  tor8: Oh, actually... we can avoid doing the calculation in the case that the dev->clip_stroke_path (or whatever) is NULL.16:16.22 
  tor8: Cluster checks just came back clean on my stuff (as you'd expect)16:26.15 
HenryStiles chrisl: I'm going to build the ls stuff and see what all is broken and think about it some more.16:27.10 
tor8 Robin_Watts: the flaw in printing objects, I believe that's a bug in gs. it depends on the value of do_tight, but a / is always a new token16:29.47 
Robin_Watts tor8: So how do we proceed on this? Are you going to keep working, or do you want me to review what's there?16:29.54 
  /Fredendobj16:30.05 
tor8 oh!16:30.15 
  I misread.16:30.21 
  that bug would be there for 'true' and 'false' and literal numbers too or is it just names?16:31.15 
chrisl HenryStiles: If you think that's best. Of course, hacking up the original language switch doesn't get us the consistent front end API we really wanted, nor does it get rid of the pl_universe stuff16:31.20 
tor8 trueendobj, 42endobj16:31.23 
Robin_Watts tor8: I only saw it for Names, but the others are probably there too.16:31.40 
  And the fix should address all of them.16:31.56 
tor8 Robin_Watts: all lgtm. there's a couple of commits on tor/master waiting to go as well.16:32.53 
  I've spotted some problems with sebras/master that I'm still waiting to hear back from sebras on16:33.14 
Robin_Watts tro8: looking now.16:33.18 
  tor8: I have no strong objections to any of those. lgtm.16:35.37 
  Do you want to push, and I'll rebase and push?16:35.49 
tor8 Robin_Watts: I'd prefer if I pushed; I've got the jni and script branches hanging off tor/master16:36.13 
Robin_Watts is confused...16:36.37 
tor8 meaning, that I prefer if I pushed tor/master to origin and not have to rebase half a dozen branches :)16:37.02 
  Robin_Watts: go ahead and rebase, I've pushed. thanks for looking.16:37.18 
  Robin_Watts: okay, tor/script now has an example of a javascript creating a draw device and drawing some paths and text to it and saving the pixmap as a png16:38.39 
HenryStiles chrisl: I do intend to get rid of much of the bloat that has accumulated in pl_universe and I think doing this (fixing up the current ls) incrementally will make the languages much easier to plugin elsewhere.16:39.28 
Robin_Watts Ok, pushed.16:39.42 
tor8 Robin_Watts: and my ramblings are obviously insane... I think I should stop writing code now...16:40.02 
chrisl HenryStiles: Fair enough.16:40.42 
Robin_Watts tor8: What does mujs use as an allocator ?16:41.24 
  Does it just call malloc/free, or is there some way to set custom allocators for it?16:41.56 
tor8 Robin_Watts: there is a way to set custom allocators16:42.03 
  but I've not set them for mutool run16:42.11 
Robin_Watts right. It might be nice if you did.16:42.22 
tor8 they're the first and second arguments to js_newstate16:42.22 
Robin_Watts a) because it would be an example.16:42.28 
tor8 Robin_Watts: it would. it slipped my mind.16:42.33 
Robin_Watts b) because everything in mutool uses fz_malloc etc.16:42.38 
tor8 Robin_Watts: commit on tor/master that uses the allocator16:44.46 
Robin_Watts The first commit is certainly fine.16:46.30 
  The second one, my eyes glaze over a bit after a while, but it looks plausible.16:46.44 
tor8 Robin_Watts: if you're itching for a new mupdf project ... I'm thinking of writing a fz_show_string function that takes an utf-8 string and shapes it with bidi, harfbuzz and fallback fonts into a fz_text16:47.03 
  Robin_Watts: yeah, it's a big blob of code16:47.19 
Robin_Watts The third one says "WIP" in the commit message, but... WOW. To have that ability from the previous commit is REALLY cool.16:47.27 
  And the allocator one looks good too.16:47.42 
  I have a list of stuff on a post it note in front of me of stuff I want to do before the meeting.16:48.38 
  but, yes, I could potentially be interested in that.16:49.07 
  The idea, I assume, being to have a function that does some of the stuff that the epub agent does, but in a way that can be easily reused?16:49.52 
mvrhel_laptop gosh I guess the meeting is coming up quick here16:50.14 
tor8 yeah. something to expose to say svg and gui viewers and the annotation ap stream creation, etc.16:50.31 
  I would imagine it be a simple single-line kind of thing; maybe a second function that does wrapping as well16:51.24 
Robin_Watts tor8: Will ponder on it.16:52.17 
  That might be a good thing for the flight.16:52.34 
tor8 Robin_Watts: thanks. time to head out for a bit, grocery shopping and dinner.16:52.43 
  Robin_Watts: yeah, it could be a good flight sized project.16:53.01 
  Robin_Watts: we could maintain the path bounds as the path is created, and not have to worry about the costs of recomputing the bbox17:41.15 
  Robin_Watts: huh, so fz_pack_path clones the path while packing it?18:07.21 
  I was wondering why append_display_node didn't fz_keep the path18:07.45 
Robin_Watts fz_pack_path doesn't clone the path.18:23.28 
  You call fz_pack_path with a pointer to somewhere to pack the path into.18:25.27 
  so, yes I guess that is a form of cloning.18:26.13 
tor8 Robin_Watts: it clones into the display list buffer, right?18:32.48 
Robin_Watts yes.18:32.55 
tor8 so, pdf text rendering mode fill+stroke will get two copies of the same path data in the display list18:33.03 
  since we call first fill, then stroke, with the same fz_path object18:33.15 
Robin_Watts tor8: Unless I've been clever enough to spot repeated paths, yes.18:33.37 
tor8 Robin_Watts: I don't understand the reasoning behind 'image2 = fz_keep_image(ctx, image)'18:36.18 
  in the display list18:36.23 
  Robin_Watts: in the path packing, the fz_throw("Can't pack a path that small!") looks like it's in the wrong branch18:59.20 
  oh wait, no, I'm just confused.19:00.07 
Robin_Watts tor8: Let me look at the image2 thing.19:02.01 
tor8 Robin_Watts: I have a tentative fix for removing the fz_rect to the clip functions.19:02.42 
  turns out, the draw device doesn't even use it19:02.52 
Robin_Watts tor8: We get passed an image, whose reference we can use for the duration of the call.19:03.08 
  We need to keep a reference ourselves, so we clone it.19:03.16 
  s/clone/keep/ it.19:03.23 
tor8 why the second variable?19:03.38 
Robin_Watts why not?19:04.03 
tor8 also, shouldn't the keep be done inside append_display_node (like where the paths are packed)19:04.06 
  because it's confusing :)19:04.27 
Robin_Watts tor8: It can't be done inside append_display_node because the private_data is a void *.19:04.38 
  i.e. append_display_node doesn't know what it's taking. It just takes a pointer to "something" and the size.19:05.01 
tor8 ah, right!19:05.11 
Robin_Watts In this case the "something" it takes a pointer to is image2.19:05.13 
  So that's why the second variable )19:05.21 
  :)19:05.23 
tor8 and it's taking the stack address of the local variable...!?19:05.38 
  oh, so it can copy the address19:05.48 
  okay, I get it.19:05.50 
  you could just take the & of the function argument though19:06.05 
Robin_Watts You trust compilers more than me :)19:06.22 
tor8 only the non-optimizing kind.... :)19:06.41 
  Robin_Watts: if you could take a look at tor/master and see if I've cocked up the display list code I'd be grateful19:07.15 
Robin_Watts tor8: will do, but not immediately - being called away, sorry.19:07.28 
tor8 I'm not sure exactly what is going on with all of the rects being passed and which ones are required and not19:07.33 
  I suspect you do this so that you can minimize the rects for begin_mask, begin_group and begin_tile19:08.02 
Robin_Watts tor8: In the display device?19:25.59 
tor8 in the display list device19:26.19 
  the stack of rects and rect_for_update, etc19:26.30 
Robin_Watts I can't remember offhand. It'd be guesswork at best without me having a stare at the code for a bit.19:27.28 
tor8 the commit came back clean from clusterpush at least :)19:27.49 
Robin_Watts tor8: Was there a noricable change in reported speed?19:29.06 
  11 minutes slower (1hr26 being the baseline)19:29.48 
  I'd be tempted to rerun to see if that varies much.19:29.58 
tor8 Robin_Watts: yeah.19:30.35 
  I'll fire off one more clusterpush19:31.03 
Robin_Watts Ah, right. All the container stack stuff that is relied upon by things like the display device is in the device wrappers.19:31.37 
  I was thinking that we could call the device functions directly to supply the rects, but we can't...19:32.09 
tor8 it *looks* to me like we have two layers of rectangle tracking19:32.41 
Robin_Watts When playing back from displaylist we used to avoid ever having to bound paths. Now we have to bound every path.19:32.46 
tor8 one in the fz_device, and one in the list-device19:32.50 
Robin_Watts tor8: The one in the fz_device was extracted from the draw device.19:33.16 
tor8 the draw device doesn't call fz_bound_path19:33.43 
  and it doesn't use the fz_rect it gets passed19:33.53 
  it does its bounding on the flattened edge list19:34.05 
Robin_Watts tor8: Right, so the rects are purely for deciding container sizes (like masks etc).19:34.38 
tor8 also, fz_bound_path should now be very fast (it just transforms the saved bbox with the ctm)19:34.44 
Robin_Watts Paths now have a saved bbox as part of them?19:35.10 
  The display list device doesn't keep a stack of rects.19:35.30 
tor8 Yes. That's the commit just before.19:35.42 
  fz_list_device->stack19:35.58 
  what's that then?19:36.04 
  the display list doesn't keep a stack, but the device sure does19:36.21 
Robin_Watts Right. The display list *writer* keeps a stack.19:37.23 
tor8 Robin_Watts: that last clusterpush was 4 minutes faster than the one before it19:37.42 
Robin_Watts so only 7 minutes slower than before?19:37.59 
tor8 yes. and that's with the exact same sha119:38.13 
  so I suspect this is within the usual fluctuations of the cluster19:38.31 
Robin_Watts Yes.19:38.37 
  Well, it's not stupidly larger than the usual fluctuations of the cluster at least.19:39.00 
  Having a bbox for the path irks me a bit.19:40.24 
  I feel like we ought to be able to make better use of that in the common axis aligned rectangular path case.19:40.49 
  There probably isn't much point in storing the rect in the list in the FZ_CMD_CLIP_PATH case any more.19:43.19 
  likewise the clip_stroke_path case.19:43.37 
tor8 I think we might want them to update the areas for begin_mask etc19:44.06 
Robin_Watts and the fz_list_clip_image_mask case.19:44.11 
tor8 but we may not need to store them in the actual nodes though19:44.15 
Robin_Watts tor8: Yeah, we can just move the calculation from the storing to the reading.19:44.29 
  otherwise we end up packing the same bbox into the list twice - once as part of the path, once as part of the node data.19:45.22 
tor8 Robin_Watts: I think we should only store the rects for the mask/group/tile nodes; but those we recompute as we create the display list19:46.30 
Robin_Watts tor8: I think we *should*, yes.19:47.01 
  But in your latest patch we still store for the fz_clip_ cases too.19:47.20 
tor8 what we currently do, I'm a bit intimidated by the intricacies of the display list writer19:47.33 
Robin_Watts just pass NULL instead of &rect :)19:47.46 
tor8 well, if we don't update the rects for masks, tiles and groups ... there's no need for the stack in the writer at all?19:48.20 
Robin_Watts tor8: eh?19:48.43 
tor8 but we do, so we still need to pass the fz_rect19:48.52 
  passing NULL would mean we don't update the writer->stack[top].update rect properly19:49.15 
  in fz_append_display_node19:49.44 
Robin_Watts oh! So it would.19:49.46 
tor8 but we could make sure to only save the rect for mask/group/tile19:50.15 
Robin_Watts Right, so what is happening there is EXACTLY me minimising the rects used for clips etc.19:50.33 
  And the sole point of that is so that we can pass in a smaller box than we might expect as the scissor.19:51.11 
  If we are never allowing ourselves to do that, then there is no point in having the first 3 cases in fz_append_display_node19:51.55 
  What currently happens, i think is that we store the empty rect in the node data, and keep a pointer to it.19:52.59 
tor8 okay. so if I understand correctly, the display list would make the bounding box rect (formerly) passed to dev->clip_path smaller than the path19:53.17 
Robin_Watts As we put more and more stuff into the list that rect is grown.19:53.17 
tor8 based on what's inside the clip area19:53.22 
Robin_Watts When we pop the clip we then intersect that with the path bbox, so that the rect stored in the data at the end us the minimally sized one.19:53.52 
tor8 so that we can make an even smaller clip buffer than usual19:54.02 
Robin_Watts Yes.19:54.11 
tor8 and that gets us a bit of extra performance in case the display list is used19:54.15 
  for these cases19:54.21 
Robin_Watts So, it is a shame to lose this.19:54.22 
tor8 Robin_Watts: yes. we could make the writer->update poke at the packed path bounds though :)19:54.44 
Robin_Watts Especially for stupid (but common) PDF files that "set the clip to the size of the page", "output text", "pop clip"19:54.50 
tor8 Robin_Watts: well, we handle those cases by scissoring anyway19:55.03 
Robin_Watts tor8: Urgh :(19:55.05 
  the path bounds should always be consistent with the path.19:55.22 
tor8 any rectangular clip path is treated as a scissor in the draw device19:55.32 
Robin_Watts being called for food.19:55.37 
tor8 Robin_Watts: okay, ignore those two commits.20:15.05 
  I'll make a new one where I move the rect to the end of the argument list and call it transformed_scissor_hint20:15.14 
  but for symmetry we should also add it to clip_text20:17.08 
Robin_Watts tor8: That sounds great.20:32.46 
sebras tor8: back.20:47.22 
  tor8: I'm attempting to reproduce the problem where you see multiple spaces inbetween <p> tags.20:59.40 
  tor8: oh.. <p>hello</p><p>world</p> worked fine, and having \n before/after didn't matter, but doing <p>hello</p>\n<p>world</p> certainly looks peculiar.21:03.33 
  tor8: I think I know what is happening, it is the linebreaks that are transformed into spaces as they are now following a non-space characters (21:04.43 
  'o' and 'd' respectively in this example)21:04.52 
tor8 Robin_Watts: updated commit on tor/master, running a clusterpush now as well21:32.00 
  sebras: yeah, I think that newline between the two <p> tags is the problem21:33.27 
  since it creates a new anonymous block box for the space21:33.37 
sebras tor8: maybe we should set skip_white == 1 inbetween blocks?21:36.22 
  tor8: that way the space would disappear.21:36.48 
tor8 sebras: I thought you did that already?21:37.18 
  I'm too brain fried to think about this tonight, have been digging too deep in the display list device.21:37.32 
sebras tor8: I'm currently playing with setting *skip_white = 1; before the second call to generate_text() in generate_boxes(), but I'm not yet sure if this is a good approach.21:37.43 
  tor8: I must understand this box-model thing better to be convinced. but I'll play around with this until I have something I believe in.21:38.21 
tor8 sebras: basically, at every place we would create a new BOX_FLOW, skip_white should be true21:38.52 
  because at the beginning of each BOX_FLOW we do the while loop to skip initial white space21:39.09 
sebras right.21:39.39 
  tor8: mm, something like that, I'm just trying to locate where in the code this happens.21:43.42 
  tor8: ok. so I think I found where that pesky *skip_white = 1 ought to go. new patch over at sebras/master.23:00.28 
  tor8: please don't find any more issues with it. :)23:00.41 
 Forward 1 day (to 2016/02/23)>>> 
ghostscript.com
Search: