📄 brw_comm.c
字号:
/**************************************************************************
Copyright (C) 2005 SHENZHEN MEIJIN CO.LTD
FILE NAME: brw_comm.C
MODULE NAME: browser
DESCRIPTION: 提供了浏览器一些基础的函数
对外函数声明:
BrowserCharMemLength 字符内存长度
BrowserJudgeMarkAbility 字符可否mark
BrowserJudgeLetter 是否为字符
BrowserTabWidth Tab的宽度
**************************************************************************
DTAE AUTHOR VERSION REMARKS
=========== ========== ========= ======================================
2006-3-5 gaolinhui V1.0 create
***************************************************************************/
#include "kernel.h"
#include "BrowserIn.h"
/********************************************************************\
Function: 根据给定的宽度,获取此宽度之外的字串
Input: lpString, 将被指定宽度截取的字串
wFontID,字库类型
byFontStyle,字体类型,只受斜体影响
uRange,截取宽度
Output: uRange,截取宽度被调整之后的取值
Notes: 如果字串无效将返回NULL
如果字符全部在指定范围内,将返回有效指针,但其内容为NULL
Update:
Date Name Description
============ ============ ===================================
2003-08-07 谢永良 任何情况下的模块初始化都需要初始化全局变量
\********************************************************************/
UINT8* BrwWidthCutStr(UINT8 *lpString, UINT16 wFontID, UINT8 byFontStyle, UINT *uRange)
{
UINT16 FontCode, wInvalid, width;
UINT8 *bakAddr;
FontInfo sFontInfo;
BOOL bFirst;
BOOL CodeWidth;
width = *uRange;
bFirst = TRUE;
bakAddr = lpString;
if (IS_ID(lpString))
{
return NULL; // cannot be ID
}
while (*lpString)
{
CodeWidth = FontGetCharCodeWidth(lpString);
if(CodeWidth == 1)
{
FontCode = *lpString;
wInvalid = ' ';
}
else if(CodeWidth == 2)
{
FontCode = (lpString[0]<<8) + lpString[1];
wInvalid = 0xa1a1;
}
else if(CodeWidth == 4)
{
FontCode = (lpString[0]<<24) + (lpString[1]<<16) + (lpString[2]<<8) + lpString[3];
wInvalid = 0xa1a1;
}
if (FontGetCharInfo(wFontID, FontCode, &sFontInfo, NULL)
|| FontGetCharInfo(wFontID, wInvalid, &sFontInfo, NULL))
{
if (bFirst)
{
/*
if (byFontStyle & FS_ITALIC) // 斜体字占用更多的宽度
{
if (width > (sFontInfo.fontHeight >> 2))
{
width -= sFontInfo.fontHeight >> 2;
}
else
{
return bakAddr;
}
}
*/
bFirst = FALSE;
}
if (width >= sFontInfo.wFontWidth)
{
width -= sFontInfo.wFontWidth;
lpString += CodeWidth;
}
else
{
break;
}
}
else
{
lpString += CodeWidth;
}
}
*uRange = *uRange - width;
return lpString;
}
/************************************************************************/
/* 函数名称: BrowserCharMemLength */
/* 函数描述: 字符内存长度 */
/* 当前版本: 1.0 */
/* 作 者: gaolinhui */
/* 输入参数: */
/* pChar - 数据指针 */
/* 输出参数: */
/* NONE */
/* 返回值 : */
/* 内存长度 */
/* 更改记录: */
/* =====================================================================*/
/* 日期 人员 版本 描述 */
/* =====================================================================*/
/* 2006-3-1 gaolinhui 1.0 创建 */
/************************************************************************/
UINT16 BrowserCharMemLength(UINT8 *pChar)
{
return FontGetCharCodeWidth(pChar);
/* if (*pChar & 0x80)
{
//全角字符
return 2;
}
else if (BrowserJudgeUserFont(pChar))
{
return 2;
}
else
{
return 1;
}
*/
}
/************************************************************************/
/* 函数名称: BrowserJudgeMarkAbility */
/* 函数描述: 判断字符是否可MARK */
/* 当前版本: 1.0 */
/* 作 者: gaolinhui */
/* 输入参数: */
/* pSur - 数据指针 */
/* 输出参数: */
/* NONE */
/* 返回值 : */
/* 内存长度 */
/* 更改记录: */
/* =====================================================================*/
/* 日期 人员 版本 描述 */
/* =====================================================================*/
/* 2006-3-1 gaolinhui 1.0 创建 */
/************************************************************************/
/*可以MARK的汉字编码范围:
1、 GBK编码的双字节2区6768个:B0A1 -F7FE
2、 GBK编码的双字节3区6080个:8140-A0FE
3、 GBK编码的双字节4区8160个:AA40-FEA0
4、 自造字的双字节1区527个:AAA1 -AFD9
5、 自造字的双字节2区641个:F8A1 -FEED
可以MARK的ASCII字符编码范围:
1、 英文大写字母A,…,Z(0x61,…, 0x7A)
2、 英文小写字母a,…,z(0x41,…, 0x5A)
3、 缩略符 ' (0x27)、连字符 - (0x2D)
数字上标不可以MARK:
8229,8222,8223,A124-A129
*/
UINT BrowserJudgeMarkAbility(UINT8 *pChar)
{
UINT uChar, uChar2;
uChar = *pChar;
//四字节编码
if(FontGetCharCodeWidth(pChar) == 4)
return 0;
if (uChar & 0x80)
{/* 全 角 */
uChar2 = *(pChar + 1);
if (uChar == 0x82)
{
if ((uChar2 == 0x29) || (uChar2 == 0x22) || (uChar2 == 0x23))
{
return 0;
}
}
if (uChar == 0xA1)
{
if ((uChar2 >= 0x24) && (uChar2 <= 0x29))
{
return 0;
}
}
if (((uChar >= 0xB0) && (uChar <= 0xF7))
&& ((uChar2 >= 0xA1) && (uChar2 <= 0xFE)))
{/*GBK编码的双字节2区6768个*/
return 2;
}
if (((uChar >= 0x81) && (uChar <= 0xA0))
&& ((uChar2 >= 0x40) && (uChar2 <= 0xFE)))
{/*GBK编码的双字节3区6080个*/
return 2;
}
if (((uChar >= 0xAA) && (uChar <= 0xFE))
&& ((uChar2 >= 0x40) && (uChar2 <= 0xA0)))
{/*GBK编码的双字节4区8160个*/
return 2;
}
if (((uChar == 0xA5) || (uChar == 0xA8))
&& ((uChar2 >= 0xA1) && (uChar2 <= 0xFE)))
{/*GBK编码的非汉字符号*/
return 2;
}
if (BrowserJudgeUserFont(pChar))
{
/*自造字*/
/*组合字不可以mark*/
if(!__BViewIsCombinedFont(pChar)) {
return 2;
}
}
}
else
{
if (BrowserJudgeLetter(pChar))
{/*字母可MARK*/
return 1;
}
else if (WORD_DIVIDE_CHAR(uChar) && BrowserJudgeLetter(pChar + 1))
{
/*当为缩略符或连字符时,只有其前
后都为英文字符时,才是可MARK字符*/
return 1;
}
else if (('0' <= uChar) && (uChar <= '9'))
{/*数字可MARK*/
return 1;
}
}
return 0;
}
/************************************************************************/
/* 函数名称: BrowserJudgeLetter */
/* 函数描述: 是否为字母 */
/* 当前版本: 1.0 */
/* 作 者: gaolinhui */
/* 输入参数: */
/* pChar - 数据指针 */
/* 输出参数: */
/* NONE */
/* 返回值 : */
/* 内存长度 */
/* 更改记录: */
/* =====================================================================*/
/* 日期 人员 版本 描述 */
/* =====================================================================*/
/* 2006-3-1 gaolinhui 1.0 创建 */
/************************************************************************/
UINT BrowserJudgeLetter(UINT8 *pChar)
{
UINT uChar;
uChar = *pChar;
if (((uChar >= 'A') && (uChar <= 'Z'))
|| ((uChar >= 'a') && (uChar <= 'z')))
{
return 1;
}
return 0;
}
/************************************************************************/
/* 函数名称: BrowserTabWidth */
/* 函数描述: 计算TAB宽度 */
/* 当前版本: 1.0 */
/* 作 者: gaolinhui */
/* 输入参数: */
/* handle - 对象句柄 */
/* 输出参数: */
/* NONE */
/* 返回值 : */
/* 宽度 */
/* 更改记录: */
/* =====================================================================*/
/* 日期 人员 版本 描述 */
/* =====================================================================*/
/* 2006-3-1 gaolinhui 1.0 创建 */
/************************************************************************/
UINT16 BrowserTabWidth(MBrowser *handle)
{
UINT16 width,height;
UINT16 font;
font = GraphSetFontID(handle->pBrwInfo->wFontID);
FontGetStringRect(&width,&height,"1 ");
GraphSetFontID(font);
return (UINT16)width;
}
UINT16 BrowserItemSpace(MBrowser *handle)
{
UINT16 font0,font;
FontInfo fontInfo;
UINT16 height0,ret;
font0 = handle->pBrwInfo->wFontID;
FontGetCharInfo(font0,' ',&fontInfo,NULL);
height0 = fontInfo.wFontHeight;
/*
if (font0 == SYSFONT_DIFFGBK16)
{
font = SYSFONT_DIFFGBK24;
}
else if (font0 == SYSFONT_DIFFGBK12)
{
font = SYSFONT_DIFFGBK16;
}
else if (font0 == SYSFONT_DIFFGBK24)
{
font = SYSFONT_DIFFGBK24;
}
*/
font = font0;
FontGetCharInfo(font,' ',&fontInfo,NULL);
ret = height0 * 2 - fontInfo.wFontHeight;
return ret;
}
UINT16 BrowserItemHeigh(MBrowser *handle)
{
UINT16 font0;
FontInfo fontInfo;
font0 = FONT16_NORMAL_FONT; //handle->pBrwInfo->wFontID;
FontGetCharInfo(font0, ' ', &fontInfo,NULL);
return (UINT16)fontInfo.wFontHeight;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -