小编Sal*_*dor的帖子

带有跨浏览器换行符的Javascript预格式化文本

我预先格式化了包含换行符和多空格的字符串,我想将它们附加到文本节点中.

<pre id="bar"></pre>

<script>
   var string = "Preformatted"
                + "\n"  // \r, \r\n, \n\r or what else?
                + "multispace     string";
   var text = document.createTextNode(string);
   document.getElementById('bar').appendChild(text);
</script>
Run Code Online (Sandbox Code Playgroud)

我试图采用线路断路器:

  • \n 在所有浏览器中打破行,但在IE(我正在测试7)成为一个空间
  • \r 仅在IE中打破行
  • \r\n 适用于所有浏览器,但在IE中,第二行开头的空间很恐怖
  • \n\r 总而言之,但是在IE中,第一行末尾的空间对于我的布局来说是不可接受的.

我无法使用<br>innerHTML,因为IE会折叠多个空格.
jQuery .text(string)具有完全相同的行为.appendChild(createTextNode(string))

如何插入跨浏览器换行符?
最终,如何轻松检测浏览器是否支持\n\r

javascript cross-browser line-breaks pre textnode

7
推荐指数
1
解决办法
4271
查看次数

检查是否显示Unicode字符或豆腐

我的问题类似于这个,但有点前进.

在我的Win32程序中,我有一些菜单按钮,其中包含BMP以上的Unicode字符,例如U + 1F5A4(UTF-16代理对0xD83D 0xDDA4).
在Windows 10中,系统字体Segoe UI没有这个字形:它自动替换为字体Segoe UI Symbol中的字形并在按钮中正确显示,这要归功于一个称为字体链接的过程(或字体后退,仍然不清楚)对我来说).
但是在Windows 7中,字体链接会带来一个既没有这个字形的字体,代理对也显示为两个空框▯▯.在Windows XP中使用Tahoma字体也一样.

我想避免这些替换框,通过在分配到按钮之前或之后解析文本,并用一些常见的ASCII字符替换丢失的字形.

我试过GetGlyphOutline,ScriptGetCMap,GetFontUnicodeRangesGetGlyphIndices,但他们不支持代理对.
我也试过GetCharacterPlacement和Uniscribe ScriptItemize+ ScriptShape支持代理对,但所有这些功能只搜索到HDC(Segoe UI)的基本字体,他们不搜索最终后备字体(Segoe UI符号),这是提供字形.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink 它是我看的地方,但我真的认为系统没有将字体链接到那里.

问题是:如何知道系统字体链接是否产生正确的字形或豆腐盒?


编辑

我找到了某种解决方案来复制这段代码并添加最后一个GetCharacterPlacement.

#include <usp10.h>

wchar_t *checkGlyphExist( HWND hwnd, wchar_t *sUnicode, wchar_t *sLimited ) {

    // Create metafile
    HDC hdc = GetDC( hwnd );
    HDC metaFileDC = CreateEnhMetaFile( hdc, NULL, NULL, …
Run Code Online (Sandbox Code Playgroud)

c unicode winapi font-linking

6
推荐指数
1
解决办法
674
查看次数

如何在gcc中获取当前的c方言?

C 编程新手。
在 gcc 中-std设置了编译的 C 标准,例如gcc -std=c99.
可以知道当前制定的是哪个C标准吗?

c gcc dialect

3
推荐指数
1
解决办法
976
查看次数