📄 mimerichtextinit.c
字号:
} // End FlushTextURL/*---------------------------------------------------------------------- * Add a command to the command list of the current input line */BooleanMimeRichTextC::AddCommand(CharC cmd, Boolean negate){ if ( cmd.StartsWith("iso-", IGNORE_CASE) ) { StringC name(cmd); name(3,1) = ""; // Remove '-' return priv->AddCharsetCommand(name, negate); } else if ( cmd.StartsWith("iso", IGNORE_CASE) ) { return priv->AddCharsetCommand(cmd, negate); } if ( debuglev > 1 ) { cout <<"Found command: " <<cmd; if ( negate ) cout <<" off"; else cout <<" on"; cout <<endl; } Boolean legal = True; Boolean stateChange = False; Boolean lineChange = False; int level; TextStateC *inputState = &priv->inputCmd->state; if ( cmd.Equals("bold", IGNORE_CASE) ) { if ( negate ) legal = (inputState->CurFontCmd() == FC_BOLD); level = inputState->Bold(); stateChange = ((negate && level == 1) || (!negate && level == 0)); } else if ( cmd.Equals("italic", IGNORE_CASE) ) { if ( negate ) legal = (inputState->CurFontCmd() == FC_ITALIC); level = inputState->Italic(); stateChange = ((negate && level == 1) || (!negate && level == 0)); } else if ( cmd.Equals("fixed", IGNORE_CASE) ) { if ( negate ) legal = (inputState->CurFontCmd() == FC_FIXED); level = inputState->Fixed(); stateChange = ((negate && level == 1) || (!negate && level == 0)); } else if ( cmd.Equals("smaller", IGNORE_CASE) ) { if ( negate ) legal = (inputState->CurFontCmd() == FC_SMALLER); level = inputState->Smaller(); stateChange = ((negate && level > 0) || !negate); } else if ( cmd.Equals("bigger", IGNORE_CASE) ) { if ( negate ) legal = (inputState->CurFontCmd() == FC_BIGGER); level = inputState->Bigger(); stateChange = ((negate && level > 0) || !negate); } else if ( cmd.Equals("center", IGNORE_CASE) ) { if ( negate ) legal = (inputState->CurJustCmd() == JC_CENTER); level = inputState->Center(); stateChange = ((negate && level == 1) || (!negate && level == 0)); lineChange = !priv->BeginningOfInputLine(); } else if ( cmd.Equals("flushleft", IGNORE_CASE) ) { if ( negate ) legal = (inputState->CurJustCmd() == JC_LEFT); level = inputState->FlushLeft(); stateChange = ((negate && level == 1) || (!negate && level == 0)); lineChange = !priv->BeginningOfInputLine(); } else if ( cmd.Equals("flushright", IGNORE_CASE) ) { if ( negate ) legal = (inputState->CurJustCmd() == JC_RIGHT); level = inputState->FlushRight(); stateChange = ((negate && level == 1) || (!negate && level == 0)); lineChange = !priv->BeginningOfInputLine(); } else if ( cmd.Equals("flushboth", IGNORE_CASE) ) { if ( negate ) legal = (inputState->CurJustCmd() == JC_BOTH); level = inputState->FlushBoth(); stateChange = ((negate && level == 1) || (!negate && level == 0)); lineChange = !priv->BeginningOfInputLine(); } else if ( cmd.Equals("nofill", IGNORE_CASE) ) { if ( negate ) legal = (inputState->CurJustCmd() == JC_NOFILL); level = inputState->NoFill(); stateChange = ((negate && level == 1) || (!negate && level == 0)); lineChange = !priv->BeginningOfInputLine(); } else if ( cmd.Equals("underline", IGNORE_CASE) ) { level = inputState->Underline(); if ( negate ) legal = (level > 0); stateChange = True; } else if ( cmd.Equals("excerpt", IGNORE_CASE) ) { level = inputState->Excerpt(); if ( negate ) legal = (level > 0); stateChange = True; lineChange = !priv->BeginningOfInputLine(); } else if ( cmd.Equals("indent", IGNORE_CASE) ) { level = inputState->LIndent(); if ( negate ) legal = (level > 0); stateChange = True; } else if ( cmd.Equals("indentright", IGNORE_CASE) ) { level = inputState->RIndent(); if ( negate ) legal = (level > 0); stateChange = True; } else if ( cmd.Equals("x-color", IGNORE_CASE) ) { level = inputState->ColorCmdCount(); // We only get negates here. AddParamCommand gets the others /*if ( negate )*/ legal = (level > 0); stateChange = True; } else if ( cmd.Equals("x-link", IGNORE_CASE) ) { level = inputState->PLinkCount(); // We only get negates here. AddParamCommand gets the others /*if ( negate )*/ legal = (level > 0); stateChange = True; } else { return False; } if ( !legal ) return True;//// Store any pending text// priv->FlushTextBuf();//// Create a new line if necessary// if ( lineChange ) { priv->NewInputLine(); }//// If we didn't create a new line (which automatically creates a new command// object) and the input state is changing and the text is not empty, we// need a new command object.// else if ( stateChange && priv->inputCmd->text->size() > 0 ) { RichCmdC *rcmd = new RichCmdC(RC_TEXT); rcmd->state = priv->inputCmd->state; priv->inputLine->AddCommand(rcmd, /*after*/priv->inputCmd); priv->inputCmd = rcmd; } inputState = &priv->inputCmd->state;//// Process this command// if ( cmd.Equals("bold", IGNORE_CASE) ) { if ( negate ) inputState->PopFont(); else inputState->PushFont(FC_BOLD); } else if ( cmd.Equals("italic", IGNORE_CASE) ) { if ( negate ) inputState->PopFont(); else inputState->PushFont(FC_ITALIC); } else if ( cmd.Equals("fixed", IGNORE_CASE) ) { if ( negate ) inputState->PopFont(); else inputState->PushFont(FC_FIXED); } else if ( cmd.Equals("smaller", IGNORE_CASE) ) { if ( negate ) inputState->PopFont(); else inputState->PushFont(FC_SMALLER); } else if ( cmd.Equals("bigger", IGNORE_CASE) ) { if ( negate ) inputState->PopFont(); else inputState->PushFont(FC_BIGGER); } else if ( cmd.Equals("center", IGNORE_CASE) ) { if ( negate ) inputState->PopJust(); else inputState->PushJust(JC_CENTER); } else if ( cmd.Equals("flushleft", IGNORE_CASE) ) { if ( negate ) inputState->PopJust(); else inputState->PushJust(JC_LEFT); } else if ( cmd.Equals("flushright", IGNORE_CASE) ) { if ( negate ) inputState->PopJust(); else inputState->PushJust(JC_RIGHT); } else if ( cmd.Equals("flushboth", IGNORE_CASE) ) { if ( negate ) inputState->PopJust(); else inputState->PushJust(JC_BOTH); } else if ( cmd.Equals("nofill", IGNORE_CASE) ) { if ( negate ) inputState->PopJust(); else inputState->PushJust(JC_NOFILL); } else if ( cmd.Equals("underline", IGNORE_CASE) ) { if ( negate ) inputState->UnderlineLess(); else inputState->UnderlineMore(); } else if ( cmd.Equals("excerpt", IGNORE_CASE) ) { if ( negate ) inputState->ExcerptLess(); else inputState->ExcerptMore(); } else if ( cmd.Equals("indent", IGNORE_CASE) ) { if ( negate ) inputState->LIndentLess(); else inputState->LIndentMore(); } else if ( cmd.Equals("indentright", IGNORE_CASE) ) { if ( negate ) inputState->RIndentLess(); else inputState->RIndentMore(); } else if ( cmd.Equals("x-color", IGNORE_CASE) ) { // We only get negates here. AddParamCommand gets the others /*if ( negate )*/ inputState->PopColor(); } else if ( cmd.Equals("x-link", IGNORE_CASE) ) { // We only get negates here. AddParamCommand gets the others /*if ( negate )*/ inputState->PopLink(); inputState->PopColor(); } return True;} // End AddCommand/*---------------------------------------------------------------------- * Add a command requiring a parameter to the command list of the * current input line */BooleanMimeRichTextP::AddParamCommand(StringC& cmd, StringC& param){ if ( debuglev > 1 ) cout <<"Found command: " <<cmd <<" with param: " <<param <<endl; TextStateC *inputState = &inputCmd->state;//// We now acknowledge two commands, x-color and x-link// Pixel color; Boolean isColor = False; if ( cmd.Equals("x-color", IGNORE_CASE) ) { if ( !PixelValue(textDA, param, &color) ) return False; isColor = True; } else if ( !cmd.Equals("x-link", IGNORE_CASE) ) { return False; }//// Store any pending text// FlushTextBuf();//// If the input state is changing and the text is not empty, we// need a new command object.// if ( inputCmd->text->size() > 0 ) { RichCmdC *rcmd = new RichCmdC(RC_TEXT); rcmd->state = inputCmd->state; inputLine->AddCommand(rcmd, /*after*/inputCmd); inputCmd = rcmd; } inputState = &inputCmd->state;//// Process this command// if (isColor) { inputState->PushColor(color); } else { // inputState->PushColor(linkColor); inputState->PushLink(param); } return True;} // End AddParamCommand/*---------------------------------------------------------------------- * Add a character set command to the command list of the current input line */BooleanMimeRichTextP::AddCharsetCommand(CharC cmd, Boolean negate){ if ( debuglev > 1 ) { cout <<"Found command: " <<cmd; if ( negate ) cout <<" off"; else cout <<" on"; cout <<endl; }//// Add this character set to the list// int charsetNum = pub->AddCharset(cmd); Boolean legal = True; Boolean stateChange = False; int level; TextStateC *inputState = &inputCmd->state; switch (charsetNum) { case 1: if ( negate ) legal = (inputState->CurFontCmd() == FC_CHARSET_1); level = inputState->Charset1(); stateChange = ((negate && level == 1) || (!negate && level == 0)); break; case 2: if ( negate ) legal = (inputState->CurFontCmd() == FC_CHARSET_2); level = inputState->Charset2(); stateChange = ((negate && level == 1) || (!negate && level == 0)); break; case 3: if ( negate ) legal = (inputState->CurFontCmd() == FC_CHARSET_3); level = inputState->Charset3(); stateChange = ((negate && level == 1) || (!negate && level == 0)); break; case 4: if ( negate ) legal = (inputState->CurFontCmd() == FC_CHARSET_4); level = inputState->Charset4(); stateChange = ((negate && level == 1) || (!negate && level == 0)); break; case 5: if ( negate ) legal = (inputState->CurFontCmd() == FC_CHARSET_5); level = inputState->Charset5(); stateChange = ((negate && level == 1) || (!negate && level == 0)); break; case 6: if ( negate ) legal = (inputState->CurFontCmd() == FC_CHARSET_6); level = inputState->Charset6(); stateChange = ((negate && level == 1) || (!negate && level == 0)); break; case 7: if ( negate ) legal = (inputState->CurFontCmd() == FC_CHARSET_7); level = inputState->Charset7(); stateChange = ((negate && level == 1) || (!negate && level == 0)); break; case 8: if ( negate ) legal = (inputState->CurFontCmd() == FC_CHARSET_8); level = inputState->Charset8(); stateChange = ((negate && level == 1) || (!negate && level == 0)); break; case 9: if ( negate ) legal = (inputState->CurFontCmd() == FC_CHARSET_9); level = inputState->Charset9(); stateChange = ((negate && level == 1) || (!negate && level == 0)); break; default: return False; } // End switch character set number if ( !legal ) return True;//// Store any pending text// FlushTextBuf();//// If the input state is changing and the text is not empty, we need a new// command object.// if ( stateChange && inputCmd->text->size() > 0 ) { RichCmdC *rcmd = new RichCmdC(RC_TEXT); rcmd->state = inputCmd->state; inputLine->AddCommand(rcmd, /*after*/inputCmd); inputCmd = rcmd; } inputState = &inputCmd->state;//// Process this command// if ( negate ) inputState->PopFont(); else switch (charsetNum) { case 1: inputState->PushFont(FC_CHARSET_1); break; case 2: inputState->PushFont(FC_CHARSET_2); break; case 3: inputState->PushFont(FC_CHARSET_3); break; case 4: inputState->PushFont(FC_CHARSET_4); break; case 5: inputState->PushFont(FC_CHARSET_5); break; case 6: inputState->PushFont(FC_CHARSET_6); break; case 7: inputState->PushFont(FC_CHARSET_7); break; case 8: inputState->PushFont(FC_CHARSET_8); break; case 9: inputState->PushFont(FC_CHARSET_9); break; } // End switch character set number return True;} // End AddCharsetCommand/*---------------------------------------------------------------------- * Method to add a new character set */intMimeRichTextC::AddCharset(CharC cs){ unsigned count = priv->charsetList.size(); int i=0; for (i=0; i<count; i++) { StringC *name = (StringC*)*priv->charsetList[i]; if ( cs.Equals(*name, I
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -