On Sep 3, 2013 7:04 PM, "Ben Fritz" <[email protected]> wrote: > > On Saturday, August 31, 2013 2:24:23 PM UTC-5, ZyX wrote: > > 1. When using concealed characters color that extends past the end of line (i.e. diff color) shows different line end positions: http://img-fotki.yandex.ru/get/6704/9151298.3/0_9e202_6394ebc0_orig.png(also attached image 1.png). After inspecting the code it seems that problem is with any multibyte characters, not necessary multibyte character in cchar: script extensively uses things like > > > > > > > > let s:new = s:new . repeat(s:difffillchar, &columns - strlen(s:new) - s:margin) > > > > > > > > for various fillers. Note the `strlen`: it is not correct to use here, strdisplaywidth() is. Note about strchars(): it is not correct because it counts composing characters separately and does not respect fullwidth characters. > > Thanks, that should be an easy update. That probably never worked right. I wonder if there are other places where strdisplaywidth() needs to be used instead. > > > I also have an emulation of strdisplaywidth() (which though works like if there &ambiwidth is set to single regardless of actual setting) for old vim versions: https://bitbucket.org/ZyX_I/frawor/src/c1683934455928961e93466275cedbcae4ea564c/autoload/frawor/table.vim#cl-4 . > > > > > > I don't think that's needed in this case because I really don't intend to support really old Vims with the official runtime plugin for the latest Vim; but it should at least fail gracefully I suppose.
It uses strdisplaywidth() if available. Graceful degradation with lesser lines of code would be len(split(str, '\V')). > > > > If I set g:html_no_pre it is not better: http://img-fotki.yandex.ru/get/9103/9151298.3/0_9e205_558c48a2_orig.png(1-2.png): highlighting does not extend past the end of line. > > > > > > > > 2. With g:html_no_pre=1 empty line does not contain diff highlighting. > > > > Yes, I'd like to figure out a good way to handle this. I really don't want to resort to using a table, though. At least not if I can avoid it. Tables cause huge performance issues in some browsers if they get to be several thousand rows long; and I do on occasion convert entire files this many lines. I use p's covering full lines (used to use div's, do not remember why I switched). Table for non-diff is an overkill. > > > > > > 3. Sometimes line does not contain highlighting with g:html_no_pre=0: http://img-fotki.yandex.ru/get/9485/9151298.3/0_9e206_c721f0d3_orig.png(3.png): guess this is because it ends with concealed character. > > > > > > I haven't noticed this; I'll need to look into that. Thanks for reporting. > > > > > 4. There is a reason for my formatvim using table with one table row per one line, even though it is very imperfect: too tall characters cause shift: http://img-fotki.yandex.ru/get/9264/9151298.3/0_9e208_cb2ab30c_orig.png(4.png). This is not the first tall character here and diff is thus incorrect. Also note thin black gaps between lines. > > > > > > I struggled with a similar thin gaps problem for a LONG time before I gave up. As mentioned, I *really* don't want to resort to a table. I would love to find a better solution to that. Please anybody let me know if you have any ideas. Design constraint is that TOhtml (mostly) builds one whole line at a time. My table diff solution is known to hang LTS (AFAIR 17.*) firefox. Others (including latest firefox) are fine; used to check how test with almost four hundred concealed characters (= more then three span's with display property triggered depending on whether line (= container p) is hovered) works in some browsers. For this particular case I even format trailing tildas. Though it is not required unless your ultimate goal is to eventually create something like :Format screenshot. Guess it is obvious what should it do. > > > > 5. When diffing with empty buffer “E749: empty buffer” error is shown: from function tohtml#Convert2HTML, line 15. > > > > > > That's...interesting. I'm not sure why that ever works. The problem is that line does "windo | if ...." when it should be "windo if ...." (without the |). I guess the default command for windo is :print? :windo accepts bar as its argument. It seems that bar at the start is same no-op as : at the start. --------- By the way: I found one really crazy optimization technique: the fast cycle determining where region with same highlighting ends may be reduced to exactly two ex commands: :while and :endwhile, this reduced time spend by my formatting function (it normally takes about 90% of total time for large files; the more the greater file is) by almost 30 %: As unlike you I use :let's in the cycle it looks like this: while curcol<=linelen&&!empty(extend(l:,{'id':synID(clnr,curcol,1),'concealinfo':synconcealed(clnr,curcol),...}))&&!empty(extend(l:,{'nocbreak':f(concealinfo)}))&&id==oldid&&...&&!empty(extend(l:,{'curcol':curcol+1})) endwhile Even more cryptic if I do not turn off minimizations. Will probably once check whether I can automatically transform normal syntax tree into this insanity: seems to be not an impossible task. > > > > Used 2html.vim: http://code.google.com/r/fritzophrenic-vim-clone/source/browse/runtime/syntax/2html.vim?r=92d11dd5081080db1d9635eb1f88fa2ceb634a53(with the whole VIMRUNTIME from the same commit of the same repository). > > > > > > > > Used settings: default, unless mentioned otherwise. > > -- > -- > You received this message from the "vim_dev" maillist. > Do not top-post! Type your reply below the text you are replying to. > For more information, visit http://www.vim.org/maillist.php > > --- > You received this message because you are subscribed to the Google Groups "vim_dev" group. > To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. > For more options, visit https://groups.google.com/groups/opt_out. -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/groups/opt_out.
