/* * This file is part of * ================================================== * * LyX, The Document Processor * * Copyright (C) 1995 Matthias Ettrich * Copyright (C) 1995-1998 The LyX Team. * * ==================================================
*/
/* This file contains all the menu and submenu declarations.
The call backs are in lyx_cb.C */
/* * REMEMBER: * XFORMS can handle 10 (more with the new xforms, but not unlimited) * popups at the same time * so when you are finished looking at a pup free it (fl_freepup)
*/
void Menus::openByName(LString const &menuName) /* Opens the visible menu of given name, or simply does nothing when the name is not known. NOTE THE EXTREMELY STUPID IMPLEMENTATION! :-) There are probably hundred ways to do this better, for instance, by scanning the menu objects and testing for the given name. I leave this as an exercise for an
experienced GG (GUI Guy/Girl). RVDK_PATCH_5. */
{ if (menu_file->visible) { if (menuName == _("File")) ShowFileMenu(menu_file, 0); elseif (menuName == _("Edit")) ShowEditMenu(menu_edit, 0); elseif (menuName == _("Layout")) ShowLayoutMenu(menu_layout, 0); elseif (menuName == _("Insert")) ShowInsertMenu(menu_insert, 0); elseif (menuName == _("Math")) ShowMathMenu(menu_math, 0); elseif (menuName == _("Options")) ShowOptionsMenu(menu_options, 0); elseif (menuName == _("Documents")) ShowBufferMenu(menu_buffer, 0); elseif (menuName == _("Help")) ShowHelpMenu(menu_help, 0); else lyxerr.print("The menu '" + menuName + "' is not available.");
} else { if (menuName == _("File")) ShowFileMenu2(menu_file2, 0); elseif (menuName == _("Options")) ShowOptionsMenu(menu_options2, 0); elseif (menuName == _("Help")) ShowHelpMenu(menu_help2, 0); else lyxerr.print("The menu '" + menuName + "' is not available.");
}
}
// Set the menu buttons atrributes. // Due to a bug in xforms we cant do this only an the group.
obj = menu_grp1->next; do {
fl_set_object_boxtype(obj, FL_FLAT_BOX);
fl_set_object_color(obj,FL_MCOL, FL_MCOL);
fl_set_object_lsize(obj,MENU_LABEL_SIZE);
fl_set_object_lstyle(obj,FL_BOLD_STYLE);
fl_set_object_resize(obj, FL_RESIZE_ALL);
fl_set_object_gravity(obj, NorthWestGravity, NorthWestGravity);
obj=obj->next;
} while (obj != 0 && obj->objclass != FL_END_GROUP);
// group 2
moffset = 0;
menu_grp2 = fl_bgn_group();
// Set the menu buttons atrributes. // Due to a bug in xforms we cant do this only an the group.
obj = menu_grp2->next; do {
fl_set_object_boxtype(obj, FL_FLAT_BOX);
fl_set_object_color(obj,FL_MCOL, FL_MCOL);
fl_set_object_lsize(obj,MENU_LABEL_SIZE);
fl_set_object_lstyle(obj,FL_BOLD_STYLE);
fl_set_object_resize(obj, FL_RESIZE_ALL);
fl_set_object_gravity(obj, NorthWestGravity, NorthWestGravity);
obj=obj->next;
} while (obj != 0 && obj->objclass != FL_END_GROUP);
}
void Menus::ScreenOptions()
{ // this is not very nice....
fl_set_input(fd_form_screen->input_roman,
lyxrc->roman_font_name.c_str());
fl_set_input(fd_form_screen->input_sans,
lyxrc->sans_font_name.c_str());
fl_set_input(fd_form_screen->input_typewriter,
lyxrc->typewriter_font_name.c_str());
fl_set_input(fd_form_screen->input_font_norm,
lyxrc->font_norm.c_str()); char tmpstring[10];
sprintf(tmpstring,"%d", lyxrc->zoom);
fl_set_input(fd_form_screen->intinput_size, tmpstring); if (fd_form_screen->form_screen->visible) {
fl_raise_form(fd_form_screen->form_screen);
} else {
fl_show_form(fd_form_screen->form_screen,
FL_PLACE_MOUSE | FL_FREE_SIZE, FL_FULLBORDER,
_("Screen Options"));
}
}
// Regarding the pseudo-menu-button: // ok, ok this is a hack. It would be better to use the menus of the // xforms 0.8 library. but then all popups have to be defined all the // time, code rewriting would be necessary and contex-depending menus // (i.e. the linux-doc-sgml stuff) are a bit more complicated. But of // course it would be more proper (and little faster). So if anybody // likes to do the cleanup, just do it. Matthias
// set the pseudo menu-button
fl_set_object_boxtype(ob, FL_UP_BOX);
fl_set_button(ob, 0);
fl_redraw_object(ob);
int SubFileImport =fl_defpup(FL_ObjWin(ob),
_("Import%t" "|LaTeX...%x30" "|Ascii Text as Lines...%x31" "|Ascii Text as Paragraphs%x32"));
fl_setpup_shortcut(SubFileImport, 30, scex(_("FIM|Ll#l#L")));
fl_setpup_shortcut(SubFileImport, 31, scex(_("FIM|Aa#a#A")));
fl_setpup_shortcut(SubFileImport, 32, scex(_("FIM|Pp#p#P")));
// These commands are disabled when the corresponding programs // are not installed. I simply grey them out, since I do not // want to change their number (JMarc) bool hasLaTeX = lyxrc->latex_command != "none";
if (!hasLaTeX || lyxrc->view_dvi_command == "none")
fl_setpup_mode(FileMenu, 8, FL_PUP_GREY);
if (!hasLaTeX || lyxrc->view_ps_command == "none")
fl_setpup_mode(FileMenu, 9, FL_PUP_GREY);
if (!hasLaTeX) {
fl_setpup_mode(FileMenu, 10, FL_PUP_GREY);
fl_setpup_mode(FileMenu, 11, FL_PUP_GREY);
}
if (!hasLaTeX || lyxrc->print_command == "none")
fl_setpup_mode(FileMenu, 12, FL_PUP_GREY);
if (!hasLaTeX || lyxrc->fax_command == "none")
fl_setpup_mode(FileMenu, 13, FL_PUP_GREY);
// make the lastfiles menu
LastFiles_Iter liter(*lastfiles); // :-)
LString filname; int ii = 1; while( ii < 10 && !(filname = liter()).empty() ) {
LString tmp;
LString tmp2;
LString relbuf = MakeDisplayPath(filname,30);
tmp += ii;
tmp2 = tmp;
tmp += ". " + relbuf;
tmp2 += LString('#') + ii;
fl_addtopup(FileMenu, tmp.c_str());
fl_setpup_shortcut(FileMenu, 17 - 1 + ii, tmp2.c_str());
ii++;
}
// place popup
fl_setpup_position(
men->_view->getForm()->x + ob->x,
men->_view->getForm()->y + ob->y + ob->h + 10); int choice = fl_dopup(FileMenu);
XFlush(fl_display);
// set the pseudo menu-button back
fl_set_object_boxtype(ob, FL_FLAT_BOX);
fl_redraw_object(ob);
switch (choice) { case -1: case 0: // we won't do anything break; case 1: tmpfunc->Dispatch(LFUN_MENUNEW); break; case 2: tmpfunc->Dispatch(LFUN_MENUNEWTMPLT); break; case 3: tmpfunc->Dispatch(LFUN_MENUOPEN); break; case 4: tmpfunc->Dispatch(LFUN_CLOSEBUFFER); break; case 5: tmpfunc->Dispatch(LFUN_MENUWRITE); break; case 6: tmpfunc->Dispatch(LFUN_MENUWRITEAS); break; case 7: tmpfunc->Dispatch(LFUN_MENURELOAD); break; case 8: tmpfunc->Dispatch(LFUN_PREVIEW); break; case 9: tmpfunc->Dispatch(LFUN_PREVIEWPS); break; case 10: tmpfunc->Dispatch(LFUN_RUNLATEX); break; case 11: tmpfunc->Dispatch(LFUN_RUNDVIPS); break; case 12: tmpfunc->Dispatch(LFUN_MENUPRINT); break; case 13: tmpfunc->Dispatch(LFUN_FAX); break; case 14: // import menu case 30: tmpfunc->Dispatch(LFUN_IMPORT, "latex"); break; case 31: tmpfunc->Dispatch(LFUN_IMPORT, "ascii"); break; case 32: tmpfunc->Dispatch(LFUN_IMPORT, "asciiparagraph"); break; case 15: // export menu case 40: if (!LinuxDoc)
tmpfunc->Dispatch(LFUN_EXPORT, "latex"); else
tmpfunc->Dispatch(LFUN_EXPORT, "linuxdoc"); break; case 41: tmpfunc->Dispatch(LFUN_EXPORT, "dvi"); break; case 42: tmpfunc->Dispatch(LFUN_EXPORT, "postscript"); break; case 43: tmpfunc->Dispatch(LFUN_EXPORT, "ascii"); break; case 44: tmpfunc->Dispatch(LFUN_EXPORT, "custom"); break; case 16: tmpfunc->Dispatch(LFUN_QUIT); break; // Lastfiles: case 17: // The first item with lastfiles. default:
men->currentView()->setBuffer(bufferlist.loadLyXFile(liter[choice-17])); // ok one more break;
}
fl_freepup(SubFileImport);
fl_freepup(SubFileExport);
fl_freepup(FileMenu);
// Regarding the pseudo-menu-button: // ok, ok this is a hack. It would be better to use the menus of the // xforms 0.8 library. but then all popups have to be defined all the // time, code rewriting would be necessary and contex-depending menus // (i.e. the linux-doc-sgml stuff) are a bit more complicated. But of // course it would be more proper (and little faster). So if anybody // likes to do the cleanup, just do it. Matthias
// set the pseudo menu-button
fl_set_object_boxtype(ob, FL_UP_BOX);
fl_set_button(ob, 0);
fl_redraw_object(ob);
LyXFunc *tmpfunc = men->_view->getLyXFunc();
// Import sub-menu
int SubFileImport = fl_defpup(FL_ObjWin(ob),
_("Import%t" "|LaTeX...%x15" "|Ascii Text as Lines...%x16" "|Ascii Text as Paragraphs...%x17"));
fl_setpup_shortcut(SubFileImport, 15, scex(_("FIM|Ll#l#L")));
fl_setpup_shortcut(SubFileImport, 16, scex(_("FIM|Aa#a#A")));
fl_setpup_shortcut(SubFileImport, 17, scex(_("FIM|Pp#p#P")));
// This can be done cleaner later. int FileMenu = fl_defpup(FL_ObjWin(ob),
_("New..." "|New from template..." "|Open...%l" "|Import%m%l" "|Exit%l"), SubFileImport);
fl_setpup_shortcut(FileMenu, 1, scex(_("FM|Nn#n#N")));
fl_setpup_shortcut(FileMenu, 2, scex(_("FM|tT#t#T")));
fl_setpup_shortcut(FileMenu, 3, scex(_("FM|Oo#o#O")));
fl_setpup_shortcut(FileMenu, 4, scex(_("FM|Ii#i#I")));
fl_setpup_shortcut(FileMenu, 5, scex(_("FM|xX#x#X")));
// make the lastfiles menu
LastFiles_Iter liter(*lastfiles); // :-)
LString filname; int ii = 1; while( ii < 10 && !(filname = liter()).empty() ) {
LString tmp;
LString tmp2;
LString relbuf = MakeDisplayPath(filname,30);
tmp += ii;
tmp2 = tmp;
tmp += ". " + relbuf;
tmp2 += LString('#') + ii;
fl_addtopup(FileMenu, tmp.c_str());
fl_setpup_shortcut(FileMenu, 6 - 1 + ii, tmp2.c_str());
ii++;
}
// place popup
fl_setpup_position(
men->_view->getForm()->x + ob->x,
men->_view->getForm()->y + ob->y + ob->h + 10); int choice = fl_dopup(FileMenu);
XFlush(fl_display);
// set the pseudo menu-button back
fl_set_object_boxtype(ob, FL_FLAT_BOX);
fl_redraw_object(ob);
switch (choice) { case -1: case 0: // we won't do anything break; case 1:
tmpfunc->Dispatch(LFUN_MENUNEW); break; case 2:
tmpfunc->Dispatch(LFUN_MENUNEWTMPLT); break; case 3:
tmpfunc->Dispatch(LFUN_MENUOPEN); break; case 4: // import menu case 15: tmpfunc->Dispatch(LFUN_IMPORT, "latex"); break; case 16: tmpfunc->Dispatch(LFUN_IMPORT, "ascii"); break; case 17: tmpfunc->Dispatch(LFUN_IMPORT, "asciiparagraph"); break; case 5:
tmpfunc->Dispatch(LFUN_QUIT); break; // Lastfiles: default:
men->currentView()->setBuffer(bufferlist.loadLyXFile(liter[choice-6])); break;
}
int SubVersionControl = fl_newpup(FL_ObjWin(ob));
fl_addtopup(SubVersionControl, _("Version Control%t")); if (tmpbuffer->lyxvc.inUse()) {
fl_addtopup(SubVersionControl, _("|Register%d%x51")); if (tmpbuffer->isReadonly()) { // signifies that the file is not checked out
fl_addtopup(SubVersionControl,
_("|Check In Changes%d%x52"));
fl_addtopup(SubVersionControl,
_("|Check Out for Edit%x53"));
} else { // signifies that the file is checked out
fl_addtopup(SubVersionControl,
_("|Check In Changes%x52"));
fl_addtopup(SubVersionControl,
_("|Check Out for Edit%d%x53"));
}
fl_addtopup(SubVersionControl,
_("|Revert to last version%x54"));
fl_addtopup(SubVersionControl, _("|Undo last check in%x55"));
fl_addtopup(SubVersionControl, _("|Show History%x56"));
} else {
fl_addtopup(SubVersionControl, _("|Register%x51"));
} // the shortcuts are not good.
fl_setpup_shortcut(SubVersionControl, 51, scex(_("EMV|Rr#r#R")));
fl_setpup_shortcut(SubVersionControl, 52, scex(_("EMV|Ii#i#I")));
fl_setpup_shortcut(SubVersionControl, 53, scex(_("EMV|Oo#o#O")));
fl_setpup_shortcut(SubVersionControl, 54, scex(_("EMV|lL#l#l")));
fl_setpup_shortcut(SubVersionControl, 55, scex(_("EMV|Uu#u#U")));
fl_setpup_shortcut(SubVersionControl, 56, scex(_("EMV|Hh#h#H")));
int EditMenu=fl_defpup(FL_ObjWin(ob),
_("Undo" "|Redo %l" "|Cut" "|Copy" "|Paste%l" "|Find & Replace..." "|Go to Error" "|Go to Note" "|Floats & Insets%m" "|Table%m" "|Spellchecker...." "|Check TeX" "|Table of Contents...%l" "|Version Control%m%l" "|View LaTeX log file%l" "|Paste Primary Selection as Lines" "|Paste Primary Selection as Paragraphs"),
SubEditFloats, SubEditTable, SubVersionControl);
// set the pseudo menu-button back
fl_set_object_boxtype(ob, FL_FLAT_BOX);
fl_redraw_object(ob);
switch (choice) { case 1: tmpfunc->Dispatch(LFUN_UNDO); break; case 2: tmpfunc->Dispatch(LFUN_REDO); break; case 3: tmpfunc->Dispatch(LFUN_CUT); break; case 4: tmpfunc->Dispatch(LFUN_COPY); break; case 5: tmpfunc->Dispatch(LFUN_PASTE); break; case 6: tmpfunc->Dispatch(LFUN_MENUSEARCH); break; case 7: tmpfunc->Dispatch(LFUN_GOTOERROR); break; case 8: tmpfunc->Dispatch(LFUN_GOTONOTE); break; case 9: // floats & insets break; case 10:// table break; case 11: tmpfunc->Dispatch(LFUN_SPELLCHECK); break; case 12: tmpfunc->Dispatch(LFUN_RUNCHKTEX); break; case 13: tmpfunc->Dispatch(LFUN_TOCVIEW); break; case 14: // version control break; case 15: tmpfunc->Dispatch(LFUN_LATEX_LOG); break; case 16: tmpfunc->Dispatch(LFUN_PASTESELECTION, "line"); break; case 17: tmpfunc->Dispatch(LFUN_PASTESELECTION, "paragraph"); break;
// floats & insets sub-menu case 21: ToggleFloat(); break; case 22: tmpfunc->Dispatch(LFUN_MELT); break; case 23: AllFloats(1, 0); break; case 24: AllFloats(0, 0); break; case 25: AllFloats(1, 1); break; case 26: AllFloats(0, 1); break; case 27: tmpfunc->Dispatch(LFUN_REMOVEERRORS); break;
case 31: tmpfunc->Dispatch(LFUN_TABLE); break; // this is really temporary. We need new function in keybind.C // These should set the minibuffer, too. case 32: case 33: case 34: case 35: case 36: case 37: case 38: case 39: case 40: case 41: case 42: case 43: case 44: if (men->currentView()->available()){
men->currentView()->getScreen()->HideCursor(); if (!tmpbuffer->text->selection){
BeforeChange();
tmpbuffer->update(-2);
}
tmpbuffer->text->
TableFeatures(choice - 32);
tmpbuffer->update(1);
} break; // version control sub-menu case 51: // register
tmpfunc->Dispatch(LFUN_VC_REGISTER); break; case 52: // check in
tmpfunc->Dispatch(LFUN_VC_CHECKIN); break; case 53: // check out
tmpfunc->Dispatch(LFUN_VC_CHECKOUT); break; case 54: // revert to last
tmpfunc->Dispatch(LFUN_VC_REVERT); break; case 55: // undo last
tmpfunc->Dispatch(LFUN_VC_UNDO); break; case 56: // show history
tmpfunc->Dispatch(LFUN_VC_HISTORY); break;
}
// Set values of checkboxes according to font
LyXFont font = tmpbuffer->text->real_current_font; if (font.emph() == LyXFont::ON)
fl_setpup_mode(LayoutMenu, 7, FL_PUP_CHECK); if (font.noun() == LyXFont::ON)
fl_setpup_mode(LayoutMenu, 8, FL_PUP_CHECK); if (font.series() == LyXFont::BOLD_SERIES)
fl_setpup_mode(LayoutMenu, 9, FL_PUP_CHECK); if (font.latex() == LyXFont::ON)
fl_setpup_mode(LayoutMenu, 10, FL_PUP_CHECK);
// Grey out unavailable entries if (!tmpbuffer->text->cursor.par->table)
fl_setpup_mode(LayoutMenu, 5, FL_PUP_GREY);
// set the pseudo menu-button back
fl_set_object_boxtype(ob, FL_FLAT_BOX);
fl_redraw_object(ob);
switch (choice) { case 1: tmpfunc->Dispatch(LFUN_LAYOUT_CHARACTER); break; case 2: tmpfunc->Dispatch(LFUN_LAYOUT_PARAGRAPH); break; case 3: tmpfunc->Dispatch(LFUN_LAYOUT_DOCUMENT); break; case 4: tmpfunc->Dispatch(LFUN_LAYOUT_PAPER); break; case 5: tmpfunc->Dispatch(LFUN_LAYOUT_TABLE, "true"); break; case 6: tmpfunc->Dispatch(LFUN_LAYOUT_QUOTES); break; case 7: tmpfunc->Dispatch(LFUN_EMPH); break; case 8: tmpfunc->Dispatch(LFUN_NOUN); break; case 9: tmpfunc->Dispatch(LFUN_BOLD); break; case 10: tmpfunc->Dispatch(LFUN_TEX); break; case 11: tmpfunc->Dispatch(LFUN_DEPTH_PLUS); break; case 12: tmpfunc->Dispatch(LFUN_LAYOUT_PREAMBLE); break; case 13: tmpfunc->Dispatch(LFUN_LAYOUT_SAVE_DEFAULT); break;//MenuLayoutSave(); break;
}
fl_freepup(LayoutMenu);
}
int choice = fl_dopup(InsertMenu);
XFlush(fl_display);
// set the pseudo menu-button back
fl_set_object_boxtype(ob, FL_FLAT_BOX);
fl_redraw_object(ob);
if (men->currentView()->available()){
men->currentView()->getScreen()->HideCursor(); switch (choice) { case 1: tmpfunc->Dispatch(LFUN_FIGURE); break; case 2: tmpfunc->Dispatch(LFUN_TABLE); break; case 3: tmpfunc->Dispatch(LFUN_CHILDINSERT); break; case 4: // Insert ASCII file submenu break; case 5: tmpfunc->Dispatch(LFUN_FILE_INSERT); break; case 41: tmpfunc->Dispatch(LFUN_FILE_INSERT_ASCII, "line"); break; case 42: tmpfunc->Dispatch(LFUN_FILE_INSERT_ASCII, "paragraph"); break; case 43: break;
case 6: tmpfunc->Dispatch(LFUN_FOOTMELT); break
; case 7: tmpfunc->Dispatch(LFUN_MARGINMELT); break;
case 8: // Float sub-menu case 71:
tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "figure"); break; case 72:
tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "table"); break; case 73:
tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "wide-fig"); break; case 74:
tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "wide-tab"); break; case 75:
tmpfunc->Dispatch(LFUN_INSERTFOOTNOTE, "algorithm"); break;
case 9: // Table/List submenu break; case 21: tmpfunc->Dispatch(LFUN_TOC_INSERT); break; case 22: tmpfunc->Dispatch(LFUN_LOF_INSERT); break; case 23: tmpfunc->Dispatch(LFUN_LOT_INSERT); break; case 24: tmpfunc->Dispatch(LFUN_LOA_INSERT); break; case 25: tmpfunc->Dispatch(LFUN_INDEX_PRINT); break; case 26: tmpfunc->Dispatch(LFUN_INSERT_BIBTEX); break;
case 10: // Special Character submenu break; case 31: tmpfunc->Dispatch(LFUN_HFILL); break; case 32: tmpfunc->Dispatch(LFUN_HYPHENATION); break; case 33: tmpfunc->Dispatch(LFUN_PROTECTEDSPACE); break; case 34: tmpfunc->Dispatch(LFUN_BREAKLINE); break; case 35: tmpfunc->Dispatch(LFUN_LDOTS); break; case 36: tmpfunc->Dispatch(LFUN_END_OF_SENTENCE); break; case 37: tmpfunc->Dispatch(LFUN_QUOTE); break;
case 11: tmpfunc->Dispatch(LFUN_INSERT_NOTE); break; case 12: tmpfunc->Dispatch(LFUN_INSERT_LABEL); break; case 13: tmpfunc->Dispatch(LFUN_INSERT_REF); break; case 14: tmpfunc->Dispatch(LFUN_INSERT_CITATION); break; case 15: tmpfunc->Dispatch(LFUN_INDEX_INSERT); break; case 16: tmpfunc->Dispatch(LFUN_INDEX_INSERT_LAST); break; case 17: tmpfunc->Dispatch(LFUN_URL); break; case 18: tmpfunc->Dispatch(LFUN_HTMLURL); break;
}
}
fl_freepup(InsertMenu);
fl_freepup(SubInsertAscii);
fl_freepup(SubInsertTableList);
fl_freepup(SubInsertFloatList);
fl_freepup(SubInsertSpecial);
}
// set the pseudo menu-button back
fl_set_object_boxtype(ob, FL_FLAT_BOX);
fl_redraw_object(ob); switch (choice){ case 1: men->ScreenOptions(); break; case 2: SpellCheckerOptions(); break; case 3: men->_view->getIntl()->MenuKeymap(); break; case 4: LaTeXOptions(); break; case 5: tmpfunc->Dispatch(LFUN_RECONFIGURE); break; default: break;
}
fl_freepup(OptionsMenu);
}
// set the pseudo menu-button back
fl_set_object_boxtype(ob, FL_FLAT_BOX);
fl_redraw_object(ob);
switch (choice) { case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8:
ProhibitInput();
men->MenuDocu(doc_files[choice - 1]);
AllowInput(); break; case 9: ShowCopyright(); break; case 10: ShowCredits(); break; case 11:
ProhibitInput();
fl_show_message((LString(_("LyX Version ")) + LYX_VERSION
+ _(" of ") + LYX_RELEASE).c_str(),
(_("Library directory: ")
+ MakeDisplayPath(system_lyxdir)).c_str(),
(_("User directory: ")
+ MakeDisplayPath(user_lyxdir)).c_str());
AllowInput(); break;
}
fl_freepup(HelpMenu);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.