📄 sample
字号:
{ target=source->next; j--; } for(j=0;j<CODE_QUANTUM;j++) target->data[(lines+shift-1)%CODE_QSET][j]=source->data[lines-1][j]; lines--; } source=source->prev; pages--; } if(source==pg) { i=rows-(pages-1)*CODE_QSET; lines=i-line-1; while(lines>0) { j=(int)( (i-1+shift)/CODE_QSET ); target=source; while(j>0) { target=source->next; j--; } for(j=0;j<CODE_QUANTUM;j++) target->data[(i-1+shift)%CODE_QSET][j]=source->data[i-1][j]; lines--; i--; }// for(i=0;i<shift;i++)// for(j=0;j<CODE_QUANTUM;j++)// source->data[line+i+1][j]='\0'; }}void CodeArea::CopyLine(chtype *source,int begin,int len,int clearup){ int i=0; int line=currow%CODE_QSET; chtype *target=NULL; if(source==NULL) source=LocatePage(NULL,currow)->data[line]; if(line+1>=CODE_QSET) target=LocatePage(NULL,currow)->next->data[(line+1)%CODE_QSET]; else target=LocatePage(NULL,currow)->data[(line+1)%CODE_QSET]; if(begin>=CODE_QUANTUM) goto err; if(begin+len>=CODE_QUANTUM) goto err; if(target==NULL || source==NULL) goto err; for(i=0;i<CODE_QUANTUM;i++) { if(i<len) { target[i]=source[begin+i]; if(clearup==TRUE) source[begin+i]='\0'; } else target[i]='\0'; }err: return; }int CodeArea::ReadFile(char *filename){ int ret=0; int i=0; int size=0; PageList dptr=pagelist; PageList newp=NULL; load_file file(filename); if (file.success != ZC_OK) { ret=-1; goto over; } while(i<CODE_QSET && (size=file.getline(dptr->data[i]))) { linecolor(dptr->data[i]); if(dptr==pagelist && i==0) //get col width of the first line totalcol=size; i++; if(i==CODE_QSET) { newp=AllocPage(); InsertPage(dptr,newp); dptr=newp; i=0; } totalrow++; maxcol=(size>maxcol)?(size):(maxcol); } curpage=0; totalrow--; //in order to process untitled file ShowPage(pagelist,0,GetHeight(),0,GetWidth(),0,0); wmove(basewin,0,0);over: return ret;}PageList CodeArea::LocatePage(PageList page,int row){ int pg=(int)(row/CODE_QSET); if(page==NULL) page=beginpage; while(pg>curpage) { page=page->next; pg--; } return page; }int CodeArea::GetCurColWidth(PageList page,int line){ int j=0; page=LocatePage(page,line); line=line % CODE_QSET; while(page->data[line][j]!='\0') { if(page->data[line][j]=='\t') j=j+TABSIZE; else j=j+1; } return (j<CODE_QUANTUM)?(j):(CODE_QUANTUM-1);}void CodeArea::linecolor(chtype *line){ int i, k,pos=0; int wordbegin,wordend; int color=GetColor(); char a[MAXIDLEN + 1]; char ch=line[pos]; char prech;again: wordbegin=0; wordend=0; while(ch==' ' && pos+1<CODE_QUANTUM) { line[pos]=line[pos]|COLOR_PAIR(GetColor()); pos++; ch=line[pos]; } if(pos+1>=CODE_QUANTUM || ch=='\0') goto over; if (multiremark) { if(ch=='*') { line[pos]=line[pos]|COLOR_PAIR(COLOR_GREEN_BLUE); GETCH(pos); if(ch=='/') { line[pos]=line[pos]|COLOR_PAIR(COLOR_GREEN_BLUE); multiremark=FALSE; GETCH(pos); } } else { line[pos]=line[pos]|COLOR_PAIR(COLOR_GREEN_BLUE); GETCH(pos); } } else if( isalpha(ch) ) { k=0; wordbegin=pos; do { if(k < MAXIDLEN) a[k++]=ch; GETCH(pos); }while( isalpha(ch) || isdigit(ch)|| ch=='_' ); wordend=pos; a[k]=0; keyword[0]=a; i=NRW; while(strcmp(a,keyword[i--])); if(++i) { color=COLOR_YELLOW_BLUE; } //key word else { color=GetColor(); } //identifier while(wordbegin<wordend) { line[wordbegin]=line[wordbegin]|COLOR_PAIR(color); wordbegin++; } } else if ( isdigit(ch) ) { wordbegin=pos; color=COLOR_CYAN_BLUE; do { GETCH(pos); }while(isdigit(ch)); if(ch=='.') { do { GETCH(pos); }while(isdigit(ch)); } else if(ch=='x') { if (wordbegin+1!=pos || line[wordbegin]!='0') {//error such as 012x123456 or 1x123456 color=COLOR_CYAN_RED; } do { GETCH(pos); }while(isdigit(ch) || ((ch>='a')&&(ch<='f')) || ((ch>='A')&&(ch<='F')) ); } wordend=pos; while(wordbegin<wordend) { line[wordbegin]=line[wordbegin]|COLOR_PAIR(color)|A_UNDERLINE; ; wordbegin++; } } else if(ch=='"') { wordbegin=pos; color=COLOR_CYAN_BLUE; do { line[pos]=line[pos]|COLOR_PAIR(color); GETCH(pos); }while(ch!='"' && ch!='\0'); if(ch=='"') { line[pos]=line[pos]|COLOR_PAIR(color); GETCH(pos); } else if(ch=='\0') { //missed a ",corrected it //line[pos]='"'|COLOR_PAIR(color); //line[pos+1]='\0'; char word; color=COLOR_CYAN_RED; wordend=pos; while(wordbegin<wordend) { word=line[wordbegin]; line[wordbegin]=word|COLOR_PAIR(color); wordbegin++; } } } else if(ch=='/') { wordbegin=pos; GETCH(pos); if(ch=='/') { pos=wordbegin; do { line[pos]=line[pos]|COLOR_PAIR(COLOR_GREEN_BLUE); GETCH(pos); }while(ch!='\0'); } else if(ch=='*') { multiremark=TRUE; line[pos-1]=line[pos-1]|COLOR_PAIR(COLOR_GREEN_BLUE); line[pos]=line[pos]|COLOR_PAIR(COLOR_GREEN_BLUE); GETCH(pos); } else { line[pos-1]=line[pos-1]|COLOR_PAIR(COLOR_MAGENTA_BLUE); pos--; GETCH(pos); } } else if(ch=='\'') { wordbegin=pos; color=COLOR_CYAN_BLUE; do { prech=ch; line[pos]=line[pos]|COLOR_PAIR(color); GETCH(pos); }while((ch=='\'' && prech=='\\') || (ch!='\'' && ch!='\0')); if(ch=='\'') { line[pos]=line[pos]|COLOR_PAIR(color); GETCH(pos); } else if(ch=='\0') { char word; color=COLOR_CYAN_RED; wordend=pos; while(wordbegin<wordend) { word=line[wordbegin]; line[wordbegin]=word|COLOR_PAIR(color); wordbegin++; } } } else { line[pos]=line[pos]|COLOR_PAIR(COLOR_MAGENTA_BLUE); GETCH(pos); } goto again;over: return;}07-29
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -