📄 browser.c
字号:
{
/*缩进*/
if (pBrowserer->pBrwInfo->wStates & BROWSER_STATE_TAB)
{
if (wCurCol == 0)
{
if (pBrowserer->pBrwInfo->byTabGrade == 0)
{
wCurCol = BROWSER_TAB_LENGTH;
pBrowserer->pBrwInfo->byTabGrade = 1;
}
else
{
wCurCol = pBrowserer->pBrwInfo->wTabWidth;
}
}
}
/*累加列宽*/
wCurCol += wUnitWidth;
/*拨动指针*/
pData += wMoveLen;
}
}
calcEnd:
dwTotalLine = dwCurLine - (*line) + 1;
(*line) = dwCurLine;
(*col) = wCurCol;
//释放堆栈
BROWSER_STACK_FREE(handle, sizeof(MBrowserInfo));
BROWSER_STACK_FREE(handle,BROWSER_UNIT_MAXLEN);
return dwTotalLine;
}
/*过滤器*/
UINT BrowserFilter(MBrowser *handle, UINT8 *pString,UINT uOption)
{
MUnitInfo* pUnit;
UINT uTypt,ret;
UINT (*ProcessRule)(MBrowser*,UINT8*,UINT,MUnitInfo*);
if ((!uOption) || (handle->pBrwInfo->fpProcessRule == NULL))
return 0;
pUnit = BROWSER_STACK_ALLOC(handle, sizeof(MUnitInfo));
ProcessRule = handle->pBrwInfo->fpProcessRule;
ret = 0;
uTypt = ProcessRule(handle,pString,BROWSER_SCANNING,pUnit);
if (uTypt & uOption)
{
ret = pUnit->uMemLen;
}
BROWSER_STACK_FREE(handle,sizeof(MUnitInfo));
return ret;
}
/************************************************************************/
/* 函数名称: BrowserIsMarking */
/* 函数描述: 返回浏览器有无mark块 */
/* 当前版本: 1.0 */
/* 作 者: gaolinhui */
/* 输入参数: */
/* handle - 对象句柄 */
/* 输出参数: */
/* 返回值 : */
/* TRUE,FALSE */
/* 更改记录: */
/* =====================================================================*/
/* 日期 人员 版本 描述 */
/* =====================================================================*/
/* 2006-3-15 gaolinhui 1.0 创建 */
/************************************************************************/
BOOL BrowserIsMarking(MBrowser *handle)
{
if(handle->wReserved != BROWSER_INIT_SUCCESS)
return FALSE;
if(handle->pBrwInfo->wStates&BROWSER_STATE_MARKING)
{
return TRUE;
}
else
{
return FALSE;
}
}
/************************************************************************/
/* 函数名称: BrowserGetMarkPos */
/* 函数描述: 返回浏览器Mark起止位置 */
/* 当前版本: 1.0 */
/* 作 者: gaolinhui */
/* 输入参数: */
/* handle - 对象句柄 */
/* 输出参数: */
/* pStart - Mark头的位置 */
/* pEnd - Mark尾的位置 */
/* 返回值 : */
/* 无 */
/* 更改记录: */
/* =====================================================================*/
/* 日期 人员 版本 描述 */
/* =====================================================================*/
/* 2006-3-15 gaolinhui 1.0 创建 */
/************************************************************************/
BOOL BrowserGetMarkPos(MBrowser *handle,UINT8** pStart, UINT8** pEnd)
{
UINT8* pS, *pE;
if(handle->wReserved != BROWSER_INIT_SUCCESS)
return FALSE;
if(!(handle->pBrwInfo->wStates & BROWSER_STATE_MARKING))
{
*pStart = NULL;
*pEnd = NULL;
return FALSE;
}
if (handle->pBrwInfo->pMarkStart > handle->pBrwInfo->pMarkEnd)
{
pS = handle->pBrwInfo->pMarkEnd;
pE = handle->pBrwInfo->pMarkStart;
}
else
{
pS = handle->pBrwInfo->pMarkStart;
pE = handle->pBrwInfo->pMarkEnd;
}
pS = BrowserLocateMarkPosition(handle, pS, BROWSER_GO_FORWARD);
if (pS == NULL)
{
*pStart = NULL;
*pEnd = NULL;
return FALSE;
}
if (pS > pE)
{
*pStart = NULL;
*pEnd = NULL;
return FALSE;
}
*pStart = pS;
*pEnd = pE;
return TRUE;
}
/************************************************************************/
/* 函数名称: BrowserGetMarkData */
/* 函数描述: 得到MARK内容 */
/* 当前版本: 1.0 */
/* 作 者: gaolinhui */
/* 输入参数: */
/* handle - 对象句柄 */
/* 输出参数: */
/* pMarkData - 内容字符串 */
/* 返回值 : */
/* 内存长度 */
/* 更改记录: */
/* =====================================================================*/
/* 日期 人员 版本 描述 */
/* =====================================================================*/
/* 2006-3-1 gaolinhui 1.0 创建 */
/************************************************************************/
UINT32 BrowserGetMarkData(MBrowser *handle, UINT8* pMarkData,UINT32 dwLen)
{
UINT8 *pStart;
UINT32 dwMarkLen;
if(handle->wReserved != BROWSER_INIT_SUCCESS)
return 0;
dwMarkLen = BrowserGetMarkLength(handle);
if (dwMarkLen == 0)
{
return 0;
}
if (dwLen > dwMarkLen)
{
return 0;
}
if (handle->pBrwInfo->pMarkStart > handle->pBrwInfo->pMarkEnd)
{
pStart = handle->pBrwInfo->pMarkEnd;
}
else
{
pStart = handle->pBrwInfo->pMarkStart;
}
pStart = BrowserLocateMarkPosition(handle, pStart, BROWSER_GO_FORWARD);
if (pStart == NULL)
{
return 0;
}
memcpy(pMarkData, pStart, dwLen);
return dwLen;
}
/************************************************************************/
/* 函数名称: BrowserGetMarkLength */
/* 函数描述: 得到MARK内容长度 */
/* 当前版本: 1.0 */
/* 作 者: gaolinhui */
/* 输入参数: */
/* handle - 对象句柄 */
/* 输出参数: */
/* NONE */
/* 返回值 : */
/* 内存长度 */
/* 更改记录: */
/* =====================================================================*/
/* 日期 人员 版本 描述 */
/* =====================================================================*/
/* 2006-3-1 gaolinhui 1.0 创建 */
/************************************************************************/
UINT32 BrowserGetMarkLength(MBrowser *handle)
{
UINT32 dwMarkLen;
UINT8 *pStart,*pEnd;
if(handle->wReserved != BROWSER_INIT_SUCCESS)
return 0;
if (!(handle->pBrwInfo->wStates & BROWSER_STATE_MARKING))
{
return 0;
}
if (handle->pBrwInfo->pMarkStart > handle->pBrwInfo->pMarkEnd)
{
pStart = handle->pBrwInfo->pMarkEnd;
pEnd = handle->pBrwInfo->pMarkStart;
}
else
{
pStart = handle->pBrwInfo->pMarkStart;
pEnd = handle->pBrwInfo->pMarkEnd;
}
pStart = BrowserLocateMarkPosition(handle, pStart, BROWSER_GO_FORWARD);
if (pStart == NULL)
{
return 0;
}
if (pStart > pEnd)
{
return 0;
}
dwMarkLen = pEnd - pStart;
return dwMarkLen;
}
/************************************************************************/
/* 函数名称: BrowserSetMark */
/* 函数描述: 设置一个Mark */
/* 当前版本: 1.0 */
/* 作 者: gaolinhui */
/* 输入参数: */
/* handle - 对象句柄 */
/* pMarkStart - mark起始 */
/* pMarkEnd - mark结束 */
/* 输出参数: */
/* NONE */
/* 返回值 : */
/* mark成功或失败 */
/* 更改记录: */
/* =====================================================================*/
/* 日期 人员 版本 描述 */
/* =====================================================================*/
/* 2006-3-1 gaolinhui 1.0 创建 */
/************************************************************************/
BOOL BrowserSetMark(MBrowser* handle, UINT8* pMarkStart, UINT8* pMarkEnd)
{
BOOL bRet;
UINT8* pStart, *pEnd;
UINT16 wPageLines;
MLineInfo LineInfo;
UINT32 dwLine,dwTopLine;
UINT16 wCol;
BOOL flag;
if(handle->wReserved != BROWSER_INIT_SUCCESS)
return FALSE;
if(pMarkStart < pMarkEnd)
{
pStart = pMarkStart;
pEnd = pMarkEnd;
}
else
{
pStart = pMarkEnd;
pEnd = pMarkStart;
}
//搜索到mark起始点所在的行
bRet = BrowserPosToLineCol(handle, pStart, &dwLine,&wCol);
if(!bRet) //起始点超出了,返回失败
{
return FALSE;
}
dwTopLine = handle->pBrwInfo->dwTopLine;
wPageLines = BrowserPageLineSum(handle, dwTopLine);
if(!GetLineInfo(handle, dwTopLine, &LineInfo)) return FALSE;
flag = (pStart >= LineInfo.pLinePtr)?TRUE:FALSE;
if(!GetLineInfo(handle, dwTopLine+wPageLines, &LineInfo)) return FALSE;
if(flag && pEnd <= LineInfo.pLinePtr)
{
//如果Mark的起点和终点都在本页内
dwLine = dwTopLine;
}
else
{
wPageLines = BrowserPageLineSum(handle, dwLine);
if(!GetLineInfo(handle, dwLine+wPageLines, &LineInfo)) return FALSE;
flag = (pEnd >= LineInfo.pLinePtr)?TRUE:FALSE;
if(!GetLineInfo(handle,dwLine+wPageLines,&LineInfo)) return FALSE;
if( flag || LineInfo.pLinePtr == NULL)
{
//数据结尾超出了页面 或 超出了数据长度
return FALSE;
}
}
//mark位置有效,设置mark
handle->pBrwInfo->pMarkStart = pStart;
handle->pBrwInfo->pMarkEnd = pEnd;
handle->pBrwInfo->pMarkCur = pStart;
handle->pBrwInfo->wStates |= BROWSER_STATE_MARKING;
//设置顶行
if(dwLine != dwTopLine)
{
__BrowserSetTopLine(handle,dwLine,FALSE);
}
return TRUE;
}
UINT8* BrowserGetBuffer(MBrowser* handle)
{
if(handle->wReserved != BROWSER_INIT_SUCCESS) return NULL;
return handle->pBrwInfo->pBuffer;
}
BOOL GetLineInfo(MBrowser* handle,UINT32 dwLine, MLineInfo* pLineInfo)
{
#if defined(BORWSER_RECORD_EVERY)
if(handle->wReserved != BROWSER_INIT_SUCCESS)
return FALSE;
if(!pLineInfo)
{
return FALSE;
}
if(dwLine > handle->pBrwInfo->dwTotalLine)
{
return FALSE;
}
if(dwLine > handle->pBrwInfo->dwTotalLine)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -