if (file.isEmpty())
return;
- // FIXME UNICODE
- QString const filen = toqstr(changeExtension(fromqstr(file), ""));
+ QString const filen = changeExtension(file, "");
bool present = false;
unsigned int pres = 0;
if (file.isEmpty())
return;
- QString const f = toqstr(changeExtension(fromqstr(file), ""));
+ QString const f = changeExtension(file, "");
bool present = false;
for (int i = 0; i < add_->bibLW->count(); ++i) {
if (!file.isEmpty()) {
add_->bibED->clear();
- QString const f = toqstr(changeExtension(fromqstr(file), ""));
+ QString const f = changeExtension(file, "");
QList<QListWidgetItem *> matches =
databaseLW->findItems(f, Qt::MatchExactly);
if (matches.empty()) {
add_->bibLW->clear();
- vector<string> bib_str;
- getBibFiles(bib_str);
- for (vector<string>::const_iterator it = bib_str.begin();
- it != bib_str.end(); ++it) {
- string bibItem(changeExtension(*it, ""));
- add_->bibLW->addItem(toqstr(bibItem));
- }
+ QStringList bibfiles = bibFiles();
+ for (int i = 0; i != bibfiles.count(); ++i)
+ add_->bibLW->addItem(changeExtension(bibfiles[i], ""));
- string bibstyle = getStylefile();
+ QString bibstyle = styleFile();
bibtocCB->setChecked(bibtotoc() && !bibtopic);
bibtocCB->setEnabled(!bibtopic);
styleCB->clear();
- int item_nr(-1);
+ int item_nr = -1;
- vector<string> str;
- getBibStyles(str);
- for (vector<string>::const_iterator it = str.begin();
- it != str.end(); ++it) {
- string item(changeExtension(*it, ""));
+ QStringList str = bibStyles();
+ for (int i = 0; i != str.count(); ++i) {
+ QString item = changeExtension(str[i], "");
if (item == bibstyle)
- item_nr = int(it - str.begin());
- styleCB->addItem(toqstr(item));
+ item_nr = i;
+ styleCB->addItem(item);
}
- if (item_nr == -1 && !bibstyle.empty()) {
- styleCB->addItem(toqstr(bibstyle));
+ if (item_nr == -1 && !bibstyle.isEmpty()) {
+ styleCB->addItem(bibstyle);
item_nr = styleCB->count() - 1;
}
}
-void GuiBibtex::getBibStyles(vector<string> & data) const
+QStringList GuiBibtex::bibStyles() const
{
- data.clear();
-
- getTexFileList("bstFiles.lst", data);
- // test, if we have a valid list, otherwise run rescan
- if (data.empty()) {
+ QStringList data = texFileList("bstFiles.lst");
+ // test whether we have a valid list, otherwise run rescan
+ if (data.isEmpty()) {
rescanBibStyles();
- getTexFileList("bstFiles.lst", data);
+ data = texFileList("bstFiles.lst");
}
- vector<string>::iterator it = data.begin();
- vector<string>::iterator end = data.end();
- for (; it != end; ++it)
- *it = support::onlyFilename(*it);
+ for (int i = 0; i != data.size(); ++i)
+ data[i] = onlyFilename(data[i]);
// sort on filename only (no path)
- sort(data.begin(), data.end());
+ data.sort();
+ return data;
}
-void GuiBibtex::getBibFiles(vector<string> & data) const
+QStringList GuiBibtex::bibFiles() const
{
- data.clear();
-
- getTexFileList("bibFiles.lst", data);
- // test, if we have a valid list, otherwise run rescan
- if (data.empty()) {
+ QStringList data = texFileList("bibFiles.lst");
+ // test whether we have a valid list, otherwise run rescan
+ if (data.isEmpty()) {
rescanBibStyles();
- getTexFileList("bibFiles.lst", data);
+ data = texFileList("bibFiles.lst");
}
- vector<string>::iterator it = data.begin();
- vector<string>::iterator end = data.end();
- for (; it != end; ++it)
- *it = support::onlyFilename(*it);
+ for (int i = 0; i != data.size(); ++i)
+ data[i] = onlyFilename(data[i]);
// sort on filename only (no path)
- sort(data.begin(), data.end());
+ data.sort();
+ return data;
}
}
-string const GuiBibtex::getStylefile() const
+QString GuiBibtex::styleFile() const
{
// the different bibtex packages have (and need) their
// own "plain" stylefiles
biblio::CiteEngine const engine = buffer().params().getEngine();
- docstring defaultstyle;
+ QString defaultstyle;
switch (engine) {
case biblio::ENGINE_BASIC:
- defaultstyle = from_ascii("plain");
+ defaultstyle = "plain";
break;
case biblio::ENGINE_NATBIB_AUTHORYEAR:
- defaultstyle = from_ascii("plainnat");
+ defaultstyle = "plainnat";
break;
case biblio::ENGINE_NATBIB_NUMERICAL:
- defaultstyle = from_ascii("plainnat");
+ defaultstyle = "plainnat";
break;
case biblio::ENGINE_JURABIB:
- defaultstyle = from_ascii("jurabib");
+ defaultstyle = "jurabib";
break;
}
- docstring bst = params_["options"];
+ QString bst = toqstr(params_["options"]);
if (bibtotoc()){
// bibstyle exists?
- if (contains(bst, ',')) {
- docstring bibtotoc = from_ascii("bibtotoc");
- bst = split(bst, bibtotoc, ',');
- } else
- bst.erase();
+ int pos = bst.indexOf(',');
+ if (pos != -1) {
+ // FIXME: check
+ // docstring bibtotoc = from_ascii("bibtotoc");
+ // bst = split(bst, bibtotoc, ',');
+ bst = bst.mid(pos);
+ } else {
+ bst.clear();
+ }
}
// propose default style file for new insets
// existing insets might have (legally) no bst files
// (if the class already provides a style)
- if (bst.empty() && params_["bibfiles"].empty())
+ if (bst.isEmpty() && params_["bibfiles"].empty())
bst = defaultstyle;
- // FIXME UNICODE
- return to_utf8(bst);
+ return bst;
}
#include "ui_BibtexUi.h"
#include "ui_BibtexAddUi.h"
-#include <string>
-#include <vector>
namespace lyx {
-
-namespace support { class FileFilterList; }
-
namespace frontend {
class GuiBibtexAddDialog : public QDialog, public Ui::BibtexAddUi
Q_OBJECT
public:
- GuiBibtex(GuiView & lv);
+ explicit GuiBibtex(GuiView & lv);
private Q_SLOTS:
void change_adaptor();
/// Browse for a .bib file
QString browseBib(QString const & in_name) const;
-
/// Browse for a .bst file
QString browseBst(QString const & in_name) const;
-
/// get the list of bst files
- void getBibStyles(std::vector<std::string> & data) const;
+ QStringList bibStyles() const;
/// get the list of bib files
- void getBibFiles(std::vector<std::string> & data) const;
+ QStringList bibFiles() const;
/// build filelists of all availabe bib/bst/cls/sty-files. done through
/// kpsewhich and an external script, saved in *Files.lst
void rescanBibStyles() const;
/// should we put the bibliography to the TOC?
bool bibtotoc() const;
/// which stylefile do we use?
- std::string const getStylefile() const;
+ QString styleFile() const;
///
GuiBibtexAddDialog * add_;
namespace lyx {
namespace frontend {
-static vector<ShapePair> const getShapeData()
+static QList<ShapePair> shapeData()
{
- vector<ShapePair> shape(6);
-
- ShapePair pr;
-
- pr.first = qt_("No change");
- pr.second = IGNORE_SHAPE;
- shape[0] = pr;
-
- pr.first = qt_("Upright");
- pr.second = UP_SHAPE;
- shape[1] = pr;
-
- pr.first = qt_("Italic");
- pr.second = ITALIC_SHAPE;
- shape[2] = pr;
-
- pr.first = qt_("Slanted");
- pr.second = SLANTED_SHAPE;
- shape[3] = pr;
-
- pr.first = qt_("Small Caps");
- pr.second = SMALLCAPS_SHAPE;
- shape[4] = pr;
-
- pr.first = qt_("Reset");
- pr.second = INHERIT_SHAPE;
- shape[5] = pr;
-
- return shape;
+ QList<ShapePair> shapes;
+ shapes << ShapePair(qt_("No change"), IGNORE_SHAPE);
+ shapes << ShapePair(qt_("Upright"), UP_SHAPE);
+ shapes << ShapePair(qt_("Italic"), ITALIC_SHAPE);
+ shapes << ShapePair(qt_("Slanted"), SLANTED_SHAPE);
+ shapes << ShapePair(qt_("Small Caps"), SMALLCAPS_SHAPE);
+ shapes << ShapePair(qt_("Reset"), INHERIT_SHAPE);
+ return shapes;
}
-static vector<SizePair> const getSizeData()
+static QList<SizePair> sizeData()
{
- vector<SizePair> size(14);
-
- SizePair pr;
-
- pr.first = qt_("No change");
- pr.second = FONT_SIZE_IGNORE;
- size[0] = pr;
-
- pr.first = qt_("Tiny");
- pr.second = FONT_SIZE_TINY;
- size[1] = pr;
-
- pr.first = qt_("Smallest");
- pr.second = FONT_SIZE_SCRIPT;
- size[2] = pr;
-
- pr.first = qt_("Smaller");
- pr.second = FONT_SIZE_FOOTNOTE;
- size[3] = pr;
-
- pr.first = qt_("Small");
- pr.second = FONT_SIZE_SMALL;
- size[4] = pr;
-
- pr.first = qt_("Normal");
- pr.second = FONT_SIZE_NORMAL;
- size[5] = pr;
-
- pr.first = qt_("Large");
- pr.second = FONT_SIZE_LARGE;
- size[6] = pr;
-
- pr.first = qt_("Larger");
- pr.second = FONT_SIZE_LARGER;
- size[7] = pr;
-
- pr.first = qt_("Largest");
- pr.second = FONT_SIZE_LARGEST;
- size[8] = pr;
-
- pr.first = qt_("Huge");
- pr.second = FONT_SIZE_HUGE;
- size[9] = pr;
-
- pr.first = qt_("Huger");
- pr.second = FONT_SIZE_HUGER;
- size[10] = pr;
-
- pr.first = qt_("Increase");
- pr.second = FONT_SIZE_INCREASE;
- size[11] = pr;
-
- pr.first = qt_("Decrease");
- pr.second = FONT_SIZE_DECREASE;
- size[12] = pr;
-
- pr.first = qt_("Reset");
- pr.second = FONT_SIZE_INHERIT;
- size[13] = pr;
-
- return size;
+ QList<SizePair> sizes;
+ sizes << SizePair(qt_("No change"), FONT_SIZE_IGNORE);
+ sizes << SizePair(qt_("Tiny"), FONT_SIZE_TINY);
+ sizes << SizePair(qt_("Smallest"), FONT_SIZE_SCRIPT);
+ sizes << SizePair(qt_("Smaller"), FONT_SIZE_FOOTNOTE);
+ sizes << SizePair(qt_("Small"), FONT_SIZE_SMALL);
+ sizes << SizePair(qt_("Normal"), FONT_SIZE_NORMAL);
+ sizes << SizePair(qt_("Large"), FONT_SIZE_LARGE);
+ sizes << SizePair(qt_("Larger"), FONT_SIZE_LARGER);
+ sizes << SizePair(qt_("Largest"), FONT_SIZE_LARGEST);
+ sizes << SizePair(qt_("Huge"), FONT_SIZE_HUGE);
+ sizes << SizePair(qt_("Huger"), FONT_SIZE_HUGER);
+ sizes << SizePair(qt_("Increase"), FONT_SIZE_INCREASE);
+ sizes << SizePair(qt_("Decrease"), FONT_SIZE_DECREASE);
+ sizes << SizePair(qt_("Reset"), FONT_SIZE_INHERIT);
+ return sizes;
}
-static vector<BarPair> const getBarData()
+static QList<BarPair> barData()
{
- vector<BarPair> bar(5);
-
- BarPair pr;
-
- pr.first = qt_("No change");
- pr.second = IGNORE;
- bar[0] = pr;
-
- pr.first = qt_("Emph");
- pr.second = EMPH_TOGGLE;
- bar[1] = pr;
-
- pr.first = qt_("Underbar");
- pr.second = UNDERBAR_TOGGLE;
- bar[2] = pr;
-
- pr.first = qt_("Noun");
- pr.second = NOUN_TOGGLE;
- bar[3] = pr;
-
- pr.first = qt_("Reset");
- pr.second = INHERIT;
- bar[4] = pr;
-
- return bar;
+ QList<BarPair> bars;
+ bars << BarPair(qt_("No change"), IGNORE);
+ bars << BarPair(qt_("Emph"), EMPH_TOGGLE);
+ bars << BarPair(qt_("Underbar"), UNDERBAR_TOGGLE);
+ bars << BarPair(qt_("Noun"), NOUN_TOGGLE);
+ bars << BarPair(qt_("Reset"), INHERIT);
+ return bars;
}
-static vector<ColorPair> const getColorData()
+static QList<ColorPair> colorData()
{
- vector<ColorPair> color(11);
-
- ColorPair pr;
-
- pr.first = qt_("No change");
- pr.second = Color_ignore;
- color[0] = pr;
-
- pr.first = qt_("No color");
- pr.second = Color_none;
- color[1] = pr;
-
- pr.first = qt_("Black");
- pr.second = Color_black;
- color[2] = pr;
-
- pr.first = qt_("White");
- pr.second = Color_white;
- color[3] = pr;
-
- pr.first = qt_("Red");
- pr.second = Color_red;
- color[4] = pr;
-
- pr.first = qt_("Green");
- pr.second = Color_green;
- color[5] = pr;
-
- pr.first = qt_("Blue");
- pr.second = Color_blue;
- color[6] = pr;
-
- pr.first = qt_("Cyan");
- pr.second = Color_cyan;
- color[7] = pr;
-
- pr.first = qt_("Magenta");
- pr.second = Color_magenta;
- color[8] = pr;
-
- pr.first = qt_("Yellow");
- pr.second = Color_yellow;
- color[9] = pr;
-
- pr.first = qt_("Reset");
- pr.second = Color_inherit;
- color[10] = pr;
-
- return color;
+ QList<ColorPair> colors;
+ colors << ColorPair(qt_("No change"), Color_ignore);
+ colors << ColorPair(qt_("No color"), Color_none);
+ colors << ColorPair(qt_("Black"), Color_black);
+ colors << ColorPair(qt_("White"), Color_white);
+ colors << ColorPair(qt_("Red"), Color_red);
+ colors << ColorPair(qt_("Green"), Color_green);
+ colors << ColorPair(qt_("Blue"), Color_blue);
+ colors << ColorPair(qt_("Cyan"), Color_cyan);
+ colors << ColorPair(qt_("Magenta"), Color_magenta);
+ colors << ColorPair(qt_("Yellow"), Color_yellow);
+ colors << ColorPair(qt_("Reset"), Color_inherit);
+ return colors;
}
-static vector<SeriesPair> const getSeriesData()
+static QList<SeriesPair> seriesData()
{
- vector<SeriesPair> series(4);
-
- SeriesPair pr;
-
- pr.first = qt_("No change");
- pr.second = IGNORE_SERIES;
- series[0] = pr;
-
- pr.first = qt_("Medium");
- pr.second = MEDIUM_SERIES;
- series[1] = pr;
-
- pr.first = qt_("Bold");
- pr.second = BOLD_SERIES;
- series[2] = pr;
-
- pr.first = qt_("Reset");
- pr.second = INHERIT_SERIES;
- series[3] = pr;
-
+ QList<SeriesPair> series;
+ series << SeriesPair(qt_("No change"), IGNORE_SERIES);
+ series << SeriesPair(qt_("Medium"), MEDIUM_SERIES);
+ series << SeriesPair(qt_("Bold"), BOLD_SERIES);
+ series << SeriesPair(qt_("Reset"), INHERIT_SERIES);
return series;
}
-static vector<FamilyPair> const getFamilyData()
+static QList<FamilyPair> familyData()
{
- vector<FamilyPair> family(5);
-
- FamilyPair pr;
-
- pr.first = qt_("No change");
- pr.second = IGNORE_FAMILY;
- family[0] = pr;
-
- pr.first = qt_("Roman");
- pr.second = ROMAN_FAMILY;
- family[1] = pr;
-
- pr.first = qt_("Sans Serif");
- pr.second = SANS_FAMILY;
- family[2] = pr;
-
- pr.first = qt_("Typewriter");
- pr.second = TYPEWRITER_FAMILY;
- family[3] = pr;
-
- pr.first = qt_("Reset");
- pr.second = INHERIT_FAMILY;
- family[4] = pr;
-
- return family;
+ QList<FamilyPair> families;
+ families << FamilyPair(qt_("No change"), IGNORE_FAMILY);
+ families << FamilyPair(qt_("Roman"), ROMAN_FAMILY);
+ families << FamilyPair(qt_("Sans Serif"), SANS_FAMILY);
+ families << FamilyPair(qt_("Typewriter"), TYPEWRITER_FAMILY);
+ families << FamilyPair(qt_("Reset"), INHERIT_FAMILY);
+ return families;
}
autoapplyCB->setChecked(true);
#endif
- family = getFamilyData();
- series = getSeriesData();
- shape = getShapeData();
- size = getSizeData();
- bar = getBarData();
- color = getColorData();
- language = getLanguageData(true);
+ family = familyData();
+ series = seriesData();
+ shape = shapeData();
+ size = sizeData();
+ bar = barData();
+ color = colorData();
+ language = languageData(true);
- for (vector<FamilyPair>::const_iterator cit = family.begin();
+ for (QList<FamilyPair>::const_iterator cit = family.begin();
cit != family.end(); ++cit) {
familyCO->addItem(cit->first);
}
- for (vector<SeriesPair>::const_iterator cit = series.begin();
+ for (QList<SeriesPair>::const_iterator cit = series.begin();
cit != series.end(); ++cit) {
seriesCO->addItem(cit->first);
}
- for (vector<ShapePair>::const_iterator cit = shape.begin();
+ for (QList<ShapePair>::const_iterator cit = shape.begin();
cit != shape.end(); ++cit) {
shapeCO->addItem(cit->first);
}
- for (vector<SizePair>::const_iterator cit = size.begin();
+ for (QList<SizePair>::const_iterator cit = size.begin();
cit != size.end(); ++cit) {
sizeCO->addItem(cit->first);
}
- for (vector<BarPair>::const_iterator cit = bar.begin();
+ for (QList<BarPair>::const_iterator cit = bar.begin();
cit != bar.end(); ++cit) {
miscCO->addItem(cit->first);
}
- for (vector<ColorPair>::const_iterator cit = color.begin();
+ for (QList<ColorPair>::const_iterator cit = color.begin();
cit != color.end(); ++cit) {
colorCO->addItem(cit->first);
}
- for (vector<LanguagePair>::const_iterator cit = language.begin();
+ for (QList<LanguagePair>::const_iterator cit = language.begin();
cit != language.end(); ++cit) {
- langCO->addItem(toqstr(cit->first));
+ langCO->addItem(cit->first);
}
bc().setPolicy(ButtonPolicy::OkApplyCancelReadOnlyPolicy);
}
-template<class A, class B>
-static int findPos2nd(vector<pair<A, B> > const & vec, B const & val)
+template<class B>
+static int findPos2nd(QList<pair<QString, B> > const & vec, B const & val)
{
- typedef typename vector<pair<A, B> >::const_iterator
- const_iterator;
-
- for (const_iterator cit = vec.begin(); cit != vec.end(); ++cit)
- if (cit->second == val)
- return int(cit - vec.begin());
-
+ for (int i = 0; i != vec.size(); ++i)
+ if (vec[i].second == val)
+ return i;
return 0;
}
}
-string GuiCharacter::getLanguage() const
+QString GuiCharacter::getLanguage() const
{
if (reset_lang_)
return "reset";
if (font_.language())
- return font_.language()->lang();
+ return toqstr(font_.language()->lang());
return "ignore";
}
-void GuiCharacter::setLanguage(string const & val)
+void GuiCharacter::setLanguage(QString const & val)
{
if (val == "ignore")
font_.setLanguage(ignore_language);
// Ignored in getLanguage, but needed for dispatchParams
font_.setLanguage(buffer().params().language);
} else {
- font_.setLanguage(languages.getLanguage(val));
+ font_.setLanguage(languages.getLanguage(fromqstr(val)));
}
}
#include "qt_helpers.h" // for LanguagePair
#include "Font.h"
-#include <vector>
-
namespace lyx {
-
namespace frontend {
enum FontState {
INHERIT
};
+typedef std::pair<QString, FontFamily> FamilyPair;
typedef std::pair<QString, FontFamily> FamilyPair;
typedef std::pair<QString, FontSeries> SeriesPair;
typedef std::pair<QString, FontShape> ShapePair;
typedef std::pair<QString, FontSize> SizePair;
-typedef std::pair<QString, FontState> BarPair;
-typedef std::pair<QString, ColorCode> ColorPair;
+typedef std::pair<QString, FontState> BarPair;
+typedef std::pair<QString, ColorCode> ColorPair;
class GuiCharacter : public GuiDialog, public Ui::CharacterUi
{
/// update
void updateContents();
- std::vector<FamilyPair> family;
- std::vector<SeriesPair> series;
- std::vector<ShapePair> shape;
- std::vector<SizePair> size;
- std::vector<BarPair> bar;
- std::vector<ColorPair> color;
- std::vector<LanguagePair> language;
+ QList<FamilyPair> family;
+ QList<SeriesPair> series;
+ QList<ShapePair> shape;
+ QList<SizePair> size;
+ QList<BarPair> bar;
+ QList<ColorPair> color;
+ QList<LanguagePair> language;
///
bool initialiseParams(std::string const & data);
///
void setColor(ColorCode);
///
- void setLanguage(std::string const &);
+ void setLanguage(QString const &);
///
FontFamily getFamily() const;
///
ColorCode getColor() const;
///
- std::string getLanguage() const;
+ QString getLanguage() const;
private:
///
#include "frontends/alert.h"
-#include <boost/bind.hpp>
-
#include <QCloseEvent>
#include <QScrollBar>
#include <QTextCursor>
-#include <algorithm>
#include <sstream>
using namespace std;
namespace {
-///
-template<class Pair>
-vector<typename Pair::second_type> const
-getSecond(vector<Pair> const & pr)
-{
- vector<typename Pair::second_type> tmp(pr.size());
- transform(pr.begin(), pr.end(), tmp.begin(),
- boost::bind(&Pair::second, _1));
- return tmp;
-}
-
char const * const tex_graphics[] =
{
: GuiDialog(lv, "document", qt_("Document Settings")), current_id_(0)
{
setupUi(this);
-
- lang_ = getSecond(getLanguageData(false));
+
+ QList<LanguagePair> langs = languageData(false);
+ for (int i = 0; i != langs.size(); ++i)
+ lang_.append(langs[i].second);
connect(okPB, SIGNAL(clicked()), this, SLOT(slotOK()));
connect(applyPB, SIGNAL(clicked()), this, SLOT(slotApply()));
connect(langModule->quoteStyleCO, SIGNAL(activated(int)),
this, SLOT(change_adaptor()));
// language & quotes
- vector<LanguagePair> const langs = getLanguageData(false);
- vector<LanguagePair>::const_iterator lit = langs.begin();
- vector<LanguagePair>::const_iterator lend = langs.end();
- for (; lit != lend; ++lit) {
- langModule->languageCO->addItem(toqstr(lit->first));
- }
+
+ QList<LanguagePair>::const_iterator lit = langs.begin();
+ QList<LanguagePair>::const_iterator lend = langs.end();
+ for (; lit != lend; ++lit)
+ langModule->languageCO->addItem(lit->first);
// Always put the default encoding in the first position.
// It is special because the displayed text is translated.
langModule->quoteStyleCO->addItem(qt_(">>text<<"));
-
numberingModule = new UiWidget<Ui::NumberingUi>;
// numbering
connect(numberingModule->depthSL, SIGNAL(valueChanged(int)),
params.quotes_language = lga;
int const pos = langModule->languageCO->currentIndex();
- params.language = lyx::languages.getLanguage(lang_[pos]);
+ params.language = lyx::languages.getLanguage(fromqstr(lang_[pos]));
// numbering
if (params.documentClass().hasTocLevels()) {
params.orientation = ORIENTATION_PORTRAIT;
// margins
- params.use_geometry =
- (!marginsModule->marginCB->isChecked()
- || geom_papersize);
+ params.use_geometry = !marginsModule->marginCB->isChecked()
+ || geom_papersize;
- Ui::MarginsUi const * m(marginsModule);
+ Ui::MarginsUi const * m = marginsModule;
params.leftmargin = widgetsToLength(m->innerLE, m->innerUnit);
params.topmargin = widgetsToLength(m->topLE, m->topUnit);
}
-/** Return the position of val in the vector if found.
- If not found, return 0.
- */
-template<class A>
-static size_t findPos(vector<A> const & vec, A const & val)
-{
- typename vector<A>::const_iterator it =
- find(vec.begin(), vec.end(), val);
- if (it == vec.end())
- return 0;
- return distance(vec.begin(), it);
+static int findPos(QStringList const & vec, QString const & val)
+{
+ for (int i = 0; i != vec.size(); ++i)
+ if (vec[i] == val)
+ return i;
+ return 0;
}
params.use_bibtopic);
// language & quotes
- int const pos = int(findPos(lang_,
- params.language->lang()));
+ int const pos = findPos(lang_, toqstr(params.language->lang()));
langModule->languageCO->setCurrentIndex(pos);
langModule->quoteStyleCO->setCurrentIndex(
modules_av_model_.clear();
vector<modInfoStruct> const modInfoList = getModuleInfo();
int const mSize = modInfoList.size();
- for (int i = 0; i < mSize; ++i) {
+ for (int i = 0; i != mSize; ++i) {
modInfoStruct const & modInfo = modInfoList[i];
modules_av_model_.insertRow(i, qt_(modInfo.name), modInfo.id);
}
void GuiDocument::updateSelectedModules()
{
- //and selected ones, too
+ // and selected ones, too
modules_sel_model_.clear();
vector<modInfoStruct> const selModList = getSelectedModules();
int const sSize = selModList.size();
- for (int i = 0; i < sSize; ++i) {
+ for (int i = 0; i != sSize; ++i) {
modInfoStruct const & modInfo = selModList[i];
modules_sel_model_.insertRow(i, qt_(modInfo.name), modInfo.id);
}
bool GuiDocument::isValid()
{
- return (validate_listings_params().empty() &&
- (textLayoutModule->skipCO->currentIndex() != 3 ||
- !textLayoutModule->skipLE->text().isEmpty()));
+ return validate_listings_params().empty()
+ && (textLayoutModule->skipCO->currentIndex() != 3
+ || !textLayoutModule->skipLE->text().isEmpty());
}
GuiSelectionManager * selectionManager;
- // FIXME
- std::vector<std::string> lang_;
+ ///
+ QStringList lang_;
/// Available modules
GuiIdListModel * availableModel() { return &modules_av_model_; }
#include "support/FileFilterList.h"
#include "support/FileName.h"
#include "support/filetools.h"
+#include "support/foreach.h"
#include "support/gettext.h"
#include "support/lstrings.h"
#include "support/os.h"
//
/////////////////////////////////////////////////////////////////////
-FileName libFileSearch(QString const & dir, QString const & name,
- QString const & ext = QString())
-{
- return support::libFileSearch(fromqstr(dir), fromqstr(name), fromqstr(ext));
-}
-
-
/** Launch a file dialog and return the chosen file.
filename: a suggested filename.
title: the title of the dialog.
// remove the extension if it is the default one
QString noextresult;
- if (toqstr(getExtension(fromqstr(result))) == ext)
- noextresult = toqstr(removeExtension(fromqstr(result)));
+ if (getExtension(result) == ext)
+ noextresult = removeExtension(result);
else
noextresult = result;
namespace frontend {
-template<class A>
-static size_t findPos_helper(vector<A> const & vec, A const & val)
+static int findPos_helper(QStringList const & vec, QString const & val)
{
- typedef typename vector<A>::const_iterator Cit;
-
- Cit it = find(vec.begin(), vec.end(), val);
- if (it == vec.end())
- return 0;
- return distance(vec.begin(), it);
+ for (int i = 0; i != vec.size(); ++i)
+ if (vec[i] == val)
+ return i;
+ return 0;
}
defaultLanguageCO->clear();
// store the lang identifiers for later
- vector<LanguagePair> const langs = getLanguageData(false);
- vector<LanguagePair>::const_iterator lit = langs.begin();
- vector<LanguagePair>::const_iterator lend = langs.end();
- lang_.clear();
- for (; lit != lend; ++lit) {
- defaultLanguageCO->addItem(toqstr(lit->first));
- lang_.push_back(lit->second);
+ foreach (LanguagePair const & lpair, languageData(false)) {
+ defaultLanguageCO->addItem(lpair.first);
+ lang_.append(lpair.second);
}
}
rc.language_package = fromqstr(languagePackageED->text());
rc.language_command_begin = fromqstr(startCommandED->text());
rc.language_command_end = fromqstr(endCommandED->text());
- rc.default_language = lang_[defaultLanguageCO->currentIndex()];
+ rc.default_language = fromqstr(lang_[defaultLanguageCO->currentIndex()]);
}
startCommandED->setText(toqstr(rc.language_command_begin));
endCommandED->setText(toqstr(rc.language_command_end));
- int const pos = int(findPos_helper(lang_, rc.default_language));
+ int const pos = findPos_helper(lang_, toqstr(rc.default_language));
defaultLanguageCO->setCurrentIndex(pos);
}
void update(LyXRC const & rc);
private:
- std::vector<std::string> lang_;
+ QStringList lang_;
};
bool GuiPrint::initialiseParams(string const &)
{
/// get global printer parameters
- string const name = changeExtension(buffer().absFileName(),
+ string const name = support::changeExtension(buffer().absFileName(),
lyxrc.print_file_extension);
params_ = PrinterParams(PrinterParams::PRINTER, lyxrc.printer, name);
#include "support/debug.h"
#include "support/filetools.h"
+#include "support/foreach.h"
#include "support/FileName.h"
#include "support/lstrings.h"
namespace lyx {
namespace frontend {
-
-static string texFileFromList(string const & file, string const & type)
+static QString texFileFromList(QString const & file, QString const & type)
{
- string file_ = file;
+ QString file_ = file;
// do we need to add the suffix?
- if (!(getExtension(file) == type))
+ if (getExtension(file) != type)
file_ += '.' + type;
- lyxerr << "Searching for file " << file_ << endl;
+ lyxerr << "Searching for file " << fromqstr(file_) << endl;
- string lstfile = type + "Files.lst";
+ QString lstfile = type + "Files.lst";
if (type == "cls")
lstfile = "clsFiles.lst";
else if (type == "sty")
lstfile = "bstFiles.lst";
else if (type == "bib")
lstfile = "bibFiles.lst";
- FileName const abslstfile = libFileSearch(string(), lstfile);
+ FileName const abslstfile = libFileSearch(QString(), lstfile);
if (abslstfile.empty()) {
- lyxerr << "File `'" << lstfile << "' not found." << endl;
- return string();
+ lyxerr << "File `'" << fromqstr(lstfile) << "' not found." << endl;
+ return QString();
}
// FIXME UNICODE
string const allClasses = to_utf8(abslstfile.fileContents("UTF-8"));
int entries = 0;
string classfile = token(allClasses, '\n', entries);
int count = 0;
- while ((!contains(classfile, file) ||
- (support::onlyFilename(classfile) != file)) &&
- (++count < 1000)) {
+ while ((!contains(classfile, fromqstr(file))
+ || support::onlyFilename(classfile) != fromqstr(file))
+ && ++count < 1000) {
classfile = token(allClasses, '\n', ++entries);
}
// now we have filename with full path
lyxerr << "with full path: " << classfile << endl;
- return classfile;
+ return toqstr(classfile);
}
{
setupUi(this);
- warningPosted = false;
- activeStyle = ClsType;
+ warningPosted_ = false;
+ activeStyle_ = ClsType;
connect(closePB, SIGNAL(clicked()), this, SLOT(slotClose()));
void GuiTexInfo::viewClicked()
{
- size_t const fitem = fileListLW->currentRow();
- vector<string> const & data = texdata_[activeStyle];
- string file = data[fitem];
+ // takes advantage of enum order
+ static QString const ext[] = { "cls", "sty", "bst" };
+ int const fitem = fileListLW->currentRow();
+ QStringList const & data = texdata_[activeStyle_];
+ QString file = data[fitem];
if (!pathCB->isChecked())
- file = texFileFromList(data[fitem], fileType(activeStyle));
+ file = texFileFromList(data[fitem], ext[activeStyle_]);
viewFile(file);
}
void GuiTexInfo::updateStyles(TexFileType type)
{
- ContentsType & data = texdata_[type];
+ static QString const filenames[] = {
+ "clsFile.lst", "styFiles.lst", "bstFiles.lst"
+ };
- static string filenames[] = { "clsFiles.lst", "styFiles.lst", "bstFiles.lst" };
- string filename = filenames[type];
+ QString const filename = filenames[type];
- getTexFileList(filename, data);
+ QStringList data = texFileList(filename);
if (data.empty()) {
// build filelists of all availabe bst/cls/sty-files.
// Done through kpsewhich and an external script,
// saved in *Files.lst
rescanTexStyles();
- getTexFileList(filename, data);
+ data = texFileList(filename);
}
+
if (!pathCB->isChecked()) {
- vector<string>::iterator it1 = data.begin();
- vector<string>::iterator end1 = data.end();
- for (; it1 != end1; ++it1)
- *it1 = support::onlyFilename(*it1);
+ for (int i = 0; i != data.size(); ++i)
+ data[i] = onlyFilename(data[i]);
}
// sort on filename only (no path)
- sort(data.begin(), data.end());
+ data.sort();
fileListLW->clear();
- ContentsType::const_iterator it = data.begin();
- ContentsType::const_iterator end = data.end();
- for (; it != end; ++it)
- fileListLW->addItem(toqstr(*it));
+ foreach (QString const & item, data)
+ fileListLW->addItem(item);
- activeStyle = type;
+ activeStyle_ = type;
+ texdata_[type] = data;
}
void GuiTexInfo::updateStyles()
{
- updateStyles(activeStyle);
+ updateStyles(activeStyle_);
}
-void GuiTexInfo::viewFile(string const & filename) const
+void GuiTexInfo::viewFile(QString const & filename) const
{
- dispatch(FuncRequest(LFUN_DIALOG_SHOW, "file " + filename));
+ dispatch(FuncRequest(LFUN_DIALOG_SHOW, "file " + fromqstr(filename)));
}
/// get a class with full path from the list
+/*
string GuiTexInfo::classOptions(string const & classname) const
{
FileName const filename(texFileFromList(classname, "cls"));
}
return optionList;
}
-
-
-string GuiTexInfo::fileType(TexFileType type) const
-{
- // takes advantage of enum order
- static string const ext[] = { "cls", "sty", "bst" };
- return ext[type];
-}
+*/
Dialog * createGuiTexInfo(GuiView & lv) { return new GuiTexInfo(lv); }
#include "ui_TexinfoUi.h"
#include "qt_helpers.h"
-#include <map>
-#include <vector>
-
namespace lyx {
namespace frontend {
///
GuiTexInfo(GuiView & lv);
/// the file extensions. order matters in GuiTexInfo::fileType()
- enum TexFileType { ClsType, StyType, BstType };
+ enum TexFileType { ClsType = 0, StyType, BstType, DummyLastType };
public Q_SLOTS:
///
void enableViewPB();
private:
- ///
- void updateStyles(TexFileType);
- ///
- void updateStyles();
- ///
- bool warningPosted;
- ///
- TexFileType activeStyle;
/// Nothing to initialise in this case.
bool initialiseParams(std::string const &) { return true; }
///
///
void apply() {}
+ ///
+ void updateStyles(TexFileType);
+ ///
+ void updateStyles();
+ ///
+ bool warningPosted_;
+ ///
+ TexFileType activeStyle_;
+
/// show contents af a file
- void viewFile(std::string const & filename) const;
+ void viewFile(QString const & filename) const;
/// show all classoptions
- std::string classOptions(std::string const & filename) const;
- /// return file type as string
- std::string fileType(TexFileType type) const;
+ //std::string classOptions(std::string const & filename) const;
- typedef std::vector<std::string> ContentsType;
- std::map<TexFileType, ContentsType> texdata_;
+ QStringList texdata_[DummyLastType];
};
namespace {
struct PngMap {
- char const * key;
- char const * value;
+ QString key;
+ QString value;
};
bool operator<(PngMap const & lhs, PngMap const & rhs)
{
- return strcmp(lhs.key, rhs.key) < 0;
+ return lhs.key < rhs.key;
}
class CompareKey {
public:
- CompareKey(string const & name) : name_(name) {}
+ CompareKey(QString const & name) : name_(name) {}
bool operator()(PngMap const & other) const { return other.key == name_; }
private:
- string const name_;
+ QString const name_;
};
size_t const nr_sorted_png_map = sizeof(sorted_png_map) / sizeof(PngMap);
-string const find_png(string const & name)
+QString findPng(QString const & name)
{
PngMap const * const begin = sorted_png_map;
PngMap const * const end = begin + nr_sorted_png_map;
PngMap const * const it = find_if(begin, end, CompareKey(name));
- string png_name;
- if (it != end)
+ QString png_name;
+ if (it != end) {
png_name = it->value;
- else {
- png_name = subst(name, "_", "underscore");
- png_name = subst(png_name, ' ', '_');
+ } else {
+ png_name = name;
+ png_name.replace('_', "underscore");
+ png_name.replace(' ', '_');
// This way we can have "math-delim { }" on the toolbar.
- png_name = subst(png_name, "(", "lparen");
- png_name = subst(png_name, ")", "rparen");
- png_name = subst(png_name, "[", "lbracket");
- png_name = subst(png_name, "]", "rbracket");
- png_name = subst(png_name, "{", "lbrace");
- png_name = subst(png_name, "}", "rbrace");
- png_name = subst(png_name, "|", "bars");
- png_name = subst(png_name, ",", "thinspace");
- png_name = subst(png_name, ":", "mediumspace");
- png_name = subst(png_name, ";", "thickspace");
- png_name = subst(png_name, "!", "negthinspace");
+ png_name.replace('(', "lparen");
+ png_name.replace(')', "rparen");
+ png_name.replace('[', "lbracket");
+ png_name.replace(']', "rbracket");
+ png_name.replace('{', "lbrace");
+ png_name.replace('}', "rbrace");
+ png_name.replace('|', "bars");
+ png_name.replace(',', "thinspace");
+ png_name.replace(':', "mediumspace");
+ png_name.replace(';', "thickspace");
+ png_name.replace('!', "negthinspace");
}
- LYXERR(Debug::GUI, "find_png(" << name << ")\n"
- << "Looking for math PNG called \"" << png_name << '"');
+ LYXERR(Debug::GUI, "findPng(" << fromqstr(name) << ")\n"
+ << "Looking for math PNG called \"" << fromqstr(png_name) << '"');
return png_name;
}
{
initializeResources();
QPixmap pm;
- string name1;
- string name2;
- string path;
- string fullname;
-
+ QString name1;
+ QString name2;
+ QString path;
switch (f.action) {
case LFUN_MATH_INSERT:
if (!f.argument().empty()) {
path = "math/";
- name1 = find_png(to_utf8(f.argument()).substr(1));
+ name1 = findPng(toqstr(f.argument()).mid(1));
}
break;
case LFUN_MATH_DELIM:
case LFUN_MATH_BIGDELIM:
path = "math/";
- name1 = find_png(to_utf8(f.argument()));
+ name1 = findPng(toqstr(f.argument()));
break;
case LFUN_CALL:
path = "commands/";
- name1 = to_utf8(f.argument());
+ name1 = toqstr(f.argument());
break;
default:
- name2 = lyxaction.getActionName(f.action);
+ name2 = toqstr(lyxaction.getActionName(f.action));
name1 = name2;
- if (!f.argument().empty())
- name1 = subst(name2 + ' ' + to_utf8(f.argument()), ' ', '_');
+ if (!f.argument().empty()) {
+ name1 = name2 + ' ' + toqstr(f.argument());
+ name1.replace(' ', '_');
+ }
}
- fullname = libFileSearch("images/" + path, name1, "png").absFilename();
+ string fullname = libFileSearch("images/" + path, name1, "png").absFilename();
if (pm.load(toqstr(fullname)))
return pm;
if (pm.load(toqstr(fullname)))
return pm;
- if (pm.load(":/images/" + toqstr(path + name1) + ".png"))
+ if (pm.load(":/images/" + path + name1 + ".png"))
return pm;
- if (pm.load(":/images/" + toqstr(path + name2) + ".png"))
+ if (pm.load(":/images/" + path + name2 + ".png"))
return pm;
LYXERR(Debug::GUI, "Cannot find icon for command \""
public:
///
explicit FilterItemDelegate(QObject * parent = 0)
- : QAbstractItemDelegate(parent) {}
+ : QAbstractItemDelegate(parent)
+ {}
///
void paint(QPainter * painter, QStyleOptionViewItem const & option,
- QModelIndex const & index) const {
+ QModelIndex const & index) const
+ {
QComboBox * combo = static_cast<QComboBox *>(parent());
QStyleOptionMenuItem opt = getStyleOption(option, index);
///
QSize sizeHint(QStyleOptionViewItem const & option,
- QModelIndex const & index) const {
+ QModelIndex const & index) const
+ {
QComboBox * combo = static_cast<QComboBox *>(parent());
QStyleOptionMenuItem opt = getStyleOption(option, index);
static bool import(GuiView * lv, FileName const & filename,
string const & format, ErrorList & errorList)
{
- FileName const lyxfile(changeExtension(filename.absFilename(), ".lyx"));
+ FileName const lyxfile(support::changeExtension(filename.absFilename(), ".lyx"));
string loader_format;
vector<string> loaders = theConverters().loaders();
continue;
string const tofile =
- changeExtension(filename.absFilename(),
+ support::changeExtension(filename.absFilename(),
formats.extension(*it));
if (!theConverters().convert(0, filename, FileName(tofile),
filename, format, *it, errorList))
lv->setBuffer(b);
bool as_paragraphs = loader_format == "textparagraph";
string filename2 = (loader_format == format) ? filename.absFilename()
- : changeExtension(filename.absFilename(),
+ : support::changeExtension(filename.absFilename(),
formats.extension(loader_format));
lv->view()->insertPlaintextFile(FileName(filename2), as_paragraphs);
theLyXFunc().setLyXView(lv);
// get absolute path of file
FileName const fullname(makeAbsPath(filename));
- FileName const lyxfile(changeExtension(fullname.absFilename(), ".lyx"));
+ FileName const lyxfile(support::changeExtension(fullname.absFilename(), ".lyx"));
// Check if the document already is open
Buffer * buf = theBufferList().getBuffer(lyxfile.absFilename());
#include "support/debug.h"
#include "support/filetools.h"
+#include "support/foreach.h"
#include "support/gettext.h"
#include "support/lstrings.h"
#include "support/lyxalgo.h"
#include "support/Path.h"
#include "support/Systemcall.h"
-#include <QComboBox>
#include <QCheckBox>
-#include <QPalette>
+#include <QComboBox>
#include <QLineEdit>
-
-#include <boost/cregex.hpp>
+#include <QPalette>
+#include <QSet>
#include <algorithm>
#include <fstream>
using namespace lyx::support;
namespace lyx {
+
+FileName libFileSearch(QString const & dir, QString const & name,
+ QString const & ext)
+{
+ return support::libFileSearch(fromqstr(dir), fromqstr(name), fromqstr(ext));
+}
+
namespace frontend {
string widgetsToLength(QLineEdit const * input, LengthCombo const * combo)
{
public:
#if !defined(USE_WCHAR_T) && defined(__GNUC__)
- bool operator()(LanguagePair const & lhs, LanguagePair const & rhs) const {
+ bool operator()(LanguagePair const & lhs, LanguagePair const & rhs) const
+ {
return lhs.first < rhs.first;
}
#else
} catch (...) {
loc_ok = false;
}
- };
+ }
- bool operator()(LanguagePair const & lhs,
- LanguagePair const & rhs) const {
+ bool operator()(LanguagePair const & lhs, LanguagePair const & rhs) const
+ {
+ // FIXME: would that be "QString::localeAwareCompare()"?
if (loc_ok)
- return loc_(lhs.first, rhs.first);
+ return loc_(fromqstr(lhs.first), fromqstr(rhs.first));
else
return lhs.first < rhs.first;
}
} // namespace anon
-vector<LanguagePair> const getLanguageData(bool character_dlg)
+QList<LanguagePair> languageData(bool character_dlg)
{
- size_t const size = languages.size() + (character_dlg ? 2 : 0);
-
- vector<LanguagePair> langs(size);
+ size_t const offset = character_dlg ? 2 : 0;
+ vector<LanguagePair> langs(languages.size() + offset);
if (character_dlg) {
- langs[0].first = _("No change");
+ langs[0].first = qt_("No change");
langs[0].second = "ignore";
- langs[1].first = _("Reset");
+ langs[1].first = qt_("Reset");
langs[1].second = "reset";
}
- size_t i = character_dlg ? 2 : 0;
- for (Languages::const_iterator cit = languages.begin();
- cit != languages.end(); ++cit) {
- langs[i].first = _(cit->second.display());
- langs[i].second = cit->second.lang();
- ++i;
+ Languages::const_iterator it = languages.begin();
+ for (size_t i = 0; i != languages.size(); ++i, ++it) {
+ langs[i + offset].first = qt_(it->second.display());
+ langs[i + offset].second = toqstr(it->second.lang());
}
// Don't sort "ignore" and "reset"
- vector<LanguagePair>::iterator begin = character_dlg ?
- langs.begin() + 2 : langs.begin();
-
+ vector<LanguagePair>::iterator begin = langs.begin() + offset;
sort(begin, langs.end(), Sorter());
- return langs;
+ QList<LanguagePair> list;
+ foreach (LanguagePair const & l, langs)
+ list.append(l);
+ return list;
}
+
void rescanTexStyles()
{
// Run rescan in user lyx directory
}
-void getTexFileList(string const & filename, vector<string> & list)
+QStringList texFileList(QString const & filename)
{
- list.clear();
- FileName const file = libFileSearch("", filename);
+ QStringList list;
+ FileName const file = libFileSearch(QString(), filename);
if (file.empty())
- return;
+ return list;
// FIXME Unicode.
vector<docstring> doclist =
getVectorFromString(file.fileContents("UTF-8"), from_ascii("\n"));
// Normalise paths like /foo//bar ==> /foo/bar
- boost::RegEx regex("/{2,}");
- vector<docstring>::iterator it = doclist.begin();
- vector<docstring>::iterator end = doclist.end();
- for (; it != end; ++it)
- list.push_back(regex.Merge(to_utf8(*it), "/"));
-
- // remove empty items and duplicates
- list.erase(remove(list.begin(), list.end(), ""), list.end());
- eliminate_duplicates(list);
+ QSet<QString> set;
+ for (size_t i = 0; i != doclist.size(); ++i) {
+ QString file = toqstr(doclist[i]);
+ while (file.contains("//"))
+ file.replace("//", "/");
+ if (!file.isEmpty())
+ set.insert(file);
+ }
+
+ // remove duplicates
+ return QList<QString>::fromSet(set);
}
return toqstr(support::onlyPath(fromqstr(str)));
}
+
+QString changeExtension(QString const & oldname, QString const & ext)
+{
+ return toqstr(support::changeExtension(fromqstr(oldname), fromqstr(ext)));
+}
+
+/// Remove the extension from \p name
+QString removeExtension(QString const & name)
+{
+ return toqstr(support::removeExtension(fromqstr(name)));
+}
+
+/** Add the extension \p ext to \p name.
+ Use this instead of changeExtension if you know that \p name is without
+ extension, because changeExtension would wrongly interpret \p name if it
+ contains a dot.
+ */
+QString addExtension(QString const & name, QString const & ext)
+{
+ return toqstr(support::addExtension(fromqstr(name), fromqstr(ext)));
+}
+
+/// Return the extension of the file (not including the .)
+QString getExtension(QString const & name)
+{
+ return toqstr(support::getExtension(fromqstr(name)));
+}
+
} // namespace lyx
#include "support/qstring_helpers.h"
#include "support/strfwd.h"
-#include <vector>
-
class QComboBox;
class QLineEdit;
class QCheckBox;
class QString;
class QWidget;
+template <class T> class QList;
class LengthCombo;
namespace lyx {
namespace support { class FileFilterList; }
+namespace support { class FileName; }
namespace frontend {
QString const qt_(std::string const & str);
///
-typedef std::pair<docstring, std::string> LanguagePair;
+typedef std::pair<QString, QString> LanguagePair;
/** If the caller is the character dialog, add "No change" and "Reset"
* to the vector.
*/
-std::vector<LanguagePair> const getLanguageData(bool character_dlg);
+QList<LanguagePair> languageData(bool character_dlg);
+
+support::FileName libFileSearch(QString const & dir, QString const & name,
+ QString const & ext = QString());
/** Wrapper around browseFile which tries to provide a filename
relative to relpath. If the relative path is of the form "foo.txt"
/** Fill \c contents from one of the three texfiles.
* Each entry in the file list is returned as a name_with_path
*/
-void getTexFileList(std::string const & filename, std::vector<std::string> & contents);
+QStringList texFileList(QString const & filename);
// wrapper around the docstring versions
-QString internalPath(const QString &);
-QString onlyFilename(const QString & str);
-QString onlyPath(const QString & str);
+QString internalPath(QString const &);
+QString onlyFilename(QString const & str);
+QString onlyPath(QString const & str);
+
+QString changeExtension(QString const & oldname, QString const & extension);
+
+/// Remove the extension from \p name
+QString removeExtension(QString const & name);
+
+/** Add the extension \p ext to \p name.
+ Use this instead of changeExtension if you know that \p name is without
+ extension, because changeExtension would wrongly interpret \p name if it
+ contains a dot.
+ */
+QString addExtension(QString const & name, QString const & extension);
+
+/// Return the extension of the file (not including the .)
+QString getExtension(QString const & name);
} // namespace lyx