📄 brw_unit.c
字号:
/**************************************************************************
Copyright (C) 2005 SHENZHEN MEIJIN CO.LTD
FILE NAME: brw_unit.C
MODULE NAME: browser
DESCRIPTION: 提供了浏览器单元处理函数
对外函数声明:
BrowserUnitLegality Unit合法性
BrowserJudgeUserFont 判断为自造字
BrowserGetOneUnit 获取一个单元
BrowserDrawOneUnit 画一个单元
BrowserDefaultRule 浏览器默认的内部单元处理函数
**************************************************************************
DTAE AUTHOR VERSION REMARKS
=========== ========== ========= ======================================
2006-3-5 gaolinhui V1.0 create
***************************************************************************/
#include "kernel.h"
#include "BrowserIn.h"
/************************************************************************/
/* 函数名称: BrowserUnitLegality */
/* 函数描述: unit合法性 */
/* 当前版本: 1.0 */
/* 作 者: gaolinhui */
/* 输入参数: */
/* pChar - 数据指针 */
/* 输出参数: */
/* NONE */
/* 返回值 : */
/* TRUE/FALSE */
/* 更改记录: */
/* =====================================================================*/
/* 日期 人员 版本 描述 */
/* =====================================================================*/
/* 2006-3-1 gaolinhui 1.0 创建 */
/************************************************************************/
BOOL BrowserUnitLegality(UINT8 *pChar)
{
if (*pChar & 0x80)
{
return TRUE;
}
if ((*pChar >= '0') && (*pChar <= '9'))
{
return TRUE;
}
if ((*pChar >= 'a') && (*pChar <= 'z'))
{
return TRUE;
}
if ((*pChar >= 'A') && (*pChar <= 'Z'))
{
return TRUE;
}
if ((*pChar == 0x27) || (*pChar == '-'))
{
return TRUE;
}
return FALSE;
}
/************************************************************************/
/* 函数名称: BrowserJudgeUserFont */
/* 函数描述: 判断是否为自造字 */
/* 当前版本: 1.0 */
/* 作 者: gaolinhui */
/* 输入参数: */
/* pData - 数据指针 */
/* 输出参数: */
/* NONE */
/* 返回值 : */
/* TRUE/FALSE */
/* 更改记录: */
/* =====================================================================*/
/* 日期 人员 版本 描述 */
/* =====================================================================*/
/* 2006-3-1 gaolinhui 1.0 创建 */
/************************************************************************/
BOOL BrowserJudgeUserFont(UINT8 *pData)
{
UINT16 wFont;
UINT8 high,low;
high = *pData;
low = *(pData + 1);
wFont = high;
wFont <<= 8;
wFont += low;
return IsSmallFont(wFont);
//return IsUserFont(wFont);
}
//判断是否为组合字
BOOL __BViewIsCombinedFont(UINT8 const * const pFont)
{
UINT16 wFont = MAKEWORD(*(pFont+1),*pFont);
return FontIsComposeFont(wFont);
}
/************************************************************************/
/* 函数名称: BrowserGetOneUnit */
/* 函数描述: 得到一个显示单元 */
/* 当前版本: 1.0 */
/* 作 者: gaolinhui */
/* 输入参数: */
/* handle - 对象句柄 */
/* pSur - 数据指针 */
/* wStartCol - 起始列 */
/* 输出参数: */
/* pDes - 字符串 */
/* wMoveLen - 内存长度 */
/* 返回值 : */
/* 显示宽度 */
/* 更改记录: */
/* =====================================================================*/
/* 日期 人员 版本 描述 */
/* =====================================================================*/
/* 2006-3-1 gaolinhui 1.0 创建 */
/************************************************************************/
UINT16 BrowserGetOneUnit(MBrowser *handle,UINT8 *pSur,UINT8 *pDes,
UINT16 *wMoveLen,UINT uOption)
{
BOOL bFirst;
UINT16 wMemLen;
FontInfo fontInfo;
UINT8 *pUnitBuff,*pBuff,*p;
UINT16 wUnitWidth,wUnitHeight;
UINT16 ww,hh;
UINT16 i;
MUnitInfo* pUnitInfo;
UINT type;
UINT CodeWidth = 0;
UINT (*ProcessRule)(MBrowser *handle,UINT8*,UINT,MUnitInfo*);
ProcessRule = handle->pBrwInfo->fpProcessRule;
if (!ProcessRule)
{
return 0;
}
//申请内存
pBuff = BROWSER_STACK_ALLOC(handle,BROWSER_UNIT_MAXLEN);
pUnitInfo = BROWSER_STACK_ALLOC(handle,sizeof(MUnitInfo));
if ((uOption != BROWSER_LOADING) && (uOption != BROWSER_DRAWING))
{
uOption = BROWSER_SCANNING;
}
/*变量初始化*/
wMemLen = 0;
*wMoveLen = 0;
/*设置工作指针*/
if (pDes)
{
pUnitBuff = pDes;
}
else
{
pUnitBuff = pBuff;
}
p = pUnitBuff;
reScan:
type = ProcessRule(handle,pSur,uOption,pUnitInfo);
BrowserSetFontID(handle);
if (type == BROWSER_UNIT_SYMBOL)
{
pSur += pUnitInfo->uMemLen;
(*wMoveLen) += pUnitInfo->uMemLen;
goto reScan;
}
else if (type == BROWSER_UNIT_TRANSFER)
{
UINT8 code;
(*wMoveLen) += 4;
code = pUnitInfo->mResource.szString[0];
*pUnitBuff = code;
*(pUnitBuff + 1) = 0;
/*得到字符宽度*/
if(!FontGetCharInfo(FontGetLib(),code,&fontInfo,NULL))
{
*pUnitBuff = ' ';
FontGetCharInfo(FontGetLib(),' ',&fontInfo,NULL);
}
BROWSER_STACK_FREE(handle,sizeof(MUnitInfo));
BROWSER_STACK_FREE(handle,BROWSER_UNIT_MAXLEN);
return (UINT16)fontInfo.wFontWidth;
}
else if (type == BROWSER_UNIT_CONTROL)
{
if (pUnitInfo->mResource.uCtrlType == UNIT_CTRL_END)
{
BROWSER_STACK_FREE(handle,sizeof(MUnitInfo));
BROWSER_STACK_FREE(handle,BROWSER_UNIT_MAXLEN);
return 0;
}
else if (pUnitInfo->mResource.uCtrlType == UNIT_CTRL_RETURN)
{
*wMoveLen += pUnitInfo->uMemLen;
BROWSER_STACK_FREE(handle,sizeof(MUnitInfo));
BROWSER_STACK_FREE(handle,BROWSER_UNIT_MAXLEN);
return -1;
}
else
{
pSur += pUnitInfo->uMemLen;
(*wMoveLen) += pUnitInfo->uMemLen;
goto reScan;
}
}
else if (type == BROWSER_UNIT_STRING)
{
if (!BrowserUnitLegality(pSur))
{
/*unit分割符*/
*wMoveLen += 1;
*pUnitBuff = *pSur;
*(pUnitBuff + 1) = 0;
/*得到字符宽度*/
// if (!FontGetCharInfo(handle->pBrwInfo->wFontID,*pSur,&fontInfo,NULL) )
if (!FontGetCharInfo(FontGetLib(),*pSur,&fontInfo,NULL) )
{
*pUnitBuff = ' ';
/*得到字符宽度*/
FontGetCharInfo(FontGetLib(),' ',&fontInfo,NULL);
}
BROWSER_STACK_FREE(handle,sizeof(MUnitInfo));
BROWSER_STACK_FREE(handle,BROWSER_UNIT_MAXLEN);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -