mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 13:18:28 +00:00
* InsetList: introducing find() and count()
* Paragraph: - erase numberOfOptArgs() and bibitem() - move onlyText() to Private. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@21180 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
af5c4977cd
commit
1026a87b72
@ -147,4 +147,29 @@ InsetList::InsetList(InsetList const & il)
|
|||||||
it->inset = it->inset->clone();
|
it->inset = it->inset->clone();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
pos_type InsetList::find(InsetCode code, pos_type startpos) const
|
||||||
|
{
|
||||||
|
List::const_iterator it = insetIterator(startpos);
|
||||||
|
List::const_iterator end = list_.end();
|
||||||
|
for (; it != end ; ++it) {
|
||||||
|
if (it->inset->lyxCode() == code)
|
||||||
|
return it->pos;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int InsetList::count(InsetCode code, pos_type startpos) const
|
||||||
|
{
|
||||||
|
int num = 0;
|
||||||
|
List::const_iterator it = insetIterator(startpos);
|
||||||
|
List::const_iterator end = list_.end();
|
||||||
|
for (; it != end ; ++it) {
|
||||||
|
if (it->inset->lyxCode() == code)
|
||||||
|
++num;
|
||||||
|
}
|
||||||
|
return num;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace lyx
|
} // namespace lyx
|
||||||
|
@ -12,6 +12,8 @@
|
|||||||
#ifndef INSET_LIST_H
|
#ifndef INSET_LIST_H
|
||||||
#define INSET_LIST_H
|
#define INSET_LIST_H
|
||||||
|
|
||||||
|
#include "insets/InsetCode.h"
|
||||||
|
|
||||||
#include "support/types.h"
|
#include "support/types.h"
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@ -76,6 +78,21 @@ public:
|
|||||||
///
|
///
|
||||||
void decreasePosAfterPos(pos_type pos);
|
void decreasePosAfterPos(pos_type pos);
|
||||||
|
|
||||||
|
/// search for next occurence of an \c Inset type.
|
||||||
|
/// \return the position of the found inset.
|
||||||
|
/// \retval -1 if no \c Inset is found.
|
||||||
|
pos_type find(
|
||||||
|
InsetCode code, ///< Code of inset to find.
|
||||||
|
pos_type startpos = 0 ///< start position for the search.
|
||||||
|
) const;
|
||||||
|
|
||||||
|
/// count occurences of of an \c Inset type.
|
||||||
|
/// \return the number of found inset(s).
|
||||||
|
int count(
|
||||||
|
InsetCode code, ///< Code of inset type to count.
|
||||||
|
pos_type startpos = 0 ///< start position for the counting.
|
||||||
|
) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
///
|
///
|
||||||
List list_;
|
List list_;
|
||||||
|
@ -169,6 +169,10 @@ public:
|
|||||||
void validate(LaTeXFeatures & features,
|
void validate(LaTeXFeatures & features,
|
||||||
Layout const & layout) const;
|
Layout const & layout) const;
|
||||||
|
|
||||||
|
/// Checks if the paragraph contains only text and no inset or font change.
|
||||||
|
bool onlyText(Buffer const & buf, Font const & outerfont,
|
||||||
|
pos_type initial) const;
|
||||||
|
|
||||||
/// match a string against a particular point in the paragraph
|
/// match a string against a particular point in the paragraph
|
||||||
bool isTextAt(std::string const & str, pos_type pos) const;
|
bool isTextAt(std::string const & str, pos_type pos) const;
|
||||||
|
|
||||||
@ -1620,17 +1624,6 @@ void Paragraph::setBeginOfBody()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
InsetBibitem * Paragraph::bibitem() const
|
|
||||||
{
|
|
||||||
if (!d->insetlist_.empty()) {
|
|
||||||
Inset * inset = d->insetlist_.begin()->inset;
|
|
||||||
if (inset->lyxCode() == BIBITEM_CODE)
|
|
||||||
return static_cast<InsetBibitem *>(inset);
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool Paragraph::forceDefaultParagraphs() const
|
bool Paragraph::forceDefaultParagraphs() const
|
||||||
{
|
{
|
||||||
return inInset() && inInset()->forceDefaultParagraphs(0);
|
return inInset() && inInset()->forceDefaultParagraphs(0);
|
||||||
@ -2178,13 +2171,13 @@ pos_type Paragraph::getFirstWord(Buffer const & buf, odocstream & os, OutputPara
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Paragraph::onlyText(Buffer const & buf, Font const & outerfont, pos_type initial) const
|
bool Paragraph::Private::onlyText(Buffer const & buf, Font const & outerfont, pos_type initial) const
|
||||||
{
|
{
|
||||||
Font font_old;
|
Font font_old;
|
||||||
|
pos_type size = text_.size();
|
||||||
for (pos_type i = initial; i < size(); ++i) {
|
for (pos_type i = initial; i < size; ++i) {
|
||||||
Font font = getFont(buf.params(), i, outerfont);
|
Font font = owner_->getFont(buf.params(), i, outerfont);
|
||||||
if (isInset(i))
|
if (text_[i] == META_INSET)
|
||||||
return false;
|
return false;
|
||||||
if (i != initial && font != font_old)
|
if (i != initial && font != font_old)
|
||||||
return false;
|
return false;
|
||||||
@ -2207,7 +2200,7 @@ void Paragraph::simpleDocBookOnePar(Buffer const & buf,
|
|||||||
Font font_old =
|
Font font_old =
|
||||||
style->labeltype == LABEL_MANUAL ? style->labelfont : style->font;
|
style->labeltype == LABEL_MANUAL ? style->labelfont : style->font;
|
||||||
|
|
||||||
if (style->pass_thru && !onlyText(buf, outerfont, initial))
|
if (style->pass_thru && !d->onlyText(buf, outerfont, initial))
|
||||||
os << "]]>";
|
os << "]]>";
|
||||||
|
|
||||||
// parsing main loop
|
// parsing main loop
|
||||||
@ -2245,7 +2238,7 @@ void Paragraph::simpleDocBookOnePar(Buffer const & buf,
|
|||||||
|
|
||||||
if (style->free_spacing)
|
if (style->free_spacing)
|
||||||
os << '\n';
|
os << '\n';
|
||||||
if (style->pass_thru && !onlyText(buf, outerfont, initial))
|
if (style->pass_thru && !d->onlyText(buf, outerfont, initial))
|
||||||
os << "<![CDATA[";
|
os << "<![CDATA[";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2588,19 +2581,6 @@ Inset const * Paragraph::getInset(pos_type pos) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int Paragraph::numberOfOptArgs() const
|
|
||||||
{
|
|
||||||
int num = 0;
|
|
||||||
InsetList::const_iterator it = insetList().begin();
|
|
||||||
InsetList::const_iterator end = insetList().end();
|
|
||||||
for (; it != end ; ++it) {
|
|
||||||
if (it->inset->lyxCode() == OPTARG_CODE)
|
|
||||||
++num;
|
|
||||||
}
|
|
||||||
return num;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Paragraph::changeCase(BufferParams const & bparams, pos_type pos,
|
void Paragraph::changeCase(BufferParams const & bparams, pos_type pos,
|
||||||
pos_type right, TextCase action)
|
pos_type right, TextCase action)
|
||||||
{
|
{
|
||||||
|
@ -71,9 +71,8 @@ enum TextCase {
|
|||||||
|
|
||||||
|
|
||||||
/// A Paragraph holds all text, attributes and insets in a text paragraph
|
/// A Paragraph holds all text, attributes and insets in a text paragraph
|
||||||
/// \todo FIXME: any reference to ParagraphMetrics (including inheritance)
|
class Paragraph
|
||||||
/// should go in order to complete the Model/View separation of this class.
|
{
|
||||||
class Paragraph {
|
|
||||||
public:
|
public:
|
||||||
///
|
///
|
||||||
Paragraph();
|
Paragraph();
|
||||||
@ -127,10 +126,6 @@ public:
|
|||||||
odocstream & os,
|
odocstream & os,
|
||||||
OutputParams const & runparams) const;
|
OutputParams const & runparams) const;
|
||||||
|
|
||||||
/// Checks if the paragraph contains only text and no inset or font change.
|
|
||||||
bool onlyText(Buffer const & buf, Font const & outerfont,
|
|
||||||
pos_type initial) const;
|
|
||||||
|
|
||||||
/// Writes to stream the docbook representation
|
/// Writes to stream the docbook representation
|
||||||
void simpleDocBookOnePar(Buffer const & buf,
|
void simpleDocBookOnePar(Buffer const & buf,
|
||||||
odocstream &,
|
odocstream &,
|
||||||
@ -166,9 +161,6 @@ public:
|
|||||||
/// This is the item depth, only used by enumerate and itemize
|
/// This is the item depth, only used by enumerate and itemize
|
||||||
signed char itemdepth;
|
signed char itemdepth;
|
||||||
|
|
||||||
///
|
|
||||||
InsetBibitem * bibitem() const; // ale970302
|
|
||||||
|
|
||||||
/// look up change at given pos
|
/// look up change at given pos
|
||||||
Change const & lookupChange(pos_type pos) const;
|
Change const & lookupChange(pos_type pos) const;
|
||||||
|
|
||||||
@ -354,9 +346,6 @@ public:
|
|||||||
/// by this author in the paragraph.
|
/// by this author in the paragraph.
|
||||||
void checkAuthors(AuthorList const & authorList);
|
void checkAuthors(AuthorList const & authorList);
|
||||||
|
|
||||||
/// return the number of InsetOptArg in a paragraph
|
|
||||||
int numberOfOptArgs() const;
|
|
||||||
|
|
||||||
///
|
///
|
||||||
void changeCase(BufferParams const & bparams, pos_type pos,
|
void changeCase(BufferParams const & bparams, pos_type pos,
|
||||||
pos_type right, TextCase action);
|
pos_type right, TextCase action);
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
#include "factory.h"
|
#include "factory.h"
|
||||||
#include "FuncRequest.h"
|
#include "FuncRequest.h"
|
||||||
#include "gettext.h"
|
#include "gettext.h"
|
||||||
|
#include "InsetList.h"
|
||||||
#include "Intl.h"
|
#include "Intl.h"
|
||||||
#include "Language.h"
|
#include "Language.h"
|
||||||
#include "Layout.h"
|
#include "Layout.h"
|
||||||
@ -1742,7 +1743,7 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
|
|||||||
break;
|
break;
|
||||||
case LFUN_OPTIONAL_INSERT:
|
case LFUN_OPTIONAL_INSERT:
|
||||||
code = OPTARG_CODE;
|
code = OPTARG_CODE;
|
||||||
enable = cur.paragraph().numberOfOptArgs()
|
enable = cur.paragraph().insetList().count(OPTARG_CODE)
|
||||||
< cur.paragraph().layout()->optionalargs;
|
< cur.paragraph().layout()->optionalargs;
|
||||||
break;
|
break;
|
||||||
case LFUN_ENVIRONMENT_INSERT:
|
case LFUN_ENVIRONMENT_INSERT:
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#include "FuncRequest.h"
|
#include "FuncRequest.h"
|
||||||
#include "Font.h"
|
#include "Font.h"
|
||||||
#include "InsetIterator.h"
|
#include "InsetIterator.h"
|
||||||
|
#include "InsetList.h"
|
||||||
#include "Lexer.h"
|
#include "Lexer.h"
|
||||||
#include "Paragraph.h"
|
#include "Paragraph.h"
|
||||||
#include "ParagraphList.h"
|
#include "ParagraphList.h"
|
||||||
@ -149,26 +150,29 @@ docstring const bibitemWidest(Buffer const & buffer)
|
|||||||
ParagraphList::const_iterator end = buffer.paragraphs().end();
|
ParagraphList::const_iterator end = buffer.paragraphs().end();
|
||||||
|
|
||||||
for (; it != end; ++it) {
|
for (; it != end; ++it) {
|
||||||
if (it->bibitem()) {
|
if (it->insetList().empty())
|
||||||
docstring const label = it->bibitem()->getBibLabel();
|
continue;
|
||||||
|
Inset * inset = it->insetList().begin()->inset;
|
||||||
|
if (inset->lyxCode() != BIBITEM_CODE)
|
||||||
|
continue;
|
||||||
|
|
||||||
// FIXME: we can't be sure using the following that the GUI
|
bitem = static_cast<InsetBibitem const *>(inset);
|
||||||
// version and the command-line version will give the same
|
docstring const label = bitem->getBibLabel();
|
||||||
// result.
|
|
||||||
//
|
|
||||||
//int const wx = use_gui?
|
|
||||||
// theFontMetrics(font).width(label): label.size();
|
|
||||||
//
|
|
||||||
// So for now we just use the label size in order to be sure
|
|
||||||
// that GUI and no-GUI gives the same bibitem (even if that is
|
|
||||||
// potentially the wrong one.
|
|
||||||
int const wx = label.size();
|
|
||||||
|
|
||||||
if (wx > w) {
|
// FIXME: we can't be sure using the following that the GUI
|
||||||
w = wx;
|
// version and the command-line version will give the same
|
||||||
bitem = it->bibitem();
|
// result.
|
||||||
}
|
//
|
||||||
}
|
//int const wx = use_gui?
|
||||||
|
// theFontMetrics(font).width(label): label.size();
|
||||||
|
//
|
||||||
|
// So for now we just use the label size in order to be sure
|
||||||
|
// that GUI and no-GUI gives the same bibitem (even if that is
|
||||||
|
// potentially the wrong one.
|
||||||
|
int const wx = label.size();
|
||||||
|
|
||||||
|
if (wx > w)
|
||||||
|
w = wx;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bitem && !bitem->getBibLabel().empty())
|
if (bitem && !bitem->getBibLabel().empty())
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
#include "Buffer.h"
|
#include "Buffer.h"
|
||||||
#include "BufferParams.h"
|
#include "BufferParams.h"
|
||||||
|
#include "Color.h"
|
||||||
#include "Counters.h"
|
#include "Counters.h"
|
||||||
#include "Cursor.h"
|
#include "Cursor.h"
|
||||||
#include "BufferView.h"
|
#include "BufferView.h"
|
||||||
@ -24,7 +25,7 @@
|
|||||||
#include "FuncRequest.h"
|
#include "FuncRequest.h"
|
||||||
#include "FuncStatus.h"
|
#include "FuncStatus.h"
|
||||||
#include "gettext.h"
|
#include "gettext.h"
|
||||||
#include "Color.h"
|
#include "InsetList.h"
|
||||||
#include "MetricsInfo.h"
|
#include "MetricsInfo.h"
|
||||||
#include "output_latex.h"
|
#include "output_latex.h"
|
||||||
#include "OutputParams.h"
|
#include "OutputParams.h"
|
||||||
@ -203,7 +204,7 @@ bool InsetCaption::getStatus(Cursor & cur, FuncRequest const & cmd,
|
|||||||
return true;
|
return true;
|
||||||
|
|
||||||
case LFUN_OPTIONAL_INSERT:
|
case LFUN_OPTIONAL_INSERT:
|
||||||
status.enabled(cur.paragraph().numberOfOptArgs() == 0);
|
status.enabled(cur.paragraph().insetList().find(OPTARG_CODE) == -1);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
Loading…
Reference in New Issue
Block a user