当前位置:   article > 正文

aardio - 巧用字符分隔符\u0001

aardio - 巧用字符分隔符\u0001

    在使用简单画板写古诗词效果过程中,遇到一个问题,就是文本换行时,如果行首为标点符号,会自动将上一行最后一个文字移到这行的标点符号前。这样,上一行末尾就有一个空缺了,不是很美观。当然,这符合语文写作规则 ^-^

    我在尝试,是不是有什么设置选项,可以强行将标点符号放到行首。

    经测试没找到办法,于是有了个设想:自己写几句代码,强行用空格,将文字或标点符号“顶”到其位置,空格和标点符号之间,空格应该不会被强行挪移到行首吧?

    于是有了以下想法:

  1. var text = `庆历四年春,滕子京谪守巴陵郡。越明年,政通人和,百废具兴,乃重修岳阳楼,增其旧制,刻唐贤今人诗赋于其上,属予作文以记之。
  2. 予观夫巴陵胜状,在洞庭一湖。衔远山,吞长江,浩浩汤汤,横无际涯,朝晖夕阴,气象万千,此则岳阳楼之大观也,前人之述备矣。然则北通巫峡,南极潇湘,迁客骚人,多会于此,览物之情,得无异乎?
  3. `
  4. // 将整段文字打散
  5. var ts = ..string.split(text);
  6. winform.button.oncommand = function(id,event){
  7. for(i=1;#ts;1){
  8. var newstr="" // 每次循环写一个字,保留前面写的,本次只写一个字。
  9. //将打散后的文本重新组合,前面所有的文字用空格代替,只保留本次循环的那个字,以免以前的字重复绘制。
  10. for(n=1;i-1;1){
  11. if ts[n]='\n' newstr ++= '\n'; //保留换行
  12. else newstr ++= ' '; // 换行以外的,都替换为空格
  13. }
  14. newstr ++= ts[i]; //最后加上本次的文本。
  15. // 最后再一次性写出:
  16. p.drawText(rectf,newstr,::LOGFONT(name="仿宋";point=16;color=0xFF000000),{3},true)
  17. ..win.delay(100);
  18. }
  19. }

运行结果如下:

   

    从结果可以看出,gdip在遇到空格换行时,从第二行开始,前面的空格都被忽略了,文本会从第二行行首开始,造成多次重叠。这显然不是我需要的效果。

    但是有例外,后面是标点符号和换行时,前面的空格换行是正常的。

    那么,有没有一个字符,既是空的,重复书写时不会影响已写过的内容,又能避免gdip处理空格换行时出现的第二行文本叠加问题呢?

    经过查找资料和测试,\u0001或\1,有人叫他“字符分隔符”或“诡异的空格”,不管叫啥吧,反正这个符号目前能实现这种效果。

  1. // 将整段文字打散
  2. var ts = ..string.split(text);
  3. winform.button.oncommand = function(id,event){
  4. for(i=1;#ts;1){
  5. var newstr="" // 每次循环写一个字,保留前面写的,本次只写一个字。
  6. //将打散后的文本重新组合,前面所有的文字用空格代替,只保留本次循环的那个字,以免以前的字重复绘制。
  7. for(n=1;i-1;1){
  8. if ts[n]='\n' newstr ++= '\n'; //保留换行
  9. else newstr ++= '\u0001'; // 换行以外的,都替换为空格
  10. }
  11. newstr ++= ts[i]; //最后加上本次的文本。
  12. // 最后再一次性写出:
  13. p.drawText(rectf,newstr,::LOGFONT(name="仿宋";point=16;color=0xFF000000),{3},true)
  14. ..win.delay(100);
  15. }
  16. }

运行效果如下:

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号