diff --git a/resources/library/interactive/GeoInfo.wgt/GeoInfo.html b/resources/library/interactive/GeoInfo.wgt/GeoInfo.html index d3559a9d..5a176652 100644 --- a/resources/library/interactive/GeoInfo.wgt/GeoInfo.html +++ b/resources/library/interactive/GeoInfo.wgt/GeoInfo.html @@ -1,24 +1,17 @@ - @@ -33,7 +26,7 @@ - +
@@ -46,28 +39,28 @@ - Amerique du Nord - Eurasie - Amerique du Sud - Afrique - Oceanie @@ -1010,7 +1003,7 @@

- Comparer les pays: + Compare countries: @@ -1023,1062 +1016,1062 @@
- Maroc
- Capitale: Rabat
+ Morocco
+ Capital city: Rabat
- Algerie
- Capitale: Alger
+ Algeria
+ Capital city: Alger
- Tunisie
- Capitale: Tunis
+ Tunisia/span>
+ Capital city: Tunis
- Libye
- Capitale: Tripoli
+ Libya
+ Capital city: Tripoli
- Egypte
- Capitale: Le Caire
+ Egypt
+ Capital city: Cairo
Sahara occidental
- Capitale:
+ Capital city:
- Mauritanie
- Capitale: Nouakchott
+ Mauritania
+ Capital city: Nouakchott
Mali
- Capitale: Bamako
+ Capital city: Bamako
Niger
- Capitale: Niamey
+ Capital city: Niamey
Tchad
- Capitale: Ndjamena
+ Capital city: Ndjamena
Soudan
- Capitale: Khartoum
+ Capital city: Khartoum
- Erythree
- Capitale: Asmara
+ Eritrea
+ Capital city: Asmara
Djibouti
- Capitale: Djibouti
+ Capital city: Djibouti
- Ethiopie
- Capitale: Addis Abeba
+ Ethiopia
+ Capital city: Addis Ababa
- Somalie
- Capitale: Mogadiscio
+ Somalia
+ Capital city: Mogadiscio
Kenya
- Capitale: Nairobi
+ Capital city: Nairobi
- Ouganda
- Capitale: Kampala
+ Uganda
+ Capital city: Kampala
- Republique democratique du Congo
- Capitale: Kinshasa
+ Democratic Republic of Congo
+ Capital city: Kinshasa
- Republique centrafricaine
- Capitale: Bangui
+ Central African Republic
+ Capital city: Bangui
Cameroun
- Capitale: Yaounde
+ Capital city: Yaounde
Nigeria
- Capitale: Abuja
+ Capital city: Abuja
Benin
- Capitale: Porto Novo
+ Capital city: Porto Novo
Togo
- Capitale: Lome
+ Capital city: Lome
Ghana
- Capitale: Accra
+ Capital city: Accra
Cote d'Ivoire
- Capitale: Yamoussoukro
+ Capital city: Yamoussoukro
Burkina Faso
- Capitale: Ouagadougou
+ Capital city: Ouagadougou
Liberia
- Capitale: Monravia
+ Capital city: Monravia
Sierra Leone
- Capitale: Freetown
+ Capital city: Freetown
- Guinee
- Capitale: Conakry
+ Guinea
+ Capital city: Conakry
- Guinee-Bissau
- Capitale: Bissau
+ Guinea-Bissau
+ Capital city: Bissau
Senegal
- Capitale: Dakar
+ Capital city: Dakar
- Gambie
- Capitale: Banjul
+ Gambia
+ Capital city: Banjul
Rwanda
- Capitale: Kigali
+ Capital city: Kigali
Burundi
- Capitale: Bujumbura
+ Capital city: Bujumbura
- Republique du Congo
- Capitale: Brazzaville
+ Republic of Congo
+ Capital city: Brazzaville
Gabon
- Capitale: Libreville
+ Capital city: Libreville
- Guinee Equatoriale
- Capitale: Malabo
+ Equatorial Guinea
+ Capital city: Malabo
- Tanzanie
- Capitale: Dodoma
+ Tanzania
+ Capital city: Dodoma
Malawi
- Capitale: Lilongwe
+ Capital city: Lilongwe
- Zambie
- Capitale: Lusaka
+ Zambia
+ Capital city: Lusaka
Angola
- Capitale: Luanda
+ Capital city: Luanda
Mozambique
- Capitale: Maputo
+ Capital city: Maputo
Zimbabwe
- Capitale: Harare
+ Capital city: Harare
Botswana
- Capitale: Gaborone
+ Capital city: Gaborone
- Namibie
- Capitale: Windhoec
+ Namibia
+ Capital city: Windhoec
- Afrique du Sud
- Capitale: Pretoria
+ South Africa
+ Capital city: Pretoria
Lesotho
- Capitale: Maseru
+ Capital city: Maseru
Swaziland
- Capitale: Mbabane
+ Capital city: Mbabane
Madagascar
- Capitale: Antananarivo
+ Capital city: Antananarivo
Argentine
- Capitale: Buenos Aires
+ Capital city: Buenos Aires
Chili
- Capitale: Santiago
+ Capital city: Santiago
Uruguay
- Capitale: Montevideo
+ Capital city: Montevideo
Paraguay
- Capitale: Asuncion
+ Capital city: Asuncion
- Bolivie
- Capitale: La Paz
+ Bolivia
+ Capital city: La Paz
- Bresil
- Capitale: Brasilia
+ Brazil
+ Capital city: Brasilia
- Perou
- Capitale: Lima
+ Peru
+ Capital city: Lima
- Equateur
- Capitale: Quito
+ Ecuador
+ Capital city: Quito
- Colombie
- Capitale: Bogota
+ Colombia
+ Capital city: Bogota
Venezuela
- Capitale: Caracas
+ Capital city: Caracas
Guyana
- Capitale: Georgetown
+ Capital city: Georgetown
Suriname
- Capitale: Paramaribo
+ Capital city: Paramaribo
- Guyane
- Capitale: Paris
+ Guyana
+ Capital city: Paris
Canada
- Capitale: Ottawa
+ Capital city: Ottawa
- Groenland
- Capitale: Nuuk
+ Greenland
+ Capital city: Nuuk
- Etats-Unis d'Amerique
- Capitale: Washington DC
+ United States of America
+ Capital city: Washington DC
- Mexique
- Capitale: Mexico
+ Mexico
+ Capital city: Mexico
Cuba
- Capitale: La Havane
+ Capital city: Havana
Haiti
- Capitale: Port-au-Prince
+ Capital city: Port-au-Prince
- Republique dominicaine
- Capitale: Saint-Domingue
+ Dominican Republic
+ Capital city: Santo Domingo
- Jamaique
- Capitale: Kingston
+ Jamaica
+ Capital city: Kingston
Bahamas
- Capitale: Nassau
+ Capital city: Nassau
Guatemala
- Capitale: Guatemala
+ Capital city: Guatemala
Belize
- Capitale: Belmopan
+ Capital city: Belmopan
- El Salvador
- Capitale: San Salvador
+ Salvador
+ Capital city: San Salvador
Honduras
- Capitale: Tegucigalpa
+ Capital city: Tegucigalpa
Nicaragua
- Capitale: Managua
+ Capital city: Managua
Costa-Rica
- Capitale: San Jose
+ Capital city: San Jose
Panama
- Capitale: Panama
+ Capital city: Panama
- Australie
- Capitale: Canberra
+ Australia
+ Capital city: Canberra
- Nouvelle-Zelande
- Capitale: Wellington
+ New Zealand
+ Capital city: Wellington
- Papouasie-Nouvelle-Guinee
- Capitale: Port Moresby
+ Papua New Guinea
+ Capital city: Port Moresby
- Indonesie
- Capitale: Jakarta
+ Indonesia
+ Capital city: Jakarta
- Iles Salomon
- Capitale: Honiara
+ Solomon Islands
+ Capital city: Honiara
Vanuatu
- Capitale: Port-Vila
+ Capital city: Port-Vila
- Nouvelle-Caledonie
- Capitale: Paris
+ New Caledonia
+ Capital city: Paris
- Albanie
- Capitale: Tirana
+ Albania
+ Capital city: Tirana
- Allemagne
- Capitale: Berlin
+ Germany
+ Capital city: Berlin
- Armenie
- Capitale: Erevan
+ Armenia
+ Capital city: Erevan
- Autriche
- Capitale: Vienne
+ Austria
+ Capital city: Vienne
- Azerbaidjan
- Capitale: Bakou
+ Azerbaijan
+ Capital city: Baku
- Belgique
- Capitale: Bruxelles
+ Belgium
+ Capital city: Bruxelles
Belarus
- Capitale: Minsk
+ Capital city: Minsk
- Bosnie
- Capitale: Sarajevo
+ Bosnia
+ Capital city: Sarajevo
- Bulgarie
- Capitale: Sofia
+ Bulgaria
+ Capital city: Sofia
- Chypre
- Capitale: Nicosie
+ Cyprus
+ Capital city: Nicosia
- Croatie
- Capitale: Zagreb
+ Croatia
+ Capital city: Zagreb
- Danemark
- Capitale: Copenhague
+ Denmark
+ Capital city: Copenhagen
- Espagne
- Capitale: Madrid
+ Spain
+ Capital city: Madrid
- Estonie
- Capitale: Tallinn
+ Estonia
+ Capital city: Tallinn
- Finlande
- Capitale: Helsinki
+ Finland
+ Capital city: Helsinki
France
- Capitale: Paris
+ Capital city: Paris
- Georgie
- Capitale: Tbilissi
+ Georgia
+ Capital city: Tbilisi
- Grece
- Capitale: Athenes
+ Greece
+ Capital city: Athenes
- Hongrie
- Capitale: Budapest
+ Hungary
+ Capital city: Budapest
- Irlande
- Capitale: Dublin
+ Ireland
+ Capital city: Dublin
- Islande
- Capitale: Reykjavik
+ Island
+ Capital city: Reykjavik
- Italie
- Capitale: Rome
+ Italy
+ Capital city: Rome
- Lettonie
- Capitale: Riga
+ Latvia
+ Capital city: Riga
Liechtenstein
- Capitale: Vaduz
+ Capital city: Vaduz
- Lituanie
- Capitale: Vilnius
+ Lithuania
+ Capital city: Vilnius
Luxembourg
- Capitale: Luxembourg
+ Capital city: Luxembourg
Macedoine
- Capitale: Skopje
+ Capital city: Skopje
- Malte
- Capitale: La Valette
+ Malta
+ Capital city: La Valetta
- Moldavie
- Capitale: Chisinau
+ Moldavia
+ Capital city: Chisinau
Monaco
- Capitale: Monaco
+ Capital city: Monaco
Montenegro
- Capitale: Podaorica
+ Capital city: Podaorica
- Norvege
- Capitale: Oslo
+ Norway
+ Capital city: Oslo
Pays-Bas
- Capitale: Amsterdam
+ Capital city: Amsterdam
- Pologne
- Capitale: Varsovie
+ Poland
+ Capital city: Warsaw
Portugal
- Capitale: Lisbonne
+ Capital city: Lisbon
- Republique tcheque
- Capitale: Prague
+ Czech Republic
+ Capital city: Prague
- Roumanie
- Capitale: Bucarest
+ Romania
+ Capital city: Bucharest
- Royaume-Uni
- Capitale: Londres
+ United Kingdom
+ Capital city: London
Saint-Marin
- Capitale: Saint-Marin
+ Capital city: Saint-Marin
- Serbie
- Capitale: Belgrade
+ Serbia
+ Capital city: Belgrade
- Slovaquie
- Capitale: Bratislava
+ Slovakia
+ Capital city: Bratislava
- Slovenie
- Capitale: Ljubljana
+ Slovenia
+ Capital city: Ljubljana
Suede
- Capitale: Stockholm
+ Capital city: Stockholm
Suisse
- Capitale: Berne
+ Capital city: Berne
- Turquie
- Capitale: Ankara
+ Turkey
+ Capital city: Ankara
Ukraine
- Capitale: Kiev
+ Capital city: Kiev
Vatican
- Capitale: Cite du Vatican
+ Capital city: Cite du Vatican
Afghanistan
- Capitale: Kaboul
+ Capital city: Kabul
- Arabie Saoudite
- Capitale: Riyad
+ Saudi Arabia
+ Capital city: Riyadh
Bahrein
- Capitale: Manama
+ Capital city: Manama
Bangladesh
- Capitale: Dhaka
+ Capital city: Dhaka
- Bhoutan
- Capitale: Thimphou
+ Bhutan
+ Capital city: Thimphu
Brunei
- Capitale: Bandar Seri Begawan
+ Capital city: Bandar Seri Begawan
- Cambodge
- Capitale: Phnom Penh
+ Cambodia
+ Capital city: Phnom Penh
Chine
- Capitale: Pekin
+ Capital city: Pekin
- Coree du Nord
- Capitale: Pyongyang
+ North Korea
+ Capital city: Pyongyang
- Coree du Sud
- Capitale: Seoul
+ South Korea
+ Capital city: Seoul
- Emirats arabes unis
- Capitale: Abou Dabi
+ United Arab Emirates
+ Capital city: Abu Dhabi
- Inde
- Capitale: New Delhi
+ India
+ Capital city: New Delhi
- Indonesie
- Capitale: Jakarta
+ Indonesia
+ Capital city: Jakarta
Iran
- Capitale: Teheran
+ Capital city: Teheran
Iraq
- Capitale: Bagdad
+ Capital city: Bagdad
Israel
- Capitale: Jerusalem
+ Capital city: Jerusalem
- Japon
- Capitale: Tokyo
+ Japan
+ Capital city: Tokyo
- Jordanie
- Capitale: Amman
+ Jordan
+ Capital city: Amman
Kazakhstan
- Capitale: Astana
+ Capital city: Astana
- Kirghizistan
- Capitale: Bichkek
+ Kyrgyzstan
+ Capital city: Bishkek
Koweit
- Capitale: Koweit
+ Capital city: Koweit
Laos
- Capitale: Vientiane
+ Capital city: Vientiane
- Liban
- Capitale: Beyrouth
+ Lebanon
+ Capital city: Beyrouth
- Malaisie
- Capitale: Kuala Lumpur
+ Malaysia
+ Capital city: Kuala Lumpur
Maldives
- Capitale: Male
+ Capital city: Male
- Mongolie
- Capitale: Oulan-Bator
+ Mongolia
+ Capital city: Ulan-Bator
Myanmar
- Capitale: Naypyidaw
+ Capital city: Naypyidaw
Nepal
- Capitale: Katmandou
+ Capital city: Katmandu
Oman
- Capitale: Mascate
+ Capital city: Muscat
- Ouzbekistan
- Capitale: Tachkent
+ Uzbekistan
+ Capital city: Tashkent
Pakistan
- Capitale: Islamabad
+ Capital city: Islamabad
Philippines
- Capitale: Manille
+ Capital city: Manille
Qatar
- Capitale: Doha
+ Capital city: Doha
- Russie
- Capitale: Moscou
+ Russia
+ Capital city: Moscow
- Singapour
- Capitale: Singapour
+ Singapore
+ Capital city: Singapore
Sri Lanka
- Capitale: Colombo
+ Capital city: Colombo
- Syrie
- Capitale: Damas
+ Syria
+ Capital city: Damask
- Tadjikistan
- Capitale: Douchanbe
+ Tajikistan
+ Capital city: Dushanbe
- Thailande
- Capitale: Bangkok
+ Thailand
+ Capital city: Bangkok
Timor-oriental
- Capitale: Dili
+ Capital city: Dili
Turkmenistan
- Capitale: Achgabat
+ Capital city: Ashgabat
Viet Nam
- Capitale: Hanoi
+ Capital city: Hanoi
Yemen
- Capitale: Sanaa
+ Capital city: Sanaa
diff --git a/resources/library/interactive/Geogebra.wgt/bin/geogebra.jar b/resources/library/interactive/Geogebra.wgt/bin/geogebra.jar new file mode 100644 index 00000000..3410ec4a Binary files /dev/null and b/resources/library/interactive/Geogebra.wgt/bin/geogebra.jar differ diff --git a/resources/library/interactive/Geogebra.wgt/bin/geogebra_cas.jar b/resources/library/interactive/Geogebra.wgt/bin/geogebra_cas.jar new file mode 100644 index 00000000..e6c8302d Binary files /dev/null and b/resources/library/interactive/Geogebra.wgt/bin/geogebra_cas.jar differ diff --git a/resources/library/interactive/Geogebra.wgt/bin/geogebra_export.jar b/resources/library/interactive/Geogebra.wgt/bin/geogebra_export.jar new file mode 100644 index 00000000..c75aa2be Binary files /dev/null and b/resources/library/interactive/Geogebra.wgt/bin/geogebra_export.jar differ diff --git a/resources/library/interactive/Geogebra.wgt/bin/geogebra_gui.jar b/resources/library/interactive/Geogebra.wgt/bin/geogebra_gui.jar new file mode 100644 index 00000000..c0bec484 Binary files /dev/null and b/resources/library/interactive/Geogebra.wgt/bin/geogebra_gui.jar differ diff --git a/resources/library/interactive/Geogebra.wgt/bin/geogebra_main.jar b/resources/library/interactive/Geogebra.wgt/bin/geogebra_main.jar new file mode 100644 index 00000000..193d1e13 Binary files /dev/null and b/resources/library/interactive/Geogebra.wgt/bin/geogebra_main.jar differ diff --git a/resources/library/interactive/Geogebra.wgt/bin/geogebra_properties.jar b/resources/library/interactive/Geogebra.wgt/bin/geogebra_properties.jar new file mode 100644 index 00000000..59a76a76 Binary files /dev/null and b/resources/library/interactive/Geogebra.wgt/bin/geogebra_properties.jar differ diff --git a/resources/library/interactive/Graphme.wgt/Grapheur.xhtml b/resources/library/interactive/Graphme.wgt/Grapheur.xhtml index 557e657d..44f3b420 100644 --- a/resources/library/interactive/Graphme.wgt/Grapheur.xhtml +++ b/resources/library/interactive/Graphme.wgt/Grapheur.xhtml @@ -1,893 +1,908 @@ - - - - - - Graphics - - - - - - - - - - - + + + + + + + + + + + + - - - - - Function: - - - -
^
- -
- - - -
- -
- X-axis:
- à
- Y-axis:
- à -
Zoom:
-

- Color:
-
-

-
-
- Menus: - - - - - - - -
-
- - - - -
- - -
- - - - - -
Widget2D3D
-
-

Widget options

- - Themes of widget:
-


- Control options:
-
- Save a widget options in cookies or load an options from cookies or delete a registered options. -

- -
-


Cookies are disabled. You cannot save an options...

-
You are using the last version of this widget.
- - -
-
- - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + +
+
+

------- Error -------

+
+ Impossible to draw the function ... +

+ Error in expression or unexpected char:
+ +

+ +
+ + +
+

------- Error -------

+ Runtime error! Check your function and try to draw it again. +
+ Description and parameters various functions which are available to help. +

+ + +
+ + + + + +
+
+

------- Error -------

+

+ Update to latest version is not available because you already use the latest version. +


+ +
+ + +
+
+

Options saved!

+
+ +
+ + +
+
+
+
+ + +
+
o
+
+ + +
3D
+ + + diff --git a/src/adaptors/UBCFFSubsetAdaptor.cpp b/src/adaptors/UBCFFSubsetAdaptor.cpp index 7a62d39c..f853ab00 100644 --- a/src/adaptors/UBCFFSubsetAdaptor.cpp +++ b/src/adaptors/UBCFFSubsetAdaptor.cpp @@ -1,16 +1,32 @@ +/* + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + #include #include #include -#include "UBCFFSubsetAdaptor.h" - #include "core/UBPersistenceManager.h" #include "document/UBDocumentProxy.h" #include "domain/UBItem.h" #include "domain/UBGraphicsPolygonItem.h" #include "domain/UBGraphicsStroke.h" +#include "domain/UBGraphicsTextItem.h" +#include "domain/UBGraphicsSvgItem.h" +#include "UBCFFSubsetAdaptor.h" #include "UBMetadataDcSubsetAdaptor.h" #include "UBThumbnailAdaptor.h" #include "UBSvgSubsetAdaptor.h" @@ -19,32 +35,42 @@ //tag names definition //use them everiwhere! -static char* tElement = "element"; -static char* tEllipse = "ellipse"; -static char* tIwb = "iwb"; -static char* tMeta = "meta"; -static char* tPage = "page"; -static char* tPageset = "pageset"; -static char* tPolygon = "polygon"; -static char* tRect = "rect"; -static char* tSvg = "svg"; -static char* tTextarea = "textarea"; +static QString tElement = "element"; +static QString tEllipse = "ellipse"; +static QString tIwb = "iwb"; +static QString tMeta = "meta"; +static QString tPage = "page"; +static QString tPageset = "pageset"; +static QString tPolygon = "polygon"; +static QString tRect = "rect"; +static QString tSvg = "svg"; +static QString tText = "text"; +static QString tTextarea = "textarea"; +static QString tTspan = "tspan"; +static QString tBreak = "tbreak"; //attribute names definition -static char* aFill = "fill"; -static char* aFillopacity = "fill-opacity"; -static char* aX = "x"; -static char* aY = "y"; -static char* aWidth = "width"; -static char* aHeight = "height"; -static char* aStroke = "stroke"; -static char* aStrokewidth = "stroke-width"; -static char* aCx = "cx"; -static char* aCy = "cy"; -static char* aRx = "rx"; -static char* aRy = "ry"; -static char* aTransform = "transform"; -static char* aViewbox = "viewbox"; +static QString aFill = "fill"; +static QString aFillopacity = "fill-opacity"; +static QString aX = "x"; +static QString aY = "y"; +static QString aWidth = "width"; +static QString aHeight = "height"; +static QString aStroke = "stroke"; +static QString aStrokewidth = "stroke-width"; +static QString aCx = "cx"; +static QString aCy = "cy"; +static QString aRx = "rx"; +static QString aRy = "ry"; +static QString aTransform = "transform"; +static QString aViewbox = "viewbox"; +static QString aFontSize = "font-size"; +static QString aFontfamily = "font-family"; +static QString aFontstretch = "font-stretch"; +static QString aFontstyle = "font-style"; +static QString aFontweight = "font-weight"; +static QString aTextalign = "text-align"; + UBCFFSubsetAdaptor::UBCFFSubsetAdaptor() { @@ -82,10 +108,8 @@ bool UBCFFSubsetAdaptor::ConvertCFFFileToUbz(QString &cffSourceFile, UBDocumentP UBCFFSubsetAdaptor::UBCFFSubsetReader::UBCFFSubsetReader(UBDocumentProxy *proxy, QByteArray &content): mReader(content), mProxy(proxy), currentState(NONE) { - //TODO parse } - bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parse() { UBMetadataDcSubsetAdaptor::persist(mProxy); @@ -187,6 +211,12 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseCurrentElementStart() return false; } else + if ( elName == tText) + { + if (!parseText()) + return false; + } + else if ( elName == tTextarea) { if (!parseTextArea()) @@ -300,6 +330,37 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseSvg() return true; } +void UBCFFSubsetAdaptor::UBCFFSubsetReader::repositionSvgItem(UBGraphicsSvgItem *item, qreal width, qreal height, qreal x, qreal y, bool useTransform, QTransform &transform) +{ + QTransform curTrans = item->transform(); + qWarning() << QString().sprintf("Item current transform = %f 0 0 %f %f %f, position %f, %f", curTrans.m11(), curTrans.m22(), curTrans.dx(), curTrans.dy(), item->x(), item->y()); + //check if rect is rotated + //rotate svg item itself + QRectF itemBounds = item->boundingRect(); + //first, svg is mapped to svg item bound + //second, svg item is mapped to scene + //so, get svg to svg item scale and multiple by scene scale + qreal hScale = itemBounds.width() / width * curTrans.m11(); + qreal vScale = itemBounds.height() / height * curTrans.m22(); + + if (useTransform) + { + QPointF oldVector((x - transform.dx()), (y - transform.dy())); + QTransform rTransform(transform.m11(), transform.m12(), transform.m21(), transform.m22(), 0, 0); + QPointF newVector = rTransform.map(oldVector); + rTransform.scale(curTrans.m11(), curTrans.m22()); + item->setTransform(QTransform(rTransform.m11(), rTransform.m12(), rTransform.m21(), rTransform.m22(), 0, 0)); + item->setPos((x - mViewBoxCenter.x() + (newVector - oldVector).x()) * hScale, (y - mViewBoxCenter.y() + (newVector - oldVector).y()) * vScale ); + } + else + { + item->setPos((x - mViewBoxCenter.x()) * hScale, (y - mViewBoxCenter.y()) * vScale); + } + + QTransform newTrans = item->transform(); + qWarning() << QString("Item new transform = %3 0 0 %4 %1 %2, position %5, %6").arg(newTrans.dx()).arg(newTrans.dy()).arg(newTrans.m11()).arg(newTrans.m22()).arg(item->x()).arg(item->y()); +} + bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseRect() { if (currentState != SVG && currentState != PAGE) @@ -312,11 +373,6 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseRect() if (currentState == SVG && mCurrentScene == NULL) createNewScene(); - //fill and stroke color - QColor fillColor = colorFromString(mReader.attributes().value(aFill).toString()); - QColor strokeColor = colorFromString(mReader.attributes().value(aStroke).toString()); - int strokeWidth = mReader.attributes().value(aStrokewidth).toString().toInt(); - //rect lef top corner coordinates qreal x1 = mReader.attributes().value(aX).toString().toDouble(); qreal y1 = mReader.attributes().value(aY).toString().toDouble(); @@ -325,34 +381,41 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseRect() qreal height = mReader.attributes().value(aHeight).toString().toDouble(); //init svg generator with temp file - QSvgGenerator *generator = createSvgGenerator(); + QSvgGenerator *generator = createSvgGenerator(width + 10, height + 10); //init painter to paint to svg QPainter painter; painter.begin(generator); - //check if rect is rotated - if (mReader.attributes().hasAttribute(aTransform)) + //fill rect + if (mReader.attributes().hasAttribute(aFill)) { - QTransform transform = transformFromString(mReader.attributes().value(aTransform).toString()); - painter.setTransform(transform); - //change left top coordinates to correspond to transformation - x1 -= transform.dx(); - y1 -= transform.dy(); + QColor fillColor = colorFromString(mReader.attributes().value(aFill).toString()); + painter.setBrush(QBrush(fillColor)); + painter.fillRect(5, 5, width, height, fillColor); } - painter.setBrush(QBrush(fillColor)); - painter.fillRect(x1, y1, width, height, fillColor); - - QPen pen(strokeColor); - pen.setWidth(strokeWidth); - painter.setPen(pen); - painter.drawRect(x1, y1, width, height); + bool hasStrokeColor = mReader.attributes().hasAttribute(aStroke); + bool hasStrokeWidth = mReader.attributes().hasAttribute(aStrokewidth); + if (hasStrokeColor || hasStrokeWidth) + { + QPen pen; + if (hasStrokeColor) + pen.setColor(colorFromString(mReader.attributes().value(aStroke).toString())); + if (hasStrokeWidth) + pen.setWidth(mReader.attributes().value(aStrokewidth).toString().toInt()); + + painter.setPen(pen); + painter.drawRect(5, 5, width, height); + } painter.end(); //add resulting svg file to scene - mCurrentScene->addSvg(QUrl::fromLocalFile(generator->fileName())); + UBGraphicsSvgItem *svgItem = mCurrentScene->addSvg(QUrl::fromLocalFile(generator->fileName())); + QTransform transform; + bool hastransform = getCurElementTransorm(transform); + repositionSvgItem(svgItem, width + 10, height + 10, x1 - 5, y1 - 5, hastransform, transform); delete generator; return true; @@ -370,7 +433,10 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseEllipse() if (currentState == SVG && mCurrentScene == NULL) createNewScene(); - QSvgGenerator *generator = createSvgGenerator(); + //ellipse horisontal and vertical radius + qreal rx = mReader.attributes().value(aRx).toString().toDouble(); + qreal ry = mReader.attributes().value(aRy).toString().toDouble(); + QSvgGenerator *generator = createSvgGenerator(rx * 2 + 10, ry * 2 + 10); //fill and stroke color QColor fillColor = colorFromString(mReader.attributes().value(aFill).toString()); @@ -380,44 +446,33 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseEllipse() //ellipse center coordinates qreal cx = mReader.attributes().value(aCx).toString().toDouble(); qreal cy = mReader.attributes().value(aCy).toString().toDouble(); - //ellipse horisontal and vertical radius - qreal rx = mReader.attributes().value(aRx).toString().toDouble(); - qreal ry = mReader.attributes().value(aRy).toString().toDouble(); - - //we should change cx and cy by rx and ry because qpainter - //draws ellipse by its rect coordinates - cx -= rx; - cy -= ry; //init painter to paint to svg QPainter painter; painter.begin(generator); - //check if ellipse is rotated - if (mReader.attributes().hasAttribute(aTransform)) - { - QTransform transform = transformFromString(mReader.attributes().value(aTransform).toString()); - painter.setTransform(transform); - //change cx and cy to correspond to transformation - cx -= transform.dx(); - cy -= transform.dy(); - } - QPen pen(strokeColor); pen.setWidth(strokeWidth); painter.setPen(pen); painter.setBrush(QBrush(fillColor)); - painter.drawEllipse(cx, cy, rx * 2, ry * 2); + painter.drawEllipse(5, 5, rx * 2, ry * 2); painter.end(); + //add resulting svg file to scene - mCurrentScene->addSvg(QUrl::fromLocalFile(generator->fileName())); + UBGraphicsSvgItem *svgItem = mCurrentScene->addSvg(QUrl::fromLocalFile(generator->fileName())); + + QTransform transform; + bool hasTransform = getCurElementTransorm(transform); + + repositionSvgItem(svgItem, rx * 2 + 10, ry * 2 + 10, cx - rx - 5, cy - ry -5, hasTransform, transform); + delete generator; return true; -} + } bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseTextArea() { @@ -431,6 +486,254 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseTextArea() if (currentState == SVG && mCurrentScene == NULL) createNewScene(); + //TODO textarea node + qreal x = mReader.attributes().value(aX).toString().toDouble(); + qreal y = mReader.attributes().value(aY).toString().toDouble(); + qreal width = mReader.attributes().value(aWidth).toString().toDouble(); + qreal height = mReader.attributes().value(aHeight).toString().toDouble(); + + qWarning() << QString().sprintf("Text coordinates : %f,%f. Text size %f,%f", x, y, width, height); + + qreal fontSize = 12.0; + QColor fontColor; + QString fontFamily = "Arial"; + QString fontStretch = "normal"; + bool italic = false; + int fontWeight = QFont::Normal; + int textAlign = Qt::AlignLeft; + QTransform fontTransform; + parseTextAttributes(fontSize, fontColor, fontFamily, fontStretch, italic, fontWeight, textAlign, fontTransform); + + QSvgGenerator *generator = createSvgGenerator(width, height); + QPainter painter; + painter.begin(generator); + painter.setFont(QFont(fontFamily, fontSize, fontWeight, italic)); + + qreal curY = 0.0; + qreal curX = 0.0; + qreal linespacing = QFontMetricsF(painter.font()).leading(); + + //remember if text area has transform + QString transformString; + QTransform transform; + bool hasTransform = getCurElementTransorm(transform); + + QRectF lastDrawnTextBoundingRect; + //parse text area tags + while(true) + { + mReader.readNext(); + QStringRef elementName = mReader.name(); + if (mReader.isEndDocument()) + break; + if (mReader.isEndElement() && elementName == tBreak) + { + //when tbreak appers, move down by the drawn rect height + //TODO: line spacing is not calculated yet, additional code is required + curY += lastDrawnTextBoundingRect.height() + linespacing; + curX = 0.0; + lastDrawnTextBoundingRect = QRectF(0,0,0,0); + continue; + } + if (mReader.isEndElement() && elementName == tTextarea) + break; + if (mReader.isStartElement() && elementName == tTspan) + { + parseTextAttributes(fontSize, fontColor, fontFamily, fontStretch, italic, fontWeight, textAlign, fontTransform); + painter.setFont(QFont(fontFamily, fontSize, fontWeight, italic)); + painter.setPen(fontColor); + linespacing = QFontMetricsF(painter.font()).leading(); + continue; + } + if (mReader.isCharacters() || mReader.isCDATA()) + { + QString text = mReader.text().toString().trimmed(); + + //skip empty text + if (text.length() == 0) + continue; + + //get bounding rect to obtain desired text height + lastDrawnTextBoundingRect = painter.boundingRect(QRectF(curX, curY, width, height - curY), textAlign|Qt::TextWordWrap, text); + QString log = QString().sprintf(" at rect %f, %f, %f, %f. Bounding rect is %f, %f, %f, %f", 0.0, curY, width, height - curY, lastDrawnTextBoundingRect.x(), lastDrawnTextBoundingRect.y(), lastDrawnTextBoundingRect.width(), lastDrawnTextBoundingRect.height()); + qWarning() << "Text " << text << log; + painter.drawText(curX, curY, width, lastDrawnTextBoundingRect.height(), textAlign|Qt::TextWordWrap, text); + curX += lastDrawnTextBoundingRect.x() + lastDrawnTextBoundingRect.width(); + + continue; + } + } + + painter.end(); + + //add resulting svg file to scene + UBGraphicsSvgItem *svgItem = mCurrentScene->addSvg(QUrl::fromLocalFile(generator->fileName())); + + repositionSvgItem(svgItem, width, height, x, y, hasTransform, transform); + delete generator; + + return true; +} + +bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseText() +{ + if (currentState != SVG && currentState != PAGE) + { + qWarning() << "iwb content parse error, unexpected textarea tag at line" << mReader.lineNumber(); + return false; + } + + //create new scene if it's not created yet (for one page document case) + if (currentState == SVG && mCurrentScene == NULL) + createNewScene(); + + qreal x = mReader.attributes().value(aX).toString().toDouble(); + qreal y = mReader.attributes().value(aY).toString().toDouble(); + + qreal width = 0; + qreal height = 0; + + QList textRects; + QList textFonts; + QList textLines; + QList textAligns; + QList textColors; + + qWarning() << QString().sprintf("Text coordinates : %f,%f. Text size %f,%f", x, y, width, height); + + qreal fontSize = 12.0; + QFont textFont; + QColor fontColor; + QString fontFamily = "Arial"; + QString fontStretch = "normal"; + + bool italic = false; + int fontWeight = QFont::Normal; + int textAlign = Qt::AlignLeft; + QTransform fontTransform; + parseTextAttributes(fontSize, fontColor, fontFamily, fontStretch, italic, fontWeight, textAlign, fontTransform); + textFont = QFont(fontFamily, fontSize, fontWeight, italic); + + QFontMetricsF metrics = QFontMetricsF(textFont); + qreal curHeight = metrics.height(); + + qreal curY = 0.0; + qreal curX = 0.0; + + qreal linespacing = QFontMetrics(textFont).leading(); + + //remember if text area has transform + QTransform transform; + bool hasTransform = getCurElementTransorm(transform); + + QRectF lastDrawnTextBoundingRect; + + QStack fontStack; + QStack colorStack; + QStack alignStack; + + // first extimate desired text area size + // to do that, parse text area tags + while(true) + { + mReader.readNext(); + QStringRef elementName = mReader.name(); + if (mReader.isEndDocument()) + break; + if (mReader.isEndElement()) + { + if (elementName == tBreak) + { + //when tbreak appers, move down by the drawn rect height + //TODO: line spacing is not calculated yet, probably additional code is required + curY += lastDrawnTextBoundingRect.height() + linespacing; + curX = 0.0; + height += lastDrawnTextBoundingRect.height(); + lastDrawnTextBoundingRect = QRectF(0,0,0,0); + continue; + } + if (elementName == tTspan) + { + textFont = fontStack.pop(); + fontColor = colorStack.pop(); + textAlign = alignStack.pop(); + continue; + } + } + if (mReader.isEndElement() && elementName == tText) + break; + if (mReader.isStartElement() && elementName == tTspan) + { + fontStack.push(textFont); + colorStack.push(fontColor); + alignStack.push(textAlign); + + parseTextAttributes(fontSize, fontColor, fontFamily, fontStretch, italic, fontWeight, textAlign, fontTransform); + textFont = QFont(fontFamily, fontSize, fontWeight, italic); + metrics = QFontMetricsF(textFont); + curHeight = metrics.height(); + linespacing = QFontMetricsF(textFont).leading(); + continue; + } + if (mReader.isCharacters() || mReader.isCDATA()) + { + QString text = mReader.text().toString(); + + //skip empty text + if (text.trimmed().length() == 0) + continue; + //get bounding rect to obtain desired text height + lastDrawnTextBoundingRect = metrics.boundingRect(QRectF(), textAlign, text); + QString log = QString().sprintf(" at rect %f, %f, %f, %f. Bounding rect is %f, %f, %f, %f", 0.0, curY, width, height - curY, lastDrawnTextBoundingRect.x(), lastDrawnTextBoundingRect.y(), lastDrawnTextBoundingRect.width(), lastDrawnTextBoundingRect.height()); + qWarning() << "Text " << text << log; + textFonts.append(textFont); + textRects.append(QRectF(curX, curY, lastDrawnTextBoundingRect.width(), lastDrawnTextBoundingRect.height())); + textLines.append(text); + textAligns.append(textAlign); + textColors.append(fontColor); + curX += lastDrawnTextBoundingRect.width(); + if (width < curX) + width = curX; + if (height == 0) + height = curHeight; + + continue; + } + } + + QSvgGenerator *generator = createSvgGenerator(width, height); + QPainter painter; + painter.begin(generator); + + if (textRects.count() != 0) + { + QListIterator textRectsIter(textRects); + QListIterator textFontsIter(textFonts); + QListIterator textLinesIter(textLines); + QListIterator textAlignsIter(textAligns); + QListIterator textColorsIter(textColors); + + while (textRectsIter.hasNext()) + { + QRectF rt = textRectsIter.next(); + QFont font = textFontsIter.next(); + QString line = textLinesIter.next(); + int align = textAlignsIter.next(); + QColor color = textColorsIter.next(); + painter.setFont(font); + painter.setPen(color); + painter.drawText(rt.x(), rt.y(), rt.width(), rt.height(), align, line); + } + } + + painter.end(); + + //add resulting svg file to scene + UBGraphicsSvgItem *svgItem = mCurrentScene->addSvg(QUrl::fromLocalFile(generator->fileName())); + repositionSvgItem(svgItem, width, height, x, y, hasTransform, transform); + + delete generator; + return true; } @@ -459,6 +762,8 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parsePage() createNewScene(); + qWarning() << "Added page number" << mProxy->pageCount(); + return true; } @@ -487,6 +792,7 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::parseIwbElementRef() bool UBCFFSubsetAdaptor::UBCFFSubsetReader::createNewScene() { mCurrentScene = UBPersistenceManager::persistenceManager()->createDocumentSceneAt(mProxy, mProxy->pageCount()); + mCurrentSceneRect = mCurrentScene->normalizedSceneRect(); return true; } @@ -530,10 +836,21 @@ QColor UBCFFSubsetAdaptor::UBCFFSubsetReader::colorFromString(const QString& clr return QColor(clrString); } +bool UBCFFSubsetAdaptor::UBCFFSubsetReader::getCurElementTransorm(QTransform &transform) +{ + if (mReader.attributes().hasAttribute(aTransform)) + { + transform = transformFromString(mReader.attributes().value(aTransform).toString()); + return true; + } + else + return false; +} + QTransform UBCFFSubsetAdaptor::UBCFFSubsetReader::transformFromString(const QString trString) { //check pattern for strings like 'rotate(10)' - QRegExp regexp("rotate\\(([-+]{0,1}[0-9]*\\.{0,1}[0-9]*)\\)"); + QRegExp regexp("rotate\\( *([-+]{0,1}[0-9]*\\.{0,1}[0-9]*) *\\)"); if (regexp.exactMatch(trString)) { if (regexp.capturedTexts().count() == 2 && regexp.capturedTexts().at(0).length() == trString.length()) @@ -544,7 +861,7 @@ QTransform UBCFFSubsetAdaptor::UBCFFSubsetReader::transformFromString(const QStr } //check pattern for strings like 'rotate(10,20,20)' or 'rotate(10.1,10.2,34.2)' - regexp.setPattern("rotate\\(([-+]{0,1}[0-9]*\\.{0,1}[0-9]*),([-+]{0,1}[0-9]*\\.{0,1}[0-9]*),([-+]{0,1}[0-9]*\\.{0,1}[0-9]*)\\)"); + regexp.setPattern("rotate\\( *([-+]{0,1}[0-9]*\\.{0,1}[0-9]*) *, *([-+]{0,1}[0-9]*\\.{0,1}[0-9]*) *, *([-+]{0,1}[0-9]*\\.{0,1}[0-9]*) *\\)"); if (regexp.exactMatch(trString)) { if (regexp.capturedTexts().count() == 4 && regexp.capturedTexts().at(0).length() == trString.length()) @@ -569,20 +886,26 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::getViewBoxDimenstions(const QString& if (capturesCount == 5 && regexp.capturedTexts().at(0).length() == viewBox.length()) { mViewBox = QRectF(0, 0, regexp.capturedTexts().at(3).toDouble(), regexp.capturedTexts().at(4).toDouble()); + mViewBoxCenter.setX(mViewBox.width() / 2); + mViewBoxCenter.setY(mViewBox.height() / 2); return true; } } mViewBox = QRectF(0, 0, 1000, 1000); + mViewBoxCenter = QPointF(500, 500); return false; } -QSvgGenerator* UBCFFSubsetAdaptor::UBCFFSubsetReader::createSvgGenerator() +QSvgGenerator* UBCFFSubsetAdaptor::UBCFFSubsetReader::createSvgGenerator(qreal width, qreal height) { QSvgGenerator* generator = new QSvgGenerator(); + qWarning() << QString("Making generator with file %1, size (%2, %3) and viewbox (%4 %5 %6 %7)").arg(mTempFilePath) + .arg(width).arg(height).arg(0.0).arg(0.0).arg(width).arg(width); + generator->setResolution(QApplication::desktop()->physicalDpiY()); generator->setFileName(mTempFilePath); - generator->setSize(mSize); - generator->setViewBox(mViewBox); + generator->setSize(QSize(width, height)); + generator->setViewBox(QRectF(0, 0, width, height)); return generator; } @@ -608,3 +931,62 @@ bool UBCFFSubsetAdaptor::UBCFFSubsetReader::getTempFileName() } } + +void UBCFFSubsetAdaptor::UBCFFSubsetReader::parseTextAttributes(qreal &fontSize, QColor &fontColor, + QString &fontFamily, QString &fontStretch, bool &italic, + int &fontWeight, int &textAlign, QTransform &fontTransform) +{ + if (mReader.attributes().hasAttribute(aFontSize)) + { + //consider inch has 72 liens + //since svg font size is given in pixels, divide it by pixels per line + fontSize = mReader.attributes().value(aFontSize).toString().toDouble() * 72 / QApplication::desktop()->physicalDpiY(); + } + + if (mReader.attributes().hasAttribute(aFill)) + fontColor = colorFromString(mReader.attributes().value(aFill).toString()); + + if (mReader.attributes().hasAttribute(aFontfamily)) + fontFamily = mReader.attributes().value(aFontfamily).toString(); + + if (mReader.attributes().hasAttribute(aFontstretch)) + fontStretch = mReader.attributes().value(aFontstretch).toString(); + + if (mReader.attributes().hasAttribute(aFontstyle)) + { + QStringRef fontStyle = mReader.attributes().value(aFontstyle); + italic = fontStyle == "italic"; + } + + if (mReader.attributes().hasAttribute(aFontweight)) + { + QStringRef weight = mReader.attributes().value(aFontweight); + if (weight == "normal") + fontWeight = QFont::Normal; + else if (weight == "light") + fontWeight = QFont::Light; + else if (weight == "demibold") + fontWeight = QFont::DemiBold; + else if (weight == "bold") + fontWeight = QFont::Bold; + if (weight == "black") + fontWeight = QFont::Black; + } + + if (mReader.attributes().hasAttribute(aTextalign)) + { + QString align = mReader.attributes().value(aTextalign).toString(); + if (align == "middle" || align == "center") + textAlign = Qt::AlignHCenter; + else + if (align == "start") + textAlign = Qt::AlignLeft; + else + if (align == "end") + textAlign = Qt::AlignRight; + } + + if (mReader.attributes().hasAttribute(aTransform)) + fontTransform = transformFromString(mReader.attributes().value(aTransform).toString()); +} + diff --git a/src/adaptors/UBCFFSubsetAdaptor.h b/src/adaptors/UBCFFSubsetAdaptor.h index ac3d6142..1b692a1f 100644 --- a/src/adaptors/UBCFFSubsetAdaptor.h +++ b/src/adaptors/UBCFFSubsetAdaptor.h @@ -1,3 +1,18 @@ +/* + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + #ifndef UBCFFSUBSETADAPTOR_H #define UBCFFSUBSETADAPTOR_H @@ -8,6 +23,8 @@ class UBDocumentProxy; class UBGraphicsScene; class QSvgGenerator; +class UBGraphicsSvgItem; +class QTransform; class UBCFFSubsetAdaptor { @@ -42,8 +59,10 @@ private: private: QString mTempFilePath; UBGraphicsScene *mCurrentScene; + QRectF mCurrentSceneRect; QString mIndent; QRectF mViewBox; + QPointF mViewBoxCenter; QSize mSize; //methods to store current xml parse state @@ -63,6 +82,7 @@ private: bool parseRect(); bool parseEllipse(); bool parseTextArea(); + bool parseText(); bool parsePolygon(); bool parsePage(); bool parsePageSet(); @@ -75,11 +95,16 @@ private: int currentState; //helper methods + bool getCurElementTransorm(QTransform &transform); + void repositionSvgItem(UBGraphicsSvgItem *item, qreal width, qreal height, qreal x, qreal y, bool useTransform, QTransform &transform); QColor colorFromString(const QString& clrString); QTransform transformFromString(const QString trString); bool getViewBoxDimenstions(const QString& viewBox); - QSvgGenerator* createSvgGenerator(); + QSvgGenerator* createSvgGenerator(qreal width, qreal height); bool getTempFileName(); + void parseTextAttributes(qreal &fontSize, QColor &fontColor, + QString &fontFamily, QString &fontStretch, bool &italic, + int &fontWeight, int &textAlign, QTransform &fontTransform); }; }; diff --git a/src/adaptors/UBImportCFF.cpp b/src/adaptors/UBImportCFF.cpp index c79f316b..8329eb61 100644 --- a/src/adaptors/UBImportCFF.cpp +++ b/src/adaptors/UBImportCFF.cpp @@ -1,21 +1,32 @@ +/* + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + #include -#include "UBImportCFF.h" -#include "document/UBDocumentProxy.h" #include "core/UBApplication.h" #include "core/UBPersistenceManager.h" #include "core/UBDocumentManager.h" #include "core/memcheck.h" #include "core/UBPersistenceManager.h" - -#include "frameworks/UBFileSystemUtils.h" - +#include "document/UBDocumentProxy.h" #include "domain/UBGraphicsPDFItem.h" - +#include "frameworks/UBFileSystemUtils.h" #include "pdf/PDFRenderer.h" - #include "UBCFFSubsetAdaptor.h" +#include "UBImportCFF.h" #include "quazip.h" #include "quazipfile.h" diff --git a/src/adaptors/UBImportCFF.h b/src/adaptors/UBImportCFF.h index a7de5414..3b5b0577 100644 --- a/src/adaptors/UBImportCFF.h +++ b/src/adaptors/UBImportCFF.h @@ -1,3 +1,18 @@ +/* + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + #ifndef UBIMPORTCFF_H #define UBIMPORTCFF_H