X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FParagraph.h;h=2c2e77246fc1c951d03da27171da2be5bad06b94;hb=c393abbe12c360eec07a3dcbb5929e6b7c0ad329;hp=21a5016f2566d24e22b77ae2339a4c179f60d44d;hpb=f05504f5ef438eef9ecf52cd989148d8f6209b00;p=lyx.git diff --git a/src/Paragraph.h b/src/Paragraph.h index 21a5016f25..2c2e77246f 100644 --- a/src/Paragraph.h +++ b/src/Paragraph.h @@ -17,13 +17,15 @@ #define PARAGRAPH_H #include "FontEnums.h" -#include "Layout.h" +#include "SpellChecker.h" #include "insets/InsetCode.h" #include "support/strfwd.h" #include "support/types.h" +#include + namespace lyx { class AuthorList; @@ -34,6 +36,7 @@ class Counters; class Cursor; class CursorSlice; class DocIterator; +class docstring_list; class DocumentClass; class Inset; class InsetBibitem; @@ -41,6 +44,7 @@ class LaTeXFeatures; class Inset_code; class InsetList; class Language; +class Layout; class Font; class Font_size; class MetricsInfo; @@ -49,6 +53,8 @@ class PainterInfo; class ParagraphParameters; class TexRow; class Toc; +class WordLangTuple; +class XHTMLStream; class FontSpan { public: @@ -60,6 +66,22 @@ public: public: /// Range including first and last. pos_type first, last; + + inline bool operator<(FontSpan const & s) const + { + return first < s.first; + } + + inline bool operator==(FontSpan const & s) const + { + return first == s.first && last == s.last; + } + + inline bool inside(pos_type p) const + { + return first <= p && p <= last; + } + }; /// @@ -79,7 +101,8 @@ enum AsStringParameter AS_STR_NONE = 0, ///< No option, only printable characters. AS_STR_LABEL = 1, ///< Prefix with paragraph label. AS_STR_INSETS = 2, ///< Go into insets. - AS_STR_NEWLINES = 4 ///< Get also newline characters. + AS_STR_NEWLINES = 4, ///< Get also newline characters. + AS_STR_SKIPDELETE = 8 ///< Skip deleted text in change tracking. }; @@ -89,7 +112,7 @@ class Paragraph public: /// Paragraph(); - /// + /// Copy constructor. Paragraph(Paragraph const &); /// Partial copy constructor. /// Copy the Paragraph contents from \p beg to \p end (without end). @@ -100,6 +123,8 @@ public: ~Paragraph(); /// int id() const; + /// + void setId(int id); /// void addChangesToToc(DocIterator const & cdit, Buffer const & buf) const; @@ -112,6 +137,8 @@ public: Language const * from, Language const * to); /// bool isMultiLingual(BufferParams const &) const; + /// + void getLanguages(std::set &) const; /// Convert the paragraph to a string. /// \param AsStringParameter options. This can contain any combination of @@ -134,10 +161,10 @@ public: /// void validate(LaTeXFeatures &) const; - /// - bool latex(BufferParams const &, Font const & outerfont, odocstream &, + /// \param force means: output even if layout.inpreamble is true. + void latex(BufferParams const &, Font const & outerfont, odocstream &, TexRow & texrow, OutputParams const &, - int start_pos = 0, int end_pos = -1) const; + int start_pos = 0, int end_pos = -1, bool force = false) const; /// Can we drop the standard paragraph wrapper? bool emptyTag() const; @@ -145,8 +172,11 @@ public: /// Get the id of the paragraph, usefull for docbook std::string getID(Buffer const & buf, OutputParams const & runparams) const; - /// Get the first word of a paragraph, return the position where it left - pos_type firstWord(odocstream & os, OutputParams const & runparams) const; + /// Output the first word of a paragraph, return the position where it left. + pos_type firstWordDocBook(odocstream & os, OutputParams const & runparams) const; + + /// Output the first word of a paragraph, return the position where it left. + pos_type firstWordLyXHTML(XHTMLStream & xs, OutputParams const & runparams) const; /// Writes to stream the docbook representation void simpleDocBookOnePar(Buffer const & buf, @@ -154,6 +184,13 @@ public: OutputParams const & runparams, Font const & outerfont, pos_type initial = 0) const; + /// \return any material that has had to be deferred until after the + /// paragraph has closed. + docstring simpleLyXHTMLOnePar(Buffer const & buf, + XHTMLStream & xs, + OutputParams const & runparams, + Font const & outerfont, + pos_type initial = 0) const; /// bool hasSameLayout(Paragraph const & par) const; @@ -166,10 +203,6 @@ public: /// Inset const & inInset() const; /// - InsetCode ownerCode() const; - /// - bool forcePlainLayout() const; - /// bool allowParagraphCustomization() const; /// bool usePlainLayout() const; @@ -198,13 +231,13 @@ public: /// is there a change within the given range ? bool isChanged(pos_type start, pos_type end) const; /// is there an unchanged char at the given pos ? - bool isUnchanged(pos_type pos) const; + bool isChanged(pos_type pos) const; /// is there an insertion at the given pos ? bool isInserted(pos_type pos) const; /// is there a deletion at the given pos ? bool isDeleted(pos_type pos) const; /// is the whole paragraph deleted ? - bool isFullyDeleted(pos_type start, pos_type end) const; + bool isDeleted(pos_type start, pos_type end) const; /// will the paragraph be physically merged with the next /// one if the imaginary end-of-par character is logically deleted? @@ -217,10 +250,10 @@ public: void setChange(pos_type pos, Change const & change); /// accept changes within the given range - void acceptChanges(BufferParams const & bparams, pos_type start, pos_type end); + void acceptChanges(pos_type start, pos_type end); /// reject changes within the given range - void rejectChanges(BufferParams const & bparams, pos_type start, pos_type end); + void rejectChanges(pos_type start, pos_type end); /// Paragraphs can contain "manual labels", for example, Description /// environment. The text for this user-editable label is stored in @@ -231,19 +264,16 @@ public: /// recompute this value void setBeginOfBody(); + /// + docstring expandLabel(Layout const &, BufferParams const &) const; + /// + docstring expandDocBookLabel(Layout const &, BufferParams const &) const; /// docstring const & labelString() const; - /// the next two functions are for the manual labels docstring const getLabelWidthString() const; /// Set label width string. void setLabelWidthString(docstring const & s); - /// translate \p label to the paragraph language if possible. - docstring const translateIfPossible(docstring const & label, - BufferParams const & bparams) const; - /// Expand the counters for the labelstring of \c layout - docstring expandLabel(Layout const &, BufferParams const &, - bool process_appendix = true) const; /// Actual paragraph alignment used char getAlign() const; /// The nesting depth of a paragraph @@ -352,9 +382,9 @@ public: bool isSeparator(pos_type pos) const; /// bool isLineSeparator(pos_type pos) const; - /// True if the character/inset at this point can be part of a word. - /// Note that digits in particular are considered as letters - bool isLetter(pos_type pos) const; + /// True if the character/inset at this point is a word separator. + /// Note that digits in particular are not considered as word separator. + bool isWordSeparator(pos_type pos) const; /// True if the element at this point is a character that is not a letter. bool isChar(pos_type pos) const; /// True if the element at this point is a space @@ -407,11 +437,36 @@ public: word_location const loc) const; /// void updateWords(); - /// Spellcheck word at position \p pos. - /// \return true if pointed word is misspelled. + + /// Spellcheck word at position \p from and fill in found misspelled word + /// and \p suggestions if \p do_suggestion is true. + /// \return result from spell checker, SpellChecker::UNKNOWN_WORD when misspelled. + SpellChecker::Result spellCheck(pos_type & from, pos_type & to, WordLangTuple & wl, + docstring_list & suggestions, bool do_suggestion = true, + bool check_learned = false) const; + + /// Spell checker status at position \p pos. + /// \return true if pointed position is misspelled. bool isMisspelled(pos_type pos) const; + /// spell check of whole paragraph + /// remember results until call of requestSpellCheck() + void spellCheck() const; + + /// query state of spell checker results + bool needsSpellCheck() const; + /// mark position of text manipulation to inform the spell checker + /// default value -1 marks the whole paragraph to be checked (again) + void requestSpellCheck(pos_type pos = -1); + + /// an automatically generated identifying label for this paragraph. + /// presently used only in the XHTML output routines. + std::string magicLabel() const; + private: + /// Expand the counters for the labelstring of \c layout + docstring expandParagraphLabel(Layout const &, BufferParams const &, + bool process_appendix) const; /// void deregisterWords(); ///