Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 11 additions & 8 deletions src/pdf_extract/datasheet.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ void Datasheet::close()
_doc = nullptr;
}

void Datasheet::pinSearch(int numPage)
void Datasheet::pinSearch(int numPage, char *deleteString, int maxPinNameLength)
{
QList<DatasheetPin *> pins;
QList<DatasheetPackage *> packages;
Expand All @@ -101,7 +101,7 @@ void Datasheet::pinSearch(int numPage)
delete box;*/
_pack_labels.clear();

pins = extractPins(numPage);
pins = extractPins(numPage, deleteString, maxPinNameLength);
// pins.append(extractPins(numPage + 1));
QCoreApplication::processEvents();

Expand Down Expand Up @@ -288,7 +288,7 @@ QRectF Datasheet::toGlobalPos(const QRectF &rect, Poppler::Page *page, int pageN
return rect;
}

QList<DatasheetPin *> Datasheet::extractPins(int numPage)
QList<DatasheetPin *> Datasheet::extractPins(int numPage, char *deleteString, int maxPinNameLength)
{
QList<DatasheetPin *> pins;

Expand Down Expand Up @@ -387,6 +387,9 @@ QList<DatasheetPin *> Datasheet::extractPins(int numPage)
// remove notes
box->text.replace(QRegExp("\\([0-9]+\\)"), "");

// remove specified text
box->text.replace(deleteString, "");

// classify boxes
if (!okNumber || prev)
{
Expand All @@ -411,7 +414,7 @@ QList<DatasheetPin *> Datasheet::extractPins(int numPage)
box = new DatasheetBox();
box->page = numPage;
}
else if (box->text.size() > 10 && (!box->text.contains("/") && !box->text.contains("_") && !box->text.contains(",")))
else if (box->text.size() > maxPinNameLength && (!box->text.contains("/") && !box->text.contains("_") && !box->text.contains(",")))
{
// qDebug()<<"filter long label"<<box->text;
delete box;
Expand Down Expand Up @@ -662,7 +665,7 @@ int Datasheet::pagePinDiagram(int pageStart, int pageEnd, bool *bgaStyle)
* @param pageBegin
* @param pageEnd
*/
void Datasheet::analyse(int pageBegin, int pageEnd)
void Datasheet::analyse(int pageBegin, int pageEnd, char *deleteString, int maxPinNameLength)
{
int page = pageBegin;
bool bgaStyle;
Expand All @@ -671,7 +674,7 @@ void Datasheet::analyse(int pageBegin, int pageEnd)
// only one page
if (pageBegin != -1 && pageEnd == -1) // search in one page
{
pinSearch(pageBegin);
pinSearch(pageBegin, deleteString, maxPinNameLength);
}
else if (!_force)
{
Expand All @@ -689,7 +692,7 @@ void Datasheet::analyse(int pageBegin, int pageEnd)
{
return;
}
pinSearch(page);
pinSearch(page, deleteString, maxPinNameLength);
page++;
}
}
Expand All @@ -701,7 +704,7 @@ void Datasheet::analyse(int pageBegin, int pageEnd)
}
for (; page <= mpageEnd; page++)
{
pinSearch(page);
pinSearch(page, deleteString, maxPinNameLength );
}
}
}
Expand Down
6 changes: 3 additions & 3 deletions src/pdf_extract/datasheet.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ class DATASHEET_EXTRACTOR_EXPORT Datasheet : public QObject
bool open(QString fileName);
void close();

void analyse(int pageBegin = -1, int pageEnd = -1);
void analyse(int pageBegin = -1, int pageEnd = -1, char *deleteString = "", int _maxPinNameLength = 10);

const QList<DatasheetPackage *> &packages() const;
QList<Component *> components();
Expand All @@ -69,10 +69,10 @@ class DATASHEET_EXTRACTOR_EXPORT Datasheet : public QObject
private:
int pagePinDiagram(int pageStart, int pageEnd, bool *bgaStyle);

void pinSearch(int numPage);
void pinSearch(int numPage, char *deleteString, int maxPinNameLength);

QRectF toGlobalPos(const QRectF &rect, Poppler::Page *page, int pageNumber);
QList<DatasheetPin *> extractPins(int numPage);
QList<DatasheetPin *> extractPins(int numPage, char *deleteString, int maxPinNameLength);
QList<DatasheetBox *> _numbers;
QList<DatasheetBox *> _labels;
QList<DatasheetBox *> _proc_labels;
Expand Down
48 changes: 37 additions & 11 deletions src/uconfig/uconfig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@

QTextStream out(stdout);

void processFilePdf(QString file, Lib *lib, bool debug)
void processFilePdf(QString file, Lib *lib, bool debug, int pageBegin, int pageEnd, char *deleteString, int pinNameLength)
{
Datasheet datasheet;
datasheet.setDebugEnabled(debug);
Expand All @@ -44,7 +44,7 @@ void processFilePdf(QString file, Lib *lib, bool debug)
out << "error (2): input file cannot be opened" << endl;
exit(2);
}
datasheet.analyse();
datasheet.analyse(pageBegin, pageEnd, deleteString, pinNameLength);
for (DatasheetPackage *package : datasheet.packages())
{
Component *component = package->toComponent();
Expand All @@ -71,10 +71,10 @@ int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QApplication::setApplicationName("uConfig");
QApplication::setApplicationVersion("1.0");
QApplication::setApplicationVersion("1.1");

QCommandLineParser parser;
parser.setApplicationDescription(QCoreApplication::translate("main", "uConfig command line interface.") + QString("\nuconfig datasheet.pdf -o lib1.lib [-r rule.kss] [-d]"));
parser.setApplicationDescription(QCoreApplication::translate("main", "uConfig command line interface.") + QString("\nuconfig datasheet.pdf [-o output.lib] [-r rule.kss] [-d] [-B pageBegin [-E pageEnd]] [-S deleteString]"));
parser.addHelpOption();
parser.addVersionOption();
parser.addPositionalArgument("file", QCoreApplication::translate("main", "Source file to extract pins (pdf)."), "file");
Expand All @@ -96,12 +96,29 @@ int main(int argc, char *argv[])
"rule");
parser.addOption(kssOption);

/* TODO implement range page option
QCommandLineOption rangeOption(QStringList() << "p" << "page",
"Range of page to search into, defaut is the full document",
"range");
parser.addOption(rangeOption);
*/
QCommandLineOption pageOption(QStringList() << "B"
<< "pageBegin",
QCoreApplication::translate("main", "Work on pdf pageBegin."),
"N");
parser.addOption(pageOption);

QCommandLineOption pageEnd(QStringList() << "E"
<< "pageEnd",
QCoreApplication::translate("main", "Work on pageBegin to pageEnd."),
"N");
parser.addOption(pageEnd);

QCommandLineOption dsOption(QStringList() << "S"
<< "deleteString",
QCoreApplication::translate("main", "Delete string from pin names."),
"string");
parser.addOption(dsOption);

QCommandLineOption pnlOption(QStringList() << "l"
<< "pinNameLength",
QCoreApplication::translate("main", "Max pin name length (default=10)."),
"length");
parser.addOption(pnlOption);

parser.process(app);

Expand Down Expand Up @@ -159,7 +176,16 @@ int main(int argc, char *argv[])
out << "> " << file << endl;
if (file.endsWith(".pdf", Qt::CaseInsensitive))
{
processFilePdf(file, &lib, parser.isSet(debugOption));
QString deleteStringOpt = parser.value("deleteString");
QByteArray x = deleteStringOpt.toLatin1();
char deleteString[16];
strncpy(deleteString, x.data(), 15);

int pageBegin = parser.isSet("pageBegin") ? parser.value(QStringLiteral("pageBegin")).toInt() : -1;
int pageEnd = parser.isSet("pageEnd") ? parser.value(QStringLiteral("pageEnd")).toInt() : -1;
int pinNameLength = parser.isSet("pinNameLength") ? parser.value(QStringLiteral("pinNameLength")).toInt() : 10;
out<<pinNameLength<<endl;
processFilePdf(file, &lib, parser.isSet(debugOption), pageBegin, pageEnd, deleteString, pinNameLength);
source = FromPdf;
}
else if (file.endsWith(".lib", Qt::CaseInsensitive))
Expand Down
22 changes: 21 additions & 1 deletion src/uconfig_gui/importer/datasheetthread.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,26 @@ void DataSheetThread::setForceEnabled(bool force)
_datasheet->setForceEnabled(force);
}

void DataSheetThread::setDeleteString(const char* str)
{
strcpy (_deleteString, str);
}

char *DataSheetThread::deleteString()
{
return &_deleteString[0];
}

void DataSheetThread::setMaxPinNameLength(int val)
{
_maxPinNameLength = val;
}

int DataSheetThread::maxPinNameLength() const
{
return _maxPinNameLength;
}

Datasheet *DataSheetThread::datasheet() const
{
return _datasheet;
Expand All @@ -77,5 +97,5 @@ int DataSheetThread::pageEnd() const
void DataSheetThread::run()
{
setTerminationEnabled();
_datasheet->analyse(_pageBegin, _pageEnd);
_datasheet->analyse(_pageBegin, _pageEnd, _deleteString, _maxPinNameLength);
}
6 changes: 6 additions & 0 deletions src/uconfig_gui/importer/datasheetthread.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@ class DataSheetThread : public QThread
int pageBegin() const;
int pageEnd() const;
void setForceEnabled(bool force);
void setDeleteString(const char*);
char *deleteString();
void setMaxPinNameLength(int);
int maxPinNameLength() const;

Datasheet *datasheet() const;
signals:
Expand All @@ -47,6 +51,8 @@ class DataSheetThread : public QThread
int _pageBegin;
int _pageEnd;
void run() override;
char _deleteString[16];
int _maxPinNameLength;
};

#endif // DATASHEETTHREAD_H
28 changes: 27 additions & 1 deletion src/uconfig_gui/importer/pdffilepage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -60,12 +60,25 @@ PDFFilePage::PDFFilePage(DataSheetThread *datasheetThread)
registerField("pdfpagerange", _rangeEdit);
rangeGroupLayout->addWidget(_rangeEdit);

_forceCheckBox = new QCheckBox(tr("Force détection\n(try to build component in each page,\nvery expensive)"));
_forceCheckBox = new QCheckBox(tr("Force detection\n(try to build component in each page,\nvery expensive)"));
_allRadio->setChecked(true);
connect(_forceCheckBox, SIGNAL(toggled(bool)), this, SLOT(check()));
rangeGroupLayout->addWidget(_forceCheckBox);
rangeGroupLayout->addSpacerItem(new QSpacerItem(10, 30, QSizePolicy::Expanding, QSizePolicy::Expanding));

rangeGroupLayout->addWidget(new QLabel (tr("Remove this text from pin names:")));
_deleteString = new QLineEdit();
_deleteString->setValidator(new QRegularExpressionValidator(QRegularExpression(".{0,15}")));
connect(_deleteString, SIGNAL(textChanged(QString)), this, SLOT(check()));
rangeGroupLayout->addWidget(_deleteString);

rangeGroupLayout->addWidget(new QLabel (tr("Maximum length for a pin name:")));
_maxPinNameLength = new QSpinBox();
//registerField("pdfmaxpinnamelength", _maxPinNameLength);
connect(_maxPinNameLength, SIGNAL(valueChanged(int)), this, SLOT(check()));
rangeGroupLayout->addWidget(_maxPinNameLength);
rangeGroupLayout->addSpacerItem(new QSpacerItem(10, 30, QSizePolicy::Expanding, QSizePolicy::Expanding));

_pageCountLabel = new QLabel();
rangeGroupLayout->addWidget(_pageCountLabel);

Expand Down Expand Up @@ -93,10 +106,18 @@ void PDFFilePage::initializePage()
_pagePreviewLabel->setPixmap(QPixmap::fromImage(_datasheetThread->datasheet()->pageThumbnail(0)));
_rangeEdit->setText(QString("1-%1").arg(_datasheetThread->datasheet()->pageCount()));
_pageCountLabel->setText(QString("%1 pages").arg(_datasheetThread->datasheet()->pageCount()));
_deleteString->setText("");
_maxPinNameLength->setRange(3,30);
_maxPinNameLength->setValue(15);
_s++;
}

void PDFFilePage::check()
{
//for some reason, check() is called before initializePage() !!! ???
if (!_s)
return; // not initialized

_forceCheckBox->setEnabled(!_allRadio->isChecked());
_rangeEdit->setEnabled(!_allRadio->isChecked());
_complete = _rangeEdit->hasAcceptableInput() || _allRadio->isChecked();
Expand Down Expand Up @@ -132,6 +153,11 @@ void PDFFilePage::check()
}
_datasheetThread->setRange(start, stop);
}
_datasheetThread->setMaxPinNameLength(_maxPinNameLength->value());

//QByteArray x = _deleteString->text().toLatin1();
//_datasheetThread->setDeleteString(x.data());
_datasheetThread->setDeleteString( qPrintable(_deleteString->text()) );
}
emit completeChanged();
}
Expand Down
5 changes: 4 additions & 1 deletion src/uconfig_gui/importer/pdffilepage.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
#include <QLineEdit>
#include <QRadioButton>
#include <QWizardPage>
#include <QSpinBox>

#include "datasheetthread.h"

Expand All @@ -48,11 +49,13 @@ private slots:
QLabel *_pagePreviewLabel;
QRadioButton *_allRadio;
QRadioButton *_partialRadio;
QLineEdit *_rangeEdit;
QLineEdit *_rangeEdit, *_deleteString;
QSpinBox *_maxPinNameLength;
QCheckBox *_forceCheckBox;
QLabel *_pageCountLabel;

QStringList _suffixes;
int _s=0;
};

#endif // PDFFILEPAGE_H