bool CGraphmatFile::DealAsteriskBullet (size_t LB, size_t HB) { vector<CAsteriskHyp> Hyps; size_t LineNo = 0; size_t i; for (i = LB; i< HB; i++) { if (GetUnits()[i].IsEOLN()) LineNo++; // проверяем, является ли данная графема звездочкой if (!GetUnits()[i].IsAsterisk()) continue; // удостоверяемся, что данная графема не вошла в графематические группы if (GetUnits()[i].IsGrouped() || HasDescr(i,OBullet)) continue; size_t nh = BSpace(i-1); size_t nt = PSpace(i+1,HB); // перед перечислителя должен стоять конец строки if ((nh > 0) && !GetUnits()[nh].IsEOLN()) continue; // проверяем, стоит ли после перечислителя знак препинания, если // стоит, то это не пункт перечисления if (nt == HB) continue; if (HasDescr (nt,OPun)) continue; CAsteriskHyp A; A.LineNo = LineNo; A.UnitNo = i; Hyps.push_back(A); }; for (i=0; i<Hyps.size(); i++) if ( (i+1 == Hyps.size()) || (i == 0) || ( (i+1 < Hyps.size()) && (Hyps[i+1].LineNo < Hyps[i].LineNo + MaxBulletSectionSize) ) || ( (i > 0) && (Hyps[i-1].LineNo + MaxBulletSectionSize < Hyps[i].LineNo) ) ) { SetDes (Hyps[i].UnitNo,OBullet); if (!HasDescr (Hyps[i].UnitNo,OPar)) SetDes(Hyps[i].UnitNo,OPar); }; return true; }
// пункты перечисления типа (1) или [1] int CGraphmatFile::DealBulletsWithTwoBrackets (size_t StartPos, size_t EndPos) { size_t i = StartPos; if ( !HasDescr(i, OOpn) ) return false; if ( HasDescr(i, OBullet) ) return false; size_t nt = PSpace(i+1, EndPos); if (nt == EndPos) return false; // проверяем, является ли данная графема перечислителем if (!IsBulletWord(nt) ) return false; size_t BulletWordNo = nt; // удостоверяемся, что данная графема не вошла в графематические группы size_t nh = (i>0) ? BSpace(i-1) : 0; // перед перечислителем должен стоять конец строки if ( !GetUnits()[nh].IsEOLN() && (nh > 0)) return false; if (nt + 1 >= EndPos) return false; nt = PSpace(nt+1,EndPos); // после перечислителя должно стоять либо закрывающая скобка, либо точка if (nt == EndPos) return false; if ( !HasDescr(nt, OCls) ) return false; if (HasGrouped(StartPos,nt+1)) return false; SetDes (StartPos, OBullet); if (!HasDescr (StartPos, OPar)) SetDes(StartPos, OPar); SetState(StartPos,nt+1,stGrouped); return true; };
int CGraphmatFile::DealFloatNumbers (size_t StartPos, size_t EndPos) { if ( !HasDescr(StartPos, ODg) ) return 0; // проверим, вдруг это перечислитель if (StartPos == 0) return false; size_t nh = BSpace (StartPos - 1, 0); if (nh == 0 ) return false; if (GetUnits()[nh].IsEOLN()) return false; size_t nt = StartPos+1; if (nt == EndPos) return false; if ( !IsOneFullStop(nt)) return false; nt++; if (nt == EndPos) return false; if ( !HasDescr(nt, ODg) ) return false; SetDes (StartPos, OFloat1); SetDes (nt, OFloat2); SetState(StartPos,nt+1,stGrouped); return true; };
EDDocOpenDlg::EDDocOpenDlg(IString* dN, IWindow* parent, IProfile *p) : IFrameWindow( 0,0,parent, IFrameWindow::nextShellRect().scaleBy(0.6, 0.5), IFrameWindow::classDefaultStyle & ~IFrameWindow::maximizeButton & ~IFrameWindow::minimizeButton | IFrameWindow::dialogBackground, "�ffnen"), DocOpenClient(0, this, this), DocOpenCnr (0, &DocOpenClient, &DocOpenClient) { profile = p; docName = dN; *docName = ""; /* Erstelle Dateiauswahl-Container */ IContainerColumn* pcolumn; pcolumn = new IContainerColumn(IContainerColumn::isIconViewText); pcolumn->setHeadingText("Name"); pcolumn->showSeparators(IContainerColumn::horizontalSeparator); DocOpenCnr.addColumn(pcolumn); DocOpenCnr.setDetailsViewSplit(pcolumn, 100); pcolumn = new IContainerColumn(DocCnrObj::statusOffset()); pcolumn->setHeadingText("Status"); pcolumn->showSeparators(); DocOpenCnr.addColumn(pcolumn); pcolumn = new IContainerColumn(DocCnrObj::filepathOffset()); pcolumn->setHeadingText("Dateipfad"); pcolumn->showSeparators(IContainerColumn::horizontalSeparator); DocOpenCnr.addColumn(pcolumn); DocOpenCnr .setSingleSelection() .setDeleteColumnsOnClose() .setDeleteObjectsOnClose() .showSplitBar() .showTitleSeparator() .showDetailsView() .enableTabStop(); /* Erstelle Buttons */ ISetCanvas BSpace(0x800C, &DocOpenClient, &DocOpenClient); IPushButton BOk(DID_OK, &BSpace, &BSpace); IPushButton BCancel(DID_CANCEL, &BSpace, &BSpace); IPushButton BNew(IDD_DOCNEW, &BSpace, &BSpace); IPushButton BDelete(IDD_DOCDEL, &BSpace, &BSpace); BOk.enableDefault() .setText( "~OK" ) .enableTabStop() .enableGroup(); BCancel .setText( "A~bbruch" ) .enableTabStop(); BNew .setText("~Neu") .enableTabStop(); BDelete .setText("~L�schen") .enableTabStop(); BSpace .setMargin( ISize() ) .setPackType( ISetCanvas::expanded ); /* Baue Fenster auf */ ISize defaultCell = IMultiCellCanvas::defaultCell(); DocOpenClient .addToCell(&DocOpenCnr, 2, 2, 3) .addToCell(&BSpace, 2, 4); DocOpenClient .setColumnWidth(1, MARGIN) .setColumnWidth(4, MARGIN) .setColumnWidth(3, defaultCell.width(), true) .setRowHeight (1, MARGIN) .setRowHeight (2, defaultCell.height(), true) .setRowHeight (3, MARGIN) .setRowHeight (5, MARGIN); /* Text-Eintr�ge aus Profile einlesen */ /* Profile-Cursor, um Text-Eintr�ge auszulesen */ IProfile::Cursor cursor(*profile); for (cursor.setToFirst(); cursor.isValid(); cursor.setToNext() ) { IString strDocName = profile->applicationOrKeyAt(cursor); DocCnrObj *docObj = new DocCnrObj(strDocName, *profile); DocOpenCnr.addObject(docObj); } /* endfor */ DocOpenCnr.sortByIconText(); /* Fenster anzeigen und abfragen */ IFrameHandler::handleEventsFor(this); setClient(&DocOpenClient); setFocus(); showModally(); }
// пункты перечисления bool CGraphmatFile::DealBullet (size_t i, size_t HB) { if (i == 0) return false; if (i >= HB ) return false; // проверяем, является ли данная графема перечислителем if (!IsBulletWord (i)) return false; if (HasDescr(i,OBullet)) return false; size_t nt = PSpace(i+1,HB); size_t nh = BSpace(i-1); // перед перечислителя должен стоять конец строки if ((nh > 0) && !GetUnits()[nh].IsEOLN()) return false; // удостоверяемся, что данная графема не вошла в графематические группы. if (GetUnits()[nh].IsGrouped()) return false; // после перечислителя должно стоять либо закрывающая скобка, либо точка if (nt == HB) return false; if (!HasDescr(nt,OCls) && !IsOneFullStop(nt)) return false; // проверяем, относится ли закрывающая скобка к пункту перечисления, // или спереди есть открывающая скобка, в таком случае, это не пункт перечисления size_t TempLowBorder = 0; if (i > 100) TempLowBorder = i-100; if (HasDescr(nt,OCls)) for (size_t k=i; k > TempLowBorder; k--) if (HasDescr (k,OCls)) // встретилась другая закрывающая скобка break; else if (HasDescr (k,OOpn)) // встретилась открывающая скобка return false; // проверяем, стоит ли после перечислителя знак препинания, если // стоит, то это не пункт перечисления nt++; if (nt == HB) return false; nt = PSpace(nt,HB); if (nt == HB) return false; if (HasDescr (nt,OPun)) return false; if (IsBulletWord (nt)) SetState(i,nt+1,stGrouped); SetDes (i,OBullet); if (!HasDescr (i,OPar)) SetDes(i,OPar); return true; }