IRC Logs

Log of #ghostscript at irc.freenode.net.

Search:
 <<<Back 1 day (to 2014/01/26)2014/01/27 
chinni can anyone help to integrate mupdf library into my android application when i am trying to run the app it is showing the following exception"java.lang.ExceptionInInitializerError"05:51.47 
kens Hmm the cluster appears to be U/S09:30.12 
  I've sumbmitted a job and nothing has happened to it, its just sitting there.09:30.31 
  Or has it finished already ?09:30.46 
Robin_Watts kens: I'm guessing it's finished already.10:51.33 
kens It had, I was caught by surprise10:51.44 
  under 14 minutes for a full test run of GS10:52.12 
Robin_Watts tor8: ping11:59.05 
kens paulgardiner : Robin_Watts, any idea on MuPDF with Android 4. ?12:07.43 
  http://stackoverflow.com/questions/21378044/mupdf-1-3-cannot-open-pdf-with-android-4-012:07.46 
Robin_Watts kens: I'd ask them if the same problem exists with an unchanged version of the sources pulled from git.12:08.41 
kens ÖK I cna do that.12:08.50 
Robin_Watts If it does, then report it as a bug and we'll look into it.12:08.53 
  As far as we know the sources in git work fine on all android devices >= 2.2 (or thereabouts)12:09.23 
paulgardiner That's very weird. Maybe he is also reacting to the back button in his own code, and shuting down MuPDFActivity before onBackPressed is called.12:12.52 
kens paulgardiner : he does claim it works with 1.1, hwich is why I asked, but I posted the answer anyway12:13.15 
paulgardiner 1.1 doesn't special case the back button.12:13.55 
kens2 lunches12:18.41 
tor8 Robin_Watts: pong.13:01.58 
Robin_Watts tor8: So, I was thinking last week about bates numbering.13:02.13 
  and adding support for it within mupdf.13:02.26 
tor8 Robin_Watts: how does it work?13:02.51 
Robin_Watts Specifically we would need the ability to add bates numbering to a document, and to remove it from a document.13:02.59 
tor8 add a visible "stamp" annotation and digital signature?13:03.07 
Robin_Watts Sadly not.13:03.13 
  It's not done via annotations.13:03.19 
  It's done by finding the page content stream, and by adding stuff onto the end of it.13:03.32 
tor8 ew. better hope the content stream has balanced their q's and Q's13:03.54 
Robin_Watts It adds a "blah blah BDC" then an invocation of a Do then an "EMC"13:04.05 
tor8 so, an XObject as well?13:04.18 
Robin_Watts and the form XObject invoked by the Do contains the appearance and the XML information.13:04.39 
  as a PieceInfo.13:04.42 
  I tested Acrobat, and it copes with unbalanced q/Qs etc :(13:05.02 
tor8 I can see adding it shouldn't be too hard. removing it however...13:05.04 
Robin_Watts I have an idea about how to do this.13:05.15 
  I've got a couple of commits on robin/master that are the first step.13:05.45 
tor8 Robin_Watts: I think we can count the number of q's and Q's using the lexer. at Do we automatically rebalance if the XObject is unbalanced.13:05.46 
Robin_Watts Firstly, I tweaked the pdf_run_xxx functions (the operator implementations) so that they are all the same format: static void pdf_run_XX(pdf_csi *...)13:06.29 
  Then I added an array of them to the pdf_csi.13:06.53 
  The interpreter now calls into that array rather than calling fixed ones.13:07.25 
  That way we can swap in different sets of them as we need to.13:07.43 
tor8 aha! you've found a way to finally use that idea of yours that I tossed when rewriting the interpreter loop :)13:08.42 
Robin_Watts Indeed!13:08.54 
tor8 Robin_Watts: both commits LGTM (but beware of the two earlier ones you have sitting on the branch that aren't)13:09.25 
Robin_Watts My idea is that as well as the normal 'pdf_run' ones, we have a 'pdf_filter' one that takes the input as operators, and can reoutput them to a buffer.13:09.30 
tor8 Robin_Watts: and I assume count balancing q's and Q's?13:09.47 
Robin_Watts It can optionally filter content out too.13:09.49 
  Exactly.13:09.51 
tor8 Robin_Watts: would be neat to let pdfclean also clean the content streams :)13:10.09 
Robin_Watts and it can probably avoid needless repetition of things like: 0 0 1 rg 0 1 0 rg 1 0 0 rg etc.13:10.30 
tor8 Robin_Watts: maybe even rebalance the BT/ET that people always forget to put in the right place13:10.39 
Robin_Watts And we can watch for what the cm's are set to etc.13:10.50 
tor8 Robin_Watts: yeah. we could make pdfclean become a pdf minifying tool by just watching state changes and outputting the minimum necessary in the content streams13:11.24 
Robin_Watts It would mean that when people have used the 'marked content' stuff, we can extract just the contents marked with a given tag etc.13:11.39 
tor8 of course, that'll be undone by us not compressing or creating object streams on the output end13:11.50 
Robin_Watts We can probably add stream compression easily enough. (Do we really not do that yet?)13:12.14 
tor8 Robin_Watts: but yes, I do think if we want to go in the direction of a general "pdf editing toolkit" this is definitely worth having13:12.21 
  Robin_Watts: in pdfclean we only decompress :)13:12.30 
Robin_Watts Ok, cool. I will keep bashing at it then.13:12.33 
  true.13:12.36 
tor8 it would be handy (for small enough definitions of handy) to recompress everything as Flate13:13.03 
Robin_Watts yes.13:13.08 
tor8 get rid of LZW and other cruft13:13.12 
Robin_Watts mutool clean -c :)13:13.26 
  or -z13:13.35 
tor8 -z for zip, -c for clean the content streams13:13.46 
Robin_Watts yeah.13:13.56 
  It would also enable us to spot unused resources.13:14.06 
tor8 and the filter could in theory do all kinds of color conversions of non-image data13:14.08 
  just change all color operators into setgray for grayscale13:14.18 
Robin_Watts Yes, there is lots of scope for stuff here.13:14.29 
  I'm glad you're not appalled by this idea :)13:14.39 
tor8 "0 0 0 1 k" could easily become "0 g"13:14.43 
  Robin_Watts: mind you, I've had my head deep in javascript guts lately, my sense of what is appalling might just have been desensitized13:15.22 
Robin_Watts ha!13:15.28 
tor8 omg, that is one hacky ugly language!13:15.31 
Robin_Watts I spent the weekend reading patents. Now *THOSE* are far more convoluted ugly languages :)13:16.44 
tor8 Robin_Watts: so, RegExps and Date objects are missing, and a handful of builtin functions, but all the rest of the core language is working (barring the usual set of bugs and misconceptions)13:16.49 
  now what did you go and do that for?13:17.02 
Robin_Watts excellent.13:17.02 
tor8 Robin_Watts: that, and adding prototype getter and setter functions is all that's missing before I can unleash the monster on paul13:17.32 
Robin_Watts To figure out which patents might still apply to the Smart Office code.13:17.53 
tor8 ah.13:18.08 
Robin_Watts I think the answer is that none apply to the idea of taking the SOT office loaders and merging that into MuPDF.13:18.47 
tor8 looking through all the old picsel patents?13:18.48 
paulgardiner tor8: did what I said about storing a native object per method make sense? We started talking about it and then got destracted.13:19.00 
Robin_Watts But it's much harder to be 100% sure about whether the patents still apply to the SOT app itself.13:19.23 
  tor8: yeah.13:19.30 
tor8 paulgardiner: I started reading it, and looking at your pdfimp api I have a few (minor) questions for you13:19.33 
Robin_Watts heads for lunch. bbs.13:20.00 
tor8 paulgardiner: am I correct in assuming that jsimp_new_type is essentially registering a new prototype object that the native "host" objects will use, and addmethod adds a getter/setter property on said prototype object?13:20.53 
paulgardiner Yep.13:21.11 
tor8 paulgardiner: then I have something that I think should work13:21.42 
  paulgardiner: this is a simple example of the current native-object-binding api in libjs http://ghostscript.com/~tor/file-js.txt13:22.07 
  so the basic idea with the libjs api is (just like lua) that all interfacing between C and the javascript happens via a "stack" of values13:22.59 
  there is no way for the C code to access the javascript objects directly (keeps them safe for garbage collection)13:23.22 
  so you have a handful of functions to "push" values to the stack, and others to extract from the stack into C data types13:23.49 
  js_pushnumber() and js_tonumber() for example13:23.56 
  and also to create new objects on the stack: js_newobject() and to read and set properties13:24.12 
  js_getproperty() takes a stack index (of the object) and a property name, and pushes the value of the property on the stack13:24.35 
  and setproperty does the same, but takes the value from the stack13:24.42 
  and you can create a function object that will call a C function with js_newcfunction() that takes a function pointer13:25.31 
  that gets called with all the arguments on the stack, and takes the return value from the top of the stack when the function returns13:25.55 
  now my thinking for native objects is to create a special class of object (like String, Array and Boolean are special classes of objects) that is Userdata13:26.53 
  and each Userdata also has a tag string, which identifies it to the C code, so that sneaky javascript code doesn't call a method for one class on another's object and causes all sorts of crashing13:27.38 
paulgardiner Yeah, that looks nice, but there is a special problem in MuPDF to do with the fact that we wish to support multiple engines and we want a single piece of code that defines the DOM independently of the engine (I'm assuming we wish to continue to do that because some users may with to use v8 even though they have a lighter-weight alternative).13:27.48 
tor8 paulgardiner: yes. so I think your jsimp methods should (with a few minor changes) map to the api fairly easily13:28.17 
  paulgardiner: do you hold on to pointers to javascript objects from the C code?13:29.24 
  paulgardiner: we could make pdf_jsimp_obj just be ints, or map this sort of stack-based api onto the existing wrappers13:31.18 
paulgardiner The problem is specific to creating one interface in terms of another and (I don't believe specific to the way I did it): although the caller of jsimp passed different set get functions for each property, the implementations of the jsimp interface have to use a single pair of set get for all properties and all objects. The differing native set/get s have to be stored somewhere.13:31.33 
tor8 the biggest mismatch that I see is the way you pass around pdf_jsimp_obj. I have a way around that, but it's kind of inefficient if you're going to use it heavily.13:32.24 
  js_ref() is intended to get you a 'handle' to a javascript hosted value13:32.43 
  but it does that by using a special registry table (just an object, with made up property keys) which is part of the GC root set13:33.06 
  and returns the key into the table for the value13:33.13 
paulgardiner In C if you have set1, set2, ... and you need to create metaset1, metaset2, ... to pass into an engine to call set1, set2, ..., you cannot do it.13:33.40 
tor8 because pdf_jsimp_to_string for instance, could trigger some javascript toString() code and that might trigger a GC cycle13:33.42 
paulgardiner So you have to use a single metaset function and for each use hide set1, set2, .... in a data structure.13:34.22 
tor8 paulgardiner: let me rephrase to see if I understand: the pdf_jsimp interface to mupdf has multiple get/set functions (all taking pdf_jsimp_obj *args[]), but in the jsimp interface to the interpreters...13:35.31 
paulgardiner In this case somewhere to store the set functions for each property is needed. If you store them in the object, you have to create a lookup table13:35.35 
tor8 ...there is only one getter/setter that is used for all properties, that gets passed the object and property name and does a lookup to the former set?13:36.02 
paulgardiner Yesish13:36.17 
  Yes in Javascipt core.13:36.30 
  In v8, I'm able to store the getter/setters in the engine attached to the property, so that when my single internal set/get method is called I have access to the stored native set and get13:37.17 
  That is more efficient.13:37.46 
tor8 right, I think I now understand what you meant earlier with storing a native data attached to each property13:38.16 
paulgardiner Although efficiency isn't everything, so using the lookup mechanism as in JSCore isn't a disaster13:38.24 
tor8 in libjs, my thinking would be to create two c function objects for the getter and setter, and attach them to the property as setter/getter attributes13:38.48 
paulgardiner It's just that if you are creating an API for your engine, and if the problem is as general as I think it is, it might be good to solve.13:39.12 
tor8 whether it's a c function object or a javascript function object shouldn't matter, it gets called as normal13:39.16 
paulgardiner But the problem is that the set/get functions passed through the jsimp interface are of one type and the ones passed into the engine are of another. the engine cannot directly call the native jsimp ones.13:40.27 
tor8 js_newobject(J); js_pushcfunction(J, myFooGetter); js_setpropertygetter(J, -2, "foo"); js_pushcfunction(J, myFooSetter); js_setpropertysetter(J, -2, "foo"); js_setproperty(J, -2, "prototype");13:40.28 
  paulgardiner: yeah. so the pdf_jsimp prototypes match the v8 api but not the jscore?13:41.17 
paulgardiner So for each native jsimp set/get we need an engine metaset/metaget pair, but we are unable to create those on the fly (being C and indeed in many langauages)13:41.20 
  tor8: no not at all.13:41.32 
  tor8: I designed the api without looking at v813:41.47 
  I was then surprised twice13:41.55 
tor8 paulgardiner: hm. okay. so if you attach the real set/get as a function pointer as a userdata, and then have a wrapper/unwrapper to convert the parameters and return values and calls the userdata function?13:42.14 
paulgardiner First surprise was that defining one interface over another had this problem. The second surprise was that v8 had a solution13:42.29 
  tor8: yeah what you just said has to be done for one interface defined over another, but there is still a problem I think13:43.20 
  Can I have userdata specific to the property for which set /get is being difined?13:44.00 
tor8 yeah. I hadn't really considered the issue of there being a need for two layers of callbacks.13:44.10 
  paulgardiner: well, I haven't written the code yet, so yes :)13:44.26 
paulgardiner tor8: no well you wouldn't. I wouldn't other than having realised that it has special problems13:44.47 
  tor8: :-)13:45.00 
tor8 in my original thinking, you'd have the userdata pointer from the "this" value that gets passed13:45.13 
paulgardiner tor8: yes, I think that's most natural, and it is strange that one also needs to attach userdata to the property.13:45.53 
tor8 one way to hack around it is to hide the real pointer as a userdata in a closure that gets created around the function object13:45.54 
  paulgardiner: well, that, or get the name of the property somehow13:46.13 
paulgardiner tor8: Looking at my v8 imp I think that is what I do13:46.17 
tor8 ick. why do they have to have property getters and setters?13:46.23 
  why not just functions... :(13:46.33 
  paulgardiner: I don't do closures for C functions, but you could create a javascript function (which has closures) to call the c function with the hidden userdata-for-the-property but that seems needlessly awkward13:47.30 
paulgardiner tor8: there may ways to change jsimp competely that avoids this... or maybe not. I'd be interested. The one thing I'd like to keep is the ability to support multiple engines with the DOM described once and not differently for each engine13:47.49 
tor8 paulgardiner: yeah. well, we could make the DOM definition in terms of the libjs api (which is completely abstracted onto a "stack")13:48.23 
  and then make libjs api wrappers for the other engines13:48.35 
paulgardiner tor8: in the v8 implementations I definitely create functions and hide the data in there. That may be the same as you've just suggested13:48.49 
tor8 paulgardiner: my C++ foo is too weak13:49.28 
paulgardiner tor8: that's an interesting idea. Let me mull that over.13:49.31 
  tor8: I don't understand my v8 imp any more either. :-)13:49.49 
tor8 you create a PDFJSImpMethod to wrap the jsimp function pointer into something you send to v813:50.12 
  so js_newcfunction would do the same trick in a v8-wrapper of wrapping the actual function pointer in a bit of hidden data, and then the callMethod callback would unpack all the arguments and call the hidden function13:51.35 
  it might be a fair amount of work to reimplement the whole libjs api in terms of the others, but it shouldn't be a lot more than we already do. I have tried to keep it small.13:52.32 
  paulgardiner: ugh. you know of any decent regexp libraries? PCRE is a huge bloated monstrosity that does a *lot* more than just the slightly extended POSIX regexes that javascript uses13:53.11 
paulgardiner Yeah. Not sure. Certainly a possibility. On the other hand, libjs only need provide a way to store userdata in a property and we can go the other way,13:53.40 
tor8 and the libc regex.h stuff isn't well supported on windows, nor does it handle utf-8 reliably (it might, if you trick it with setlocale, but that's horrible)13:53.42 
  paulgardiner: yeah, the only trick is getting the userdata out of the property and into the setter/getter13:54.08 
paulgardiner Plus anyone else wishing to support libjs under their own API would be able to take advantage of it13:54.17 
tor8 but I could make a separate function prototype for setter and getter C functions13:54.36 
paulgardiner tor8: I'd just need it passed in when the libjs set get is called13:55.31 
  libjs-level13:55.40 
tor8 actually, it might be trivial, since the setter and getter functions are full fledged javascript objects, you could hide the wrapper pointer in a regular property13:55.47 
paulgardiner Ah. I think I understand. Nice13:56.22 
tor8 so you create the meta-wrapper function, and add the real c function object as a property of that, and you extract that property when you call it13:56.34 
paulgardiner So it was already there, sort of.13:56.35 
  Sounds good to me13:56.54 
tor8 now I just need a way to get at the called function object (arguments.callee or some such?)13:57.09 
paulgardiner Magic13:57.56 
tor8 either that or let c functions have a scope and use closures13:57.59 
  paulgardiner: okay, so we've got a way to solve it that doesn't even involve changing my original concept :)13:58.45 
paulgardiner Am I understanding: pass spope in as an arg to C func?13:58.51 
tor8 paulgardiner: a C func is currently run with only the global environment as its scope13:59.12 
  there is no "get local variable" call for the C api13:59.23 
paulgardiner tor8: I thought you'd have a simple solution. It's just very difficult to explain the problem in the first place13:59.27 
Robin_Watts tor8: http://tiny-rex.sourceforge.net/ maybe?13:59.54 
tor8 I could change that with a few lines of code, to just create a scope for a c function object and make the getvar/setvar functions public13:59.57 
paulgardiner tor8: sounds good to me.14:00.37 
tor8 Robin_Watts: one thought I had was to take the plan9 regex library and extend it. it's small enough to actually understand.14:00.43 
  or just write my own, it's not like regexes are hard to implement (with a slow, backtracking recursive implementation, which javascript basically mandates with their backreferences \1 \2 etc)14:01.15 
Robin_Watts I haven't looked at the above lib - I just asked on another talker :)14:01.16 
tor8 paulgardiner: the currently called function object always lives on the stack, so getting that with a special function call (or magic stack index number) should be trivial as well14:01.57 
  currently I treat positive indexes as function arguments, and negative indexes count from the top of the stack14:02.24 
  so 0 is this, 1..argc are the arguments, and -1 is the top element on the stack14:02.40 
  65535 could be made to mean the function object (or just another api entry point)14:03.19 
  js_pushcallee()14:03.38 
  paulgardiner: anyway, should be easy to do14:04.02 
paulgardiner tor8: brilliant. Sounds ideal. I like the whole stack thing too.14:05.42 
tor8 Robin_Watts: that trex stuff looks like workable. the code looks simple enough to work with to extend for backreferences and positive/negative lookahead and non-capturing closures.14:07.04 
Robin_Watts I understood about 8 words of that :)14:07.31 
tor8 Robin_Watts: obscure regex features: (?=...) (?:) (?!) and \1 \2 \314:08.14 
  oh, trex already does non-capturing expressions :)14:09.47 
  not according to the man page but if you read the code14:09.55 
  #ifdef _UINCODE I suspect a typo!14:10.18 
paulgardiner Robin_Watts: little Android fix on paul/master16:02.40 
Robin_Watts oh, yes. lgtm.16:03.55 
paulgardiner ta16:08.59 
sybariten hey16:19.01 
  im trying to formulate a question thats spot-on to my question, in order to not search too much in vain16:19.29 
  i want to take a couple of eps files, say 4-6 of them, and create one single page.... like a composie or colalge16:19.59 
  they are graphs, btw16:20.06 
  But i dont know which tool is beest for this.16:20.17 
kens2 Anything which can place EPS files, adobe illustrator, photshop etc16:20.33 
  Even MS Word can do this16:21.10 
Robin_Watts Or you can write some postscript and include the files, probably. But that requires you knowing postscript.16:21.10 
  For those not on facebook: http://www.huffingtonpost.com/2014/01/24/conference-call-real-life_n_4662007.html?ncid=edlinkusaolp00000009 16:22.41 
sybariten kens2: Robin_Watts oh, sorry. I was a bit vague. :) I need to do it programmatically :)16:23.30 
Robin_Watts sybariten: Write some code to output postscript then :)16:23.58 
kens2 You will need to read teh DSC comments from teh individual EPS files16:24.13 
  tehn write PostScript to place teh files individually16:24.27 
  And bracket each file with the appropriate PostScript operations16:24.51 
  Its not terribly hard, neither is there likely to be a simple solution.16:25.17 
sybariten heres a good example http://i.stack.imgur.com/bYAx5.png imagine i had each of those (weird) graphjs as separate eps files, and wanted to smack them together in that style16:25.32 
kens2 There are solutions for n-up imposition, but those normally expect to take fully formed PostScript rather than EPS16:25.39 
  You could look at PSUtils16:26.14 
  http://gnuwin32.sourceforge.net/packages/psutils.htm16:26.29 
sybariten aha aha16:26.33 
  psmerge...16:27.16 
kens2 sybariten : that's not enough16:28.16 
  I think16:28.20 
  Because you need to place each EPS individually16:28.29 
sybariten aha16:28.43 
kens2 psnup is more like what you want16:28.44 
sybariten how do you mean, place them individually....? as opposed to....`?16:29.00 
Robin_Watts If you need help, you could call on coscript.biz to help.16:29.02 
kens2 sybariten : Each EPS needs to be placed on the page, as opposed to each EPS becoming a page on its own16:29.35 
  I suspect psmerge does the latter16:29.47 
mvrhel_laptop good morning16:30.14 
kens2 Except that because these are EPS files you will have no showpages at all, and each one will be drawn on top of the preceding ones, forming a horrible mess16:30.18 
sybariten Robin_Watts: interesting field of work16:30.20 
  i'm fearing this is a case where i'll resort to IM doing a composite16:30.58 
  which isnt the worst, but....16:31.02 
Robin_Watts sybariten: Alex (the guy that runs coscript) is very experienced in Postscript/EPS etc.16:31.03 
sybariten Robin_Watts: ok, cool. I dont think i have any funds to use consultants for this, but i'll remember that!16:31.28 
Robin_Watts morning mvrhel_laptop 16:31.38 
henrys and the snow continues....16:40.43 
kens2 Austria had some over the weekend too :-)16:41.00 
henrys kens2:you could probably stop off at aspen or vail on your way to Scott's if Austria doesn't work out.16:41.40 
kens2 henrys I'm fairly sure those are further on from Texas ;-)16:42.01 
  But they had half a metre over the weekend so it looks much nicer16:42.20 
  Even if they did have to reroute the Hannenkam16:42.37 
mvrhel_laptop henrys: I wish we would get some snow around here. It has been like spring for the past 2 weeks16:56.54 
kens2 Here too16:57.02 
  Sunday was 10-11 centigrade16:57.14 
mvrhel_laptop wow16:57.18 
kens2 And very very wet too16:57.27 
Robin_Watts kens2: Tshirt and shorts weather.16:57.30 
mvrhel_laptop it has been about the same temp here, but sunny16:57.43 
  which is very odd16:57.48 
kens2 I'mriding in a t-shirt now16:57.48 
Robin_Watts would prefer it if the snow stayed away.16:58.07 
henrys my new place involves a lot of shoveling so I've become less of a snow fan16:59.03 
  guess I better tend to my customer bugs, ugh16:59.42 
zeniko tor8: In case you're considering trex for regexes: I've got a local fork which contains dozens of bug fixes, better JavaScript compatibility and a larger test suite.17:10.57 
Robin_Watts zeniko: sounds ideal.17:12.19 
  mvrhel_laptop: incoming from Marti.17:23.57 
kens2 OK goodnight everyone17:25.32 
mvrhel_laptop Robin_Watts: ok. so is this a pre-release?17:53.56 
Robin_Watts it is.17:54.34 
  I've integrated his previous preleases locally before and they've worked well.17:54.52 
  I will try for that one tomorrow, and put it somewhere you can look at it.17:55.05 
mvrhel_laptop ok sounds great. thank you17:55.13 
Robin_Watts Maybe you can experiment with the threading stuff, cos you'll know what to test :)17:55.26 
  gotta pop out to collect helen now. bbiab.17:55.37 
mvrhel_laptop ok ttyl17:55.40 
ray_laptop Robin_Watts: I see the "testdocs" filling up on peeved. at about 288 Gb so far18:03.25 
  We're getting about 2.4Gb per hour moving the testdocs onto peeved. Things must compress pretty well.19:23.40 
  bbiab19:24.11 
henrys robin_watts_mac_: I just sent a private message to you but it looks like you fell off the network20:35.50 
Robin_Watts I did.20:36.07 
  so I missed your message.20:40.49 
  tor8: I am confused by the array handling in the interpreter in pdf-interp.c20:43.14 
  If we *aren't* in a text object and we meet an array, we parse it all out as an object and call the operator function as normal.20:43.55 
  If we *are* in a text object, we deal with each entry as we parse it in turn, without waiting for the operator at the end.20:44.29 
  So if we have: BT [ 1 2 3 4 5 ] 0 d [(test)] TJ ET20:45.24 
  which would be entirely valid, we'd end up sending 1,2,3,4,5 as spaces, and not setting the dash stuff as we'd expect.20:45.58 
  I guess the reason behind doing it this was to keep memory usage down?20:46.33 
  but I can't believe that can have been that much of an issue...20:46.47 
henrys Robin_Watts: something weird in my chat client can't go private.20:46.54 
Robin_Watts Are you talking to robin_watts or robin_watts_mac?20:47.30 
  I just tried a private message to you.20:47.35 
henrys Robin_Watts: weird I can see your message and it won't let me type20:48.04 
  let me restart it.20:48.12 
Robin_Watts I will too.20:48.17 
mvrhel_laptop ok. I seem to have my initial cut at gsview in c# actually rendering pages with mupdf on background threads going through the c++ interface that I wrote for the windows 8 app22:02.25 
  henrys: it took me a bit to figure out all the windows api shenanigans but now that I have it things should start to come together22:03.09 
  it is nice that I was able to reuse at least some of my windows 8 code.22:03.46 
henrys mvrhel_laptop: congrats … when we get to release time we have to tell miles because he has to give russell some money first (for the name)22:05.12 
mvrhel_laptop right. I am hoping I will have something in a very rough form by the staff meeting.22:05.44 
  release will require some serious beating22:06.01 
  on the code22:06.05 
  but perhaps on me too22:06.11 
  need to head out for a bit. back shortly22:07.31 
tor8 Robin_Watts: yeah, it's for saving memory. I don't think you're allowed to change any graphics state inside the BT/ET though.23:46.16 
  so setting the dash pattern inside it is not supposed to be possible23:46.29 
  (unless I've completely misread the spec, which is entirely possible)23:46.40 
 Forward 1 day (to 2014/01/28)>>> 
ghostscript.com
Search: