CTSC23 公式编辑器Word下载.docx
- 文档编号:17311969
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:15
- 大小:21.08KB
CTSC23 公式编辑器Word下载.docx
《CTSC23 公式编辑器Word下载.docx》由会员分享,可在线阅读,更多相关《CTSC23 公式编辑器Word下载.docx(15页珍藏版)》请在冰豆网上搜索。
placeType=(pl_None,pl_Home,pl_End);
//不移动/移到编缉框开始位置/移到编缉框结束位置
hs:
array[eleChar..eleFraction]ofinteger=(0,1,1,2);
//不同表达式的初始行数
ws:
array[eleChar..eleFraction]ofinteger=(0,0,1,1);
//不同表达式的初始列数
moveSetPlace:
array[-1..1]ofplaceType=(pl_End,pl_None,pl_Home);
//向左(-1)/右
(1)移动到子编辑框的位置
ifEnd:
array[-1..1]ofinteger=(1,0,0);
//向左(-1)/右
(1)移动是否会到子编辑框的结束位置
canMin:
//编辑框的光标能向左移的最小位置
canvasType=object//所有非空字符输出队列
l:
integer;
//字符数
pos:
array[-1..maxChars,1..2]ofinteger;
//输出位置
chars:
array[0..maxChars]ofchar;
//输出字符,#0表示分数线
procedurePrintChar(y,x:
ch:
char);
//在第y行第x列输出一个字符ch
proceduresort(_From,_To:
integer);
//将字符按行列位置排序
procedureSave(fileName:
string);
//输出到文件
end;
eleType=class//表达式的基类
fParent:
eleType;
//父达式
fStyle:
eleStyle;
//表达式类型
h,w:
//h为行数,w为列数
array[1..2]ofinteger;
//若当前编辑焦点在这个表达式的子表达式中,则指向对应子表达式的位置
Width,Height,UpHeight,DownHeight:
//输出宽度,高度,对齐行上方的高度,对齐行下方的高度
constructorcreate(parent:
style:
eleStyle);
//构造类并初始化
functiongetS(y,x:
integer):
//取得y行x列的子表达式
proceduresetS(y,x:
Value:
eleType);
//设置y行x列的子表达式
proceduresetFocus(place:
placeType);
//设置编辑焦点
proceduremoveHome;
//光标移动到行首(虽然只可能在expType子类中调用此过程,但为了便于调用,将它放在基类中)
proceduremoveEnd;
//光标移动到行尾(虽然只可能在expType子类中调用此过程,但为了便于调用,将它放在基类中)
proceduremoveUpOrDown(incs:
//光标上移(incs=-1)或下移(incs=1)一行
proceduremoveLeftOrRight(incs:
//光标左移(incs=-1)或右移(incs=1)一行
procedureAddCol;
//添加一列
procedureAddRow;
//添加一行
procedureAddOne(ele:
//将一个表达式添加到光标位置(虽然只可能在expType子类中调用此过程,但为了便于调用,将它放在基类中)
proceduregetPrintMessage;
//得到输出的信息(应输出行数、列数等)
procedurePrint(HCenter,Left:
//将表达式输出到输出队列中
propertys[y,x:
integer]:
eleTypereadgetSwritesetS;
//子表达式。
这是一个属性,取值时相当于调用getS(y,x);
给它赋值时相当于调用setS(y,x,value),其中value为所赋的值
charType=class(eleType)//字符子类
Dat:
char;
//所存储的运算数或运算符
expType=class(eleType)//编辑框子类
fs:
array[1..1,1..500]ofeleType;
//编辑框内的子表达式
matrixType=class(eleType)//矩阵子类
array[1..10,1..10]ofeleType;
//矩阵中的子表达式
Heights,UpHeights,DownHeights,Widths:
array[1..10]ofinteger;
//输出时每行对应的高度、对齐行上方的高度、对齐行下方的高度及每列对应的最大宽度
fractionType=class(eleType)//分式子类
array[1..2,1..1]ofeleType;
//分式中的子表达式
var
root,//整个表达式
action:
//当前的焦点表达式
screen:
canvasType;
//输出队列
functionmax(a,b:
//求a,b的最大值
begin
ifa>
bthenmax:
=aelsemax:
=b;
procedurecanvasType.PrintChar(y,x:
ifch='
-'
theninc(x)else
ifch=#0thench:
='
inc(l);
pos[l,1]:
=y;
pos[l,2]:
=x;
chars[l]:
=ch;
procedurecanvasType.sort(_From,_To:
var
i,j:
i:
=_From;
j:
=_To;
pos[-1]:
=pos[(i+j)shr1];
whilei<
=jdo
while(pos[i,1]<
pos[-1,1])or(pos[i,1]=pos[-1,1])and(pos[i,2]<
pos[-1,2])doinc(i);
while(pos[j,1]>
pos[-1,1])or(pos[j,1]=pos[-1,1])and(pos[j,2]>
pos[-1,2])dodec(j);
ifi<
=jthen
pos[0]:
=pos[i];
pos[i]:
=pos[j];
pos[j]:
=pos[0];
chars[0]:
=chars[i];
chars[i]:
=chars[j];
chars[j]:
=chars[0];
inc(i);
dec(j);
ifj>
_Fromthensort(_From,j);
_Tothensort(i,_To);
procedurecanvasType.Save(fileName:
cur:
sort(1,l);
assign(output,fileName);
rewrite(output);
cur[1]:
=1;
cur[2]:
fori:
=1toldo
ifcur[1]<
>
pos[i,1]thencur[2]:
forj:
=cur[1]+1topos[i,1]do
writeln;
write(chars[i]:
pos[i,2]-cur[2]+1);
=pos[i,1];
=pos[i,2]+1;
close(output);
constructoreleType.create(parent:
=parent;
=style;
h:
=hs[style];
w:
=ws[style];
pos[1]:
pos[2]:
if(fStyle=eleMatrix)or(fStyle=eleFraction)then//如果是矩阵或分式,则一开始就应该有1或2个子编辑框
=1tohdo
s[i,1]:
=expType.create(self,eleExp);
functioneleType.getS(y,x:
casefStyleof//对不同的子类得到第y行第x列的子表达式
eleExp:
getS:
=expType(self).fs[y,x];
eleMatrix:
=matrixType(self).fs[y,x];
eleFraction:
=fractionType(self).fs[y,x];
elsegetS:
=nil;
procedureeleType.setS(y,x:
value:
casefStyleof//对不同的子类设置第y行第x列的子表达式
expType(self).fs[y,x]:
=value;
matrixType(self).fs[y,x]:
fractionType(self).fs[y,x]:
procedureeleType.setFocus(place:
=self;
caseplaceof//设置焦点时可顺便确定光标位置
pl_Home:
moveHome;
pl_End:
moveEnd;
procedureeleType.moveHome;
=0;
procedureeleType.moveEnd;
=w;
procedureeleType.moveUpOrDown(incs:
if(pos[1]+incs>
=1)and(pos[1]+incs<
=h)then//当前表达式可以上/下移动则移动
inc(pos[1],incs);
s[pos[1],pos[2]].setFocus(pl_Home);
end
else//当前表达式不可上/下移动则由上一级表达式移动
iffParent<
nilthen
fParent.moveUpOrDown(incs);
procedureeleType.moveLeftOrRight(incs:
procedureparentMove;
//使用上一级表达式移动
iffParent.fStyle=eleExpthen
ifincs=-1thendec(fParent.pos[2]);
incs:
fParent.moveLeftOrRight(incs);
p:
ifincs=0thensetFocus(pl_None)else
if(pos[2]+incs<
canMin[fStyle])or(pos[2]+incs>
w)thenparentMoveelse//如果当前表达式不能移动,则使用上一级表达式移动
casefStyleof
=max(pos[2],pos[2]+incs);
cases[pos[1],p].fStyleof//如果子表达式是矩阵或分式,则将光标移到子表达式中,否则直接改变光标位置
eleMatrix,eleFraction:
=p;
withs[pos[1],p]do
=(h+1)shr1;
=(1+ifEnd[incs]*(w-1));
s[pos[1],pos[2]].setFocus(moveSetPlace[incs]);
elseinc(pos[2],incs);
inc(pos[2],incs);
elseparentMove;
//分式要使用上一级表达式移动
procedureeleType.AddRow;
iffStyle=eleMatrixthen//如果当前是一个矩阵,则添加一行,否则看上一级表达式能否添加行
=hdowntopos[1]do
=1towdo
s[i+1,j]:
=s[i,j];
inc(h);
s[pos[1],j]:
else
nilthenfParent.AddRow;
procedureeleType.AddCol;
iffStyle=eleMatrixthen//如果当前是一个矩阵,则添加一列,否则看上一级表达式能否添加列
=wdowntopos[2]do
s[i,j+1]:
inc(w);
s[i,pos[2]]:
nilthenfParent.AddCol;
procedureeleType.AddOne(ele:
=wdowntopos[2]+1do
s[1,i+1]:
=s[1,i];
s[1,pos[2]+1]:
=ele;
moveLeftOrRight
(1);
procedureeleType.getPrintMessage;
Width:
UpHeight:
DownHeight:
eleChar:
ifcharType(self).Dat='
thenWidth:
=3elseWidth:
s[1,i].getPrintMessage;
inc(Width,s[1,i].Width);
=max(UpHeight,s[1,i].UpHeight);
=max(DownHeight,s[1,i].DownHeight);
withmatrixType(self)do
fillchar(UpHeights,sizeof(UpHeights),0);
fillchar(DownHeights,sizeof(DownHeights),0);
fillchar(Widths,sizeof(Widths),0);
s[i,j].getPrintMessage;
UpHeights[i]:
=max(UpHeights[i],s[i,j].UpHeight);
DownHeights[i]:
=max(DownHeights[i],s[i,j].DownHeight);
Widths[j]:
=max(Widths[j],s[i,j].Width);
Heights[i]:
=UpHeights[i]+DownHeights[i]+1;
inc(Width,Widths[i]+1);
inc(Width);
=1tohshr1do
inc(UpHeight,Heights[i]+1);
dec(UpHeight);
ifodd(h)then
inc(UpHeight,1+UpHeights[hshr1+1]);
=hdowntoh-hshr1+1do
inc(DownHeight,Heights[i]+1);
dec(DownHeight);
inc(DownHeight,1+DownHeights[hshr1+1]);
s[1,1].getPrintMessage;
s[2,1].getPrintMessage;
=s[1,1].Height;
=s[2,1].Height;
=max(s[1,1].Width,s[2,1].Width)+2;
Height:
=UpHeight+DownHeight+1;
procedureeleType.Print(HCenter,Left:
Top,L,i,j:
Screen.PrintChar(HCenter,Left,charType(self).Dat);
s[1,i].Print(HCenter,Left);
inc(Left,s[1,i].Width);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CTSC23 公式编辑器 公式 编辑器