mirror of
https://bitbucket.org/smil3y/kde-extraapps.git
synced 2025-02-23 18:32:53 +00:00
imported svgpart and thumbnailers
This commit is contained in:
parent
bcc405448c
commit
d85503ae3f
24 changed files with 7164 additions and 0 deletions
|
@ -42,3 +42,5 @@ macro_optional_add_subdirectory (kuser)
|
||||||
macro_optional_add_subdirectory (okular)
|
macro_optional_add_subdirectory (okular)
|
||||||
macro_optional_add_subdirectory (partitionmanager)
|
macro_optional_add_subdirectory (partitionmanager)
|
||||||
macro_optional_add_subdirectory (print-manager)
|
macro_optional_add_subdirectory (print-manager)
|
||||||
|
macro_optional_add_subdirectory (svgpart)
|
||||||
|
macro_optional_add_subdirectory (thumbnailers)
|
||||||
|
|
20
svgpart/CMakeLists.txt
Normal file
20
svgpart/CMakeLists.txt
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
project(svgpart)
|
||||||
|
|
||||||
|
find_package(KDE4 REQUIRED)
|
||||||
|
include(KDE4Defaults)
|
||||||
|
include(MacroLibrary)
|
||||||
|
|
||||||
|
add_definitions(${QT_DEFINITIONS} ${QT_QTDBUS_DEFINITIONS} ${KDE4_DEFINITIONS})
|
||||||
|
include_directories(${QDBUS_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} ${KDE4_INCLUDES})
|
||||||
|
|
||||||
|
set(svgpart_SRCS
|
||||||
|
svgpart.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
kde4_add_plugin(svgpart ${svgpart_SRCS})
|
||||||
|
|
||||||
|
target_link_libraries(svgpart ${KDE4_KPARTS_LIBS})
|
||||||
|
|
||||||
|
install(TARGETS svgpart DESTINATION ${PLUGIN_INSTALL_DIR})
|
||||||
|
install(FILES svgpart.desktop DESTINATION ${SERVICES_INSTALL_DIR})
|
||||||
|
install(FILES svgpart.rc DESTINATION ${DATA_INSTALL_DIR}/svgpart)
|
339
svgpart/COPYING
Normal file
339
svgpart/COPYING
Normal file
|
@ -0,0 +1,339 @@
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
Version 2, June 1991
|
||||||
|
|
||||||
|
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The licenses for most software are designed to take away your
|
||||||
|
freedom to share and change it. By contrast, the GNU General Public
|
||||||
|
License is intended to guarantee your freedom to share and change free
|
||||||
|
software--to make sure the software is free for all its users. This
|
||||||
|
General Public License applies to most of the Free Software
|
||||||
|
Foundation's software and to any other program whose authors commit to
|
||||||
|
using it. (Some other Free Software Foundation software is covered by
|
||||||
|
the GNU Lesser General Public License instead.) You can apply it to
|
||||||
|
your programs, too.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom, not
|
||||||
|
price. Our General Public Licenses are designed to make sure that you
|
||||||
|
have the freedom to distribute copies of free software (and charge for
|
||||||
|
this service if you wish), that you receive source code or can get it
|
||||||
|
if you want it, that you can change the software or use pieces of it
|
||||||
|
in new free programs; and that you know you can do these things.
|
||||||
|
|
||||||
|
To protect your rights, we need to make restrictions that forbid
|
||||||
|
anyone to deny you these rights or to ask you to surrender the rights.
|
||||||
|
These restrictions translate to certain responsibilities for you if you
|
||||||
|
distribute copies of the software, or if you modify it.
|
||||||
|
|
||||||
|
For example, if you distribute copies of such a program, whether
|
||||||
|
gratis or for a fee, you must give the recipients all the rights that
|
||||||
|
you have. You must make sure that they, too, receive or can get the
|
||||||
|
source code. And you must show them these terms so they know their
|
||||||
|
rights.
|
||||||
|
|
||||||
|
We protect your rights with two steps: (1) copyright the software, and
|
||||||
|
(2) offer you this license which gives you legal permission to copy,
|
||||||
|
distribute and/or modify the software.
|
||||||
|
|
||||||
|
Also, for each author's protection and ours, we want to make certain
|
||||||
|
that everyone understands that there is no warranty for this free
|
||||||
|
software. If the software is modified by someone else and passed on, we
|
||||||
|
want its recipients to know that what they have is not the original, so
|
||||||
|
that any problems introduced by others will not reflect on the original
|
||||||
|
authors' reputations.
|
||||||
|
|
||||||
|
Finally, any free program is threatened constantly by software
|
||||||
|
patents. We wish to avoid the danger that redistributors of a free
|
||||||
|
program will individually obtain patent licenses, in effect making the
|
||||||
|
program proprietary. To prevent this, we have made it clear that any
|
||||||
|
patent must be licensed for everyone's free use or not licensed at all.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow.
|
||||||
|
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. This License applies to any program or other work which contains
|
||||||
|
a notice placed by the copyright holder saying it may be distributed
|
||||||
|
under the terms of this General Public License. The "Program", below,
|
||||||
|
refers to any such program or work, and a "work based on the Program"
|
||||||
|
means either the Program or any derivative work under copyright law:
|
||||||
|
that is to say, a work containing the Program or a portion of it,
|
||||||
|
either verbatim or with modifications and/or translated into another
|
||||||
|
language. (Hereinafter, translation is included without limitation in
|
||||||
|
the term "modification".) Each licensee is addressed as "you".
|
||||||
|
|
||||||
|
Activities other than copying, distribution and modification are not
|
||||||
|
covered by this License; they are outside its scope. The act of
|
||||||
|
running the Program is not restricted, and the output from the Program
|
||||||
|
is covered only if its contents constitute a work based on the
|
||||||
|
Program (independent of having been made by running the Program).
|
||||||
|
Whether that is true depends on what the Program does.
|
||||||
|
|
||||||
|
1. You may copy and distribute verbatim copies of the Program's
|
||||||
|
source code as you receive it, in any medium, provided that you
|
||||||
|
conspicuously and appropriately publish on each copy an appropriate
|
||||||
|
copyright notice and disclaimer of warranty; keep intact all the
|
||||||
|
notices that refer to this License and to the absence of any warranty;
|
||||||
|
and give any other recipients of the Program a copy of this License
|
||||||
|
along with the Program.
|
||||||
|
|
||||||
|
You may charge a fee for the physical act of transferring a copy, and
|
||||||
|
you may at your option offer warranty protection in exchange for a fee.
|
||||||
|
|
||||||
|
2. You may modify your copy or copies of the Program or any portion
|
||||||
|
of it, thus forming a work based on the Program, and copy and
|
||||||
|
distribute such modifications or work under the terms of Section 1
|
||||||
|
above, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) You must cause the modified files to carry prominent notices
|
||||||
|
stating that you changed the files and the date of any change.
|
||||||
|
|
||||||
|
b) You must cause any work that you distribute or publish, that in
|
||||||
|
whole or in part contains or is derived from the Program or any
|
||||||
|
part thereof, to be licensed as a whole at no charge to all third
|
||||||
|
parties under the terms of this License.
|
||||||
|
|
||||||
|
c) If the modified program normally reads commands interactively
|
||||||
|
when run, you must cause it, when started running for such
|
||||||
|
interactive use in the most ordinary way, to print or display an
|
||||||
|
announcement including an appropriate copyright notice and a
|
||||||
|
notice that there is no warranty (or else, saying that you provide
|
||||||
|
a warranty) and that users may redistribute the program under
|
||||||
|
these conditions, and telling the user how to view a copy of this
|
||||||
|
License. (Exception: if the Program itself is interactive but
|
||||||
|
does not normally print such an announcement, your work based on
|
||||||
|
the Program is not required to print an announcement.)
|
||||||
|
|
||||||
|
These requirements apply to the modified work as a whole. If
|
||||||
|
identifiable sections of that work are not derived from the Program,
|
||||||
|
and can be reasonably considered independent and separate works in
|
||||||
|
themselves, then this License, and its terms, do not apply to those
|
||||||
|
sections when you distribute them as separate works. But when you
|
||||||
|
distribute the same sections as part of a whole which is a work based
|
||||||
|
on the Program, the distribution of the whole must be on the terms of
|
||||||
|
this License, whose permissions for other licensees extend to the
|
||||||
|
entire whole, and thus to each and every part regardless of who wrote it.
|
||||||
|
|
||||||
|
Thus, it is not the intent of this section to claim rights or contest
|
||||||
|
your rights to work written entirely by you; rather, the intent is to
|
||||||
|
exercise the right to control the distribution of derivative or
|
||||||
|
collective works based on the Program.
|
||||||
|
|
||||||
|
In addition, mere aggregation of another work not based on the Program
|
||||||
|
with the Program (or with a work based on the Program) on a volume of
|
||||||
|
a storage or distribution medium does not bring the other work under
|
||||||
|
the scope of this License.
|
||||||
|
|
||||||
|
3. You may copy and distribute the Program (or a work based on it,
|
||||||
|
under Section 2) in object code or executable form under the terms of
|
||||||
|
Sections 1 and 2 above provided that you also do one of the following:
|
||||||
|
|
||||||
|
a) Accompany it with the complete corresponding machine-readable
|
||||||
|
source code, which must be distributed under the terms of Sections
|
||||||
|
1 and 2 above on a medium customarily used for software interchange; or,
|
||||||
|
|
||||||
|
b) Accompany it with a written offer, valid for at least three
|
||||||
|
years, to give any third party, for a charge no more than your
|
||||||
|
cost of physically performing source distribution, a complete
|
||||||
|
machine-readable copy of the corresponding source code, to be
|
||||||
|
distributed under the terms of Sections 1 and 2 above on a medium
|
||||||
|
customarily used for software interchange; or,
|
||||||
|
|
||||||
|
c) Accompany it with the information you received as to the offer
|
||||||
|
to distribute corresponding source code. (This alternative is
|
||||||
|
allowed only for noncommercial distribution and only if you
|
||||||
|
received the program in object code or executable form with such
|
||||||
|
an offer, in accord with Subsection b above.)
|
||||||
|
|
||||||
|
The source code for a work means the preferred form of the work for
|
||||||
|
making modifications to it. For an executable work, complete source
|
||||||
|
code means all the source code for all modules it contains, plus any
|
||||||
|
associated interface definition files, plus the scripts used to
|
||||||
|
control compilation and installation of the executable. However, as a
|
||||||
|
special exception, the source code distributed need not include
|
||||||
|
anything that is normally distributed (in either source or binary
|
||||||
|
form) with the major components (compiler, kernel, and so on) of the
|
||||||
|
operating system on which the executable runs, unless that component
|
||||||
|
itself accompanies the executable.
|
||||||
|
|
||||||
|
If distribution of executable or object code is made by offering
|
||||||
|
access to copy from a designated place, then offering equivalent
|
||||||
|
access to copy the source code from the same place counts as
|
||||||
|
distribution of the source code, even though third parties are not
|
||||||
|
compelled to copy the source along with the object code.
|
||||||
|
|
||||||
|
4. You may not copy, modify, sublicense, or distribute the Program
|
||||||
|
except as expressly provided under this License. Any attempt
|
||||||
|
otherwise to copy, modify, sublicense or distribute the Program is
|
||||||
|
void, and will automatically terminate your rights under this License.
|
||||||
|
However, parties who have received copies, or rights, from you under
|
||||||
|
this License will not have their licenses terminated so long as such
|
||||||
|
parties remain in full compliance.
|
||||||
|
|
||||||
|
5. You are not required to accept this License, since you have not
|
||||||
|
signed it. However, nothing else grants you permission to modify or
|
||||||
|
distribute the Program or its derivative works. These actions are
|
||||||
|
prohibited by law if you do not accept this License. Therefore, by
|
||||||
|
modifying or distributing the Program (or any work based on the
|
||||||
|
Program), you indicate your acceptance of this License to do so, and
|
||||||
|
all its terms and conditions for copying, distributing or modifying
|
||||||
|
the Program or works based on it.
|
||||||
|
|
||||||
|
6. Each time you redistribute the Program (or any work based on the
|
||||||
|
Program), the recipient automatically receives a license from the
|
||||||
|
original licensor to copy, distribute or modify the Program subject to
|
||||||
|
these terms and conditions. You may not impose any further
|
||||||
|
restrictions on the recipients' exercise of the rights granted herein.
|
||||||
|
You are not responsible for enforcing compliance by third parties to
|
||||||
|
this License.
|
||||||
|
|
||||||
|
7. If, as a consequence of a court judgment or allegation of patent
|
||||||
|
infringement or for any other reason (not limited to patent issues),
|
||||||
|
conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot
|
||||||
|
distribute so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you
|
||||||
|
may not distribute the Program at all. For example, if a patent
|
||||||
|
license would not permit royalty-free redistribution of the Program by
|
||||||
|
all those who receive copies directly or indirectly through you, then
|
||||||
|
the only way you could satisfy both it and this License would be to
|
||||||
|
refrain entirely from distribution of the Program.
|
||||||
|
|
||||||
|
If any portion of this section is held invalid or unenforceable under
|
||||||
|
any particular circumstance, the balance of the section is intended to
|
||||||
|
apply and the section as a whole is intended to apply in other
|
||||||
|
circumstances.
|
||||||
|
|
||||||
|
It is not the purpose of this section to induce you to infringe any
|
||||||
|
patents or other property right claims or to contest validity of any
|
||||||
|
such claims; this section has the sole purpose of protecting the
|
||||||
|
integrity of the free software distribution system, which is
|
||||||
|
implemented by public license practices. Many people have made
|
||||||
|
generous contributions to the wide range of software distributed
|
||||||
|
through that system in reliance on consistent application of that
|
||||||
|
system; it is up to the author/donor to decide if he or she is willing
|
||||||
|
to distribute software through any other system and a licensee cannot
|
||||||
|
impose that choice.
|
||||||
|
|
||||||
|
This section is intended to make thoroughly clear what is believed to
|
||||||
|
be a consequence of the rest of this License.
|
||||||
|
|
||||||
|
8. If the distribution and/or use of the Program is restricted in
|
||||||
|
certain countries either by patents or by copyrighted interfaces, the
|
||||||
|
original copyright holder who places the Program under this License
|
||||||
|
may add an explicit geographical distribution limitation excluding
|
||||||
|
those countries, so that distribution is permitted only in or among
|
||||||
|
countries not thus excluded. In such case, this License incorporates
|
||||||
|
the limitation as if written in the body of this License.
|
||||||
|
|
||||||
|
9. The Free Software Foundation may publish revised and/or new versions
|
||||||
|
of the General Public License from time to time. Such new versions will
|
||||||
|
be similar in spirit to the present version, but may differ in detail to
|
||||||
|
address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the Program
|
||||||
|
specifies a version number of this License which applies to it and "any
|
||||||
|
later version", you have the option of following the terms and conditions
|
||||||
|
either of that version or of any later version published by the Free
|
||||||
|
Software Foundation. If the Program does not specify a version number of
|
||||||
|
this License, you may choose any version ever published by the Free Software
|
||||||
|
Foundation.
|
||||||
|
|
||||||
|
10. If you wish to incorporate parts of the Program into other free
|
||||||
|
programs whose distribution conditions are different, write to the author
|
||||||
|
to ask for permission. For software which is copyrighted by the Free
|
||||||
|
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||||
|
make exceptions for this. Our decision will be guided by the two goals
|
||||||
|
of preserving the free status of all derivatives of our free software and
|
||||||
|
of promoting the sharing and reuse of software generally.
|
||||||
|
|
||||||
|
NO WARRANTY
|
||||||
|
|
||||||
|
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||||
|
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||||
|
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||||
|
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||||
|
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||||
|
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||||
|
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||||
|
REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||||
|
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||||
|
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||||
|
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||||
|
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||||
|
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
How to Apply These Terms to Your New Programs
|
||||||
|
|
||||||
|
If you develop a new program, and you want it to be of the greatest
|
||||||
|
possible use to the public, the best way to achieve this is to make it
|
||||||
|
free software which everyone can redistribute and change under these terms.
|
||||||
|
|
||||||
|
To do so, attach the following notices to the program. It is safest
|
||||||
|
to attach them to the start of each source file to most effectively
|
||||||
|
convey the exclusion of warranty; and each file should have at least
|
||||||
|
the "copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
|
<one line to give the program's name and a brief idea of what it does.>
|
||||||
|
Copyright (C) <year> <name of author>
|
||||||
|
|
||||||
|
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 2 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, write to the Free Software Foundation, Inc.,
|
||||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
If the program is interactive, make it output a short notice like this
|
||||||
|
when it starts in an interactive mode:
|
||||||
|
|
||||||
|
Gnomovision version 69, Copyright (C) year name of author
|
||||||
|
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||||
|
This is free software, and you are welcome to redistribute it
|
||||||
|
under certain conditions; type `show c' for details.
|
||||||
|
|
||||||
|
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||||
|
parts of the General Public License. Of course, the commands you use may
|
||||||
|
be called something other than `show w' and `show c'; they could even be
|
||||||
|
mouse-clicks or menu items--whatever suits your program.
|
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or your
|
||||||
|
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||||
|
necessary. Here is a sample; alter the names:
|
||||||
|
|
||||||
|
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||||
|
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||||
|
|
||||||
|
<signature of Ty Coon>, 1 April 1989
|
||||||
|
Ty Coon, President of Vice
|
||||||
|
|
||||||
|
This General Public License does not permit incorporating your program into
|
||||||
|
proprietary programs. If your program is a subroutine library, you may
|
||||||
|
consider it more useful to permit linking proprietary applications with the
|
||||||
|
library. If this is what you want to do, use the GNU Lesser General
|
||||||
|
Public License instead of this License.
|
3
svgpart/Messages.sh
Executable file
3
svgpart/Messages.sh
Executable file
|
@ -0,0 +1,3 @@
|
||||||
|
#! /bin/sh
|
||||||
|
$EXTRACTRC *.rc >> rc.cpp
|
||||||
|
$XGETTEXT *.cpp -o $podir/svgpart.pot
|
109
svgpart/svgpart.cpp
Normal file
109
svgpart/svgpart.cpp
Normal file
|
@ -0,0 +1,109 @@
|
||||||
|
/*
|
||||||
|
Copyright 2007 Aurélien Gâteau
|
||||||
|
|
||||||
|
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 2
|
||||||
|
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, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
*/
|
||||||
|
#include "svgpart.moc"
|
||||||
|
|
||||||
|
// Qt
|
||||||
|
#include <QGraphicsScene>
|
||||||
|
#include <QGraphicsSvgItem>
|
||||||
|
#include <QGraphicsView>
|
||||||
|
#include <QSvgRenderer>
|
||||||
|
|
||||||
|
// KDE
|
||||||
|
#include <kaboutdata.h>
|
||||||
|
#include <kactioncollection.h>
|
||||||
|
#include <kgenericfactory.h>
|
||||||
|
#include <kstandardaction.h>
|
||||||
|
|
||||||
|
// Local
|
||||||
|
|
||||||
|
static KAboutData createAboutData()
|
||||||
|
{
|
||||||
|
KAboutData aboutData( "svgpart", 0, ki18n("SVG Part"),
|
||||||
|
"1.0", ki18n("A KPart to display SVG images"),
|
||||||
|
KAboutData::License_GPL,
|
||||||
|
ki18n("Copyright 2007, Aurélien Gâteau <aurelien.gateau@free.fr>"));
|
||||||
|
return aboutData;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Factory Code
|
||||||
|
K_PLUGIN_FACTORY( SvgPartFactory, registerPlugin< SvgPart >(); )
|
||||||
|
K_EXPORT_PLUGIN( SvgPartFactory( createAboutData() ) )
|
||||||
|
|
||||||
|
|
||||||
|
SvgPart::SvgPart(QWidget* parentWidget, QObject* parent, const QVariantList&)
|
||||||
|
: KParts::ReadOnlyPart(parent)
|
||||||
|
{
|
||||||
|
mRenderer = new QSvgRenderer(this);
|
||||||
|
mScene = new QGraphicsScene(this);
|
||||||
|
mView = new QGraphicsView(mScene, parentWidget);
|
||||||
|
mView->setFrameStyle(QFrame::NoFrame);
|
||||||
|
mView->setDragMode(QGraphicsView::ScrollHandDrag);
|
||||||
|
mItem = 0;
|
||||||
|
setWidget(mView);
|
||||||
|
|
||||||
|
KStandardAction::actualSize(this, SLOT(zoomActualSize()), actionCollection());
|
||||||
|
KStandardAction::zoomIn(this, SLOT(zoomIn()), actionCollection());
|
||||||
|
KStandardAction::zoomOut(this, SLOT(zoomOut()), actionCollection());
|
||||||
|
setXMLFile("svgpart/svgpart.rc");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool SvgPart::openFile() {
|
||||||
|
if (!mRenderer->load(localFilePath())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
mItem = new QGraphicsSvgItem();
|
||||||
|
mItem->setSharedRenderer(mRenderer);
|
||||||
|
mScene->addItem(mItem);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool SvgPart::closeUrl() {
|
||||||
|
delete mItem;
|
||||||
|
mItem = 0;
|
||||||
|
return KParts::ReadOnlyPart::closeUrl();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void SvgPart::zoomIn() {
|
||||||
|
setZoom(zoom() * 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void SvgPart::zoomOut() {
|
||||||
|
setZoom(zoom() / 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void SvgPart::zoomActualSize() {
|
||||||
|
setZoom(1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
qreal SvgPart::zoom() const {
|
||||||
|
return mView->matrix().m11();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void SvgPart::setZoom(qreal value) {
|
||||||
|
QMatrix matrix;
|
||||||
|
matrix.scale(value, value);
|
||||||
|
mView->setMatrix(matrix);
|
||||||
|
}
|
67
svgpart/svgpart.desktop
Normal file
67
svgpart/svgpart.desktop
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Service
|
||||||
|
Name=Svg Part
|
||||||
|
Name[ar]=جزء Svg
|
||||||
|
Name[ast]=Parte SVG
|
||||||
|
Name[bg]=Модул за Svg
|
||||||
|
Name[bs]=SVG dio
|
||||||
|
Name[ca]=Svg Part
|
||||||
|
Name[ca@valencia]=Svg Part
|
||||||
|
Name[cs]=SVG komponenta
|
||||||
|
Name[da]=Svg Part
|
||||||
|
Name[de]=SVG-Komponente
|
||||||
|
Name[el]=Τμήμα Svg
|
||||||
|
Name[en_GB]=Svg Part
|
||||||
|
Name[eo]=Svg komponanto
|
||||||
|
Name[es]=Parte SVG
|
||||||
|
Name[et]=Svg komponent
|
||||||
|
Name[eu]=SVGren zatia
|
||||||
|
Name[fi]=SVG-osa
|
||||||
|
Name[fr]=Composant SVG
|
||||||
|
Name[ga]=Comhpháirt Svg
|
||||||
|
Name[gl]=Compoñente de SVG
|
||||||
|
Name[hne]=एसवीजी पार्ट
|
||||||
|
Name[hr]=Svg Part
|
||||||
|
Name[hu]=SVG objektum
|
||||||
|
Name[ia]=Parte de SVG
|
||||||
|
Name[is]=Svg hlutur
|
||||||
|
Name[it]=Componente SVG
|
||||||
|
Name[ja]=SVG コンポーネント
|
||||||
|
Name[kk]=Svg компоненті
|
||||||
|
Name[km]=ផ្នែក Svg
|
||||||
|
Name[ko]=Svg 부분
|
||||||
|
Name[ku]=Beşa Svg
|
||||||
|
Name[lt]=Svg Part
|
||||||
|
Name[lv]=Svg daļa
|
||||||
|
Name[mr]=Svg भाग
|
||||||
|
Name[nb]=Svg-del
|
||||||
|
Name[nds]=SVG-Komponent
|
||||||
|
Name[nl]=SVG-component
|
||||||
|
Name[nn]=SVG-del
|
||||||
|
Name[pa]=Svg ਭਾਗ
|
||||||
|
Name[pl]=Moduł SVG
|
||||||
|
Name[pt]=Componente de SVG
|
||||||
|
Name[pt_BR]=Componente SVG
|
||||||
|
Name[ro]=Componentă SVG
|
||||||
|
Name[ru]=Компонент просмотра Svg
|
||||||
|
Name[si]=Svg Part
|
||||||
|
Name[sk]=Svg komponent
|
||||||
|
Name[sl]=Sestavni del SVG
|
||||||
|
Name[sr]=СВГ део
|
||||||
|
Name[sr@ijekavian]=СВГ део
|
||||||
|
Name[sr@ijekavianlatin]=SVG deo
|
||||||
|
Name[sr@latin]=SVG deo
|
||||||
|
Name[sv]=SVG-delprogram
|
||||||
|
Name[th]=ส่วนจัดการ Svg
|
||||||
|
Name[tr]=Svg Parçacığı
|
||||||
|
Name[ug]=Svg Part
|
||||||
|
Name[uk]=Компонент Svg
|
||||||
|
Name[vi]=Phần nhúng đọc SVG
|
||||||
|
Name[x-test]=xxSvg Partxx
|
||||||
|
Name[zh_CN]=Svg 组件
|
||||||
|
Name[zh_TW]=Svg 部件
|
||||||
|
MimeType=image/svg+xml;image/svg+xml-compressed;
|
||||||
|
ServiceTypes=KParts/ReadOnlyPart
|
||||||
|
X-KDE-Library=svgpart
|
||||||
|
InitialPreference=12
|
||||||
|
Icon=image-svg+xml
|
56
svgpart/svgpart.h
Normal file
56
svgpart/svgpart.h
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
/*
|
||||||
|
Copyright 2007 Aurélien Gâteau
|
||||||
|
|
||||||
|
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 2
|
||||||
|
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, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
*/
|
||||||
|
#ifndef SVGPART_H
|
||||||
|
#define SVGPART_H
|
||||||
|
|
||||||
|
// KDE
|
||||||
|
#include <kparts/part.h>
|
||||||
|
|
||||||
|
|
||||||
|
class QGraphicsScene;
|
||||||
|
class QGraphicsSvgItem;
|
||||||
|
class QGraphicsView;
|
||||||
|
class QSvgRenderer;
|
||||||
|
|
||||||
|
class SvgPart : public KParts::ReadOnlyPart {
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
SvgPart(QWidget* parentWidget, QObject* parent, const QVariantList&);
|
||||||
|
|
||||||
|
virtual bool closeUrl();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual bool openFile();
|
||||||
|
|
||||||
|
private Q_SLOTS:
|
||||||
|
void zoomActualSize();
|
||||||
|
void zoomIn();
|
||||||
|
void zoomOut();
|
||||||
|
|
||||||
|
private:
|
||||||
|
QGraphicsScene* mScene;
|
||||||
|
QGraphicsView* mView;
|
||||||
|
QGraphicsSvgItem* mItem;
|
||||||
|
QSvgRenderer* mRenderer;
|
||||||
|
|
||||||
|
qreal zoom() const;
|
||||||
|
void setZoom(qreal);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* SVGPART_H */
|
22
svgpart/svgpart.rc
Normal file
22
svgpart/svgpart.rc
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
<!DOCTYPE kpartgui>
|
||||||
|
<kpartgui name="SvgPart" version="2">
|
||||||
|
<MenuBar>
|
||||||
|
<Menu name="view"><text>&View</text>
|
||||||
|
<Action name="view_actual_size"/>
|
||||||
|
<!--
|
||||||
|
<Action name="view_zoom_to_fit"/>
|
||||||
|
-->
|
||||||
|
<Action name="view_zoom_in"/>
|
||||||
|
<Action name="view_zoom_out"/>
|
||||||
|
</Menu>
|
||||||
|
</MenuBar>
|
||||||
|
<ToolBar name="mainToolBar"><text>Main Toolbar</text>
|
||||||
|
<Action name="view_actual_size"/>
|
||||||
|
<!--
|
||||||
|
<Action name="view_zoom_to_fit"/>
|
||||||
|
-->
|
||||||
|
<Action name="view_zoom_in"/>
|
||||||
|
<Action name="view_zoom_out"/>
|
||||||
|
</ToolBar>
|
||||||
|
</kpartgui>
|
||||||
|
|
23
thumbnailers/CMakeLists.txt
Normal file
23
thumbnailers/CMakeLists.txt
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
project(kdegraphics-thumbnailers)
|
||||||
|
|
||||||
|
find_package(KDE4 REQUIRED)
|
||||||
|
include(KDE4Defaults)
|
||||||
|
include(MacroLibrary)
|
||||||
|
include(MacroOptionalAddSubdirectory)
|
||||||
|
|
||||||
|
add_definitions(${QT_DEFINITIONS} ${KDE4_DEFINITIONS} -DQT_USE_FAST_CONCATENATION -DQT_USE_FAST_OPERATOR_PLUS)
|
||||||
|
include_directories(${KDE4_INCLUDES})
|
||||||
|
|
||||||
|
macro_optional_find_package(Kexiv2)
|
||||||
|
macro_optional_find_package(Kdcraw)
|
||||||
|
|
||||||
|
macro_log_feature(KEXIV2_FOUND "libkexiv2" "A library for reading and writing image metadata" "www.kde.org" FALSE "" "Required to build the RAW thumbnailer")
|
||||||
|
macro_log_feature(KDCRAW_FOUND "libkdcraw" "A library for accessing raw files" "www.kde.org" FALSE "" "Required to build the RAW thumbnailer")
|
||||||
|
|
||||||
|
macro_optional_add_subdirectory(ps)
|
||||||
|
|
||||||
|
if(KEXIV2_FOUND AND KDCRAW_FOUND)
|
||||||
|
macro_optional_add_subdirectory(raw)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
macro_display_feature_log()
|
339
thumbnailers/COPYING
Normal file
339
thumbnailers/COPYING
Normal file
|
@ -0,0 +1,339 @@
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
Version 2, June 1991
|
||||||
|
|
||||||
|
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The licenses for most software are designed to take away your
|
||||||
|
freedom to share and change it. By contrast, the GNU General Public
|
||||||
|
License is intended to guarantee your freedom to share and change free
|
||||||
|
software--to make sure the software is free for all its users. This
|
||||||
|
General Public License applies to most of the Free Software
|
||||||
|
Foundation's software and to any other program whose authors commit to
|
||||||
|
using it. (Some other Free Software Foundation software is covered by
|
||||||
|
the GNU Lesser General Public License instead.) You can apply it to
|
||||||
|
your programs, too.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom, not
|
||||||
|
price. Our General Public Licenses are designed to make sure that you
|
||||||
|
have the freedom to distribute copies of free software (and charge for
|
||||||
|
this service if you wish), that you receive source code or can get it
|
||||||
|
if you want it, that you can change the software or use pieces of it
|
||||||
|
in new free programs; and that you know you can do these things.
|
||||||
|
|
||||||
|
To protect your rights, we need to make restrictions that forbid
|
||||||
|
anyone to deny you these rights or to ask you to surrender the rights.
|
||||||
|
These restrictions translate to certain responsibilities for you if you
|
||||||
|
distribute copies of the software, or if you modify it.
|
||||||
|
|
||||||
|
For example, if you distribute copies of such a program, whether
|
||||||
|
gratis or for a fee, you must give the recipients all the rights that
|
||||||
|
you have. You must make sure that they, too, receive or can get the
|
||||||
|
source code. And you must show them these terms so they know their
|
||||||
|
rights.
|
||||||
|
|
||||||
|
We protect your rights with two steps: (1) copyright the software, and
|
||||||
|
(2) offer you this license which gives you legal permission to copy,
|
||||||
|
distribute and/or modify the software.
|
||||||
|
|
||||||
|
Also, for each author's protection and ours, we want to make certain
|
||||||
|
that everyone understands that there is no warranty for this free
|
||||||
|
software. If the software is modified by someone else and passed on, we
|
||||||
|
want its recipients to know that what they have is not the original, so
|
||||||
|
that any problems introduced by others will not reflect on the original
|
||||||
|
authors' reputations.
|
||||||
|
|
||||||
|
Finally, any free program is threatened constantly by software
|
||||||
|
patents. We wish to avoid the danger that redistributors of a free
|
||||||
|
program will individually obtain patent licenses, in effect making the
|
||||||
|
program proprietary. To prevent this, we have made it clear that any
|
||||||
|
patent must be licensed for everyone's free use or not licensed at all.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow.
|
||||||
|
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. This License applies to any program or other work which contains
|
||||||
|
a notice placed by the copyright holder saying it may be distributed
|
||||||
|
under the terms of this General Public License. The "Program", below,
|
||||||
|
refers to any such program or work, and a "work based on the Program"
|
||||||
|
means either the Program or any derivative work under copyright law:
|
||||||
|
that is to say, a work containing the Program or a portion of it,
|
||||||
|
either verbatim or with modifications and/or translated into another
|
||||||
|
language. (Hereinafter, translation is included without limitation in
|
||||||
|
the term "modification".) Each licensee is addressed as "you".
|
||||||
|
|
||||||
|
Activities other than copying, distribution and modification are not
|
||||||
|
covered by this License; they are outside its scope. The act of
|
||||||
|
running the Program is not restricted, and the output from the Program
|
||||||
|
is covered only if its contents constitute a work based on the
|
||||||
|
Program (independent of having been made by running the Program).
|
||||||
|
Whether that is true depends on what the Program does.
|
||||||
|
|
||||||
|
1. You may copy and distribute verbatim copies of the Program's
|
||||||
|
source code as you receive it, in any medium, provided that you
|
||||||
|
conspicuously and appropriately publish on each copy an appropriate
|
||||||
|
copyright notice and disclaimer of warranty; keep intact all the
|
||||||
|
notices that refer to this License and to the absence of any warranty;
|
||||||
|
and give any other recipients of the Program a copy of this License
|
||||||
|
along with the Program.
|
||||||
|
|
||||||
|
You may charge a fee for the physical act of transferring a copy, and
|
||||||
|
you may at your option offer warranty protection in exchange for a fee.
|
||||||
|
|
||||||
|
2. You may modify your copy or copies of the Program or any portion
|
||||||
|
of it, thus forming a work based on the Program, and copy and
|
||||||
|
distribute such modifications or work under the terms of Section 1
|
||||||
|
above, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) You must cause the modified files to carry prominent notices
|
||||||
|
stating that you changed the files and the date of any change.
|
||||||
|
|
||||||
|
b) You must cause any work that you distribute or publish, that in
|
||||||
|
whole or in part contains or is derived from the Program or any
|
||||||
|
part thereof, to be licensed as a whole at no charge to all third
|
||||||
|
parties under the terms of this License.
|
||||||
|
|
||||||
|
c) If the modified program normally reads commands interactively
|
||||||
|
when run, you must cause it, when started running for such
|
||||||
|
interactive use in the most ordinary way, to print or display an
|
||||||
|
announcement including an appropriate copyright notice and a
|
||||||
|
notice that there is no warranty (or else, saying that you provide
|
||||||
|
a warranty) and that users may redistribute the program under
|
||||||
|
these conditions, and telling the user how to view a copy of this
|
||||||
|
License. (Exception: if the Program itself is interactive but
|
||||||
|
does not normally print such an announcement, your work based on
|
||||||
|
the Program is not required to print an announcement.)
|
||||||
|
|
||||||
|
These requirements apply to the modified work as a whole. If
|
||||||
|
identifiable sections of that work are not derived from the Program,
|
||||||
|
and can be reasonably considered independent and separate works in
|
||||||
|
themselves, then this License, and its terms, do not apply to those
|
||||||
|
sections when you distribute them as separate works. But when you
|
||||||
|
distribute the same sections as part of a whole which is a work based
|
||||||
|
on the Program, the distribution of the whole must be on the terms of
|
||||||
|
this License, whose permissions for other licensees extend to the
|
||||||
|
entire whole, and thus to each and every part regardless of who wrote it.
|
||||||
|
|
||||||
|
Thus, it is not the intent of this section to claim rights or contest
|
||||||
|
your rights to work written entirely by you; rather, the intent is to
|
||||||
|
exercise the right to control the distribution of derivative or
|
||||||
|
collective works based on the Program.
|
||||||
|
|
||||||
|
In addition, mere aggregation of another work not based on the Program
|
||||||
|
with the Program (or with a work based on the Program) on a volume of
|
||||||
|
a storage or distribution medium does not bring the other work under
|
||||||
|
the scope of this License.
|
||||||
|
|
||||||
|
3. You may copy and distribute the Program (or a work based on it,
|
||||||
|
under Section 2) in object code or executable form under the terms of
|
||||||
|
Sections 1 and 2 above provided that you also do one of the following:
|
||||||
|
|
||||||
|
a) Accompany it with the complete corresponding machine-readable
|
||||||
|
source code, which must be distributed under the terms of Sections
|
||||||
|
1 and 2 above on a medium customarily used for software interchange; or,
|
||||||
|
|
||||||
|
b) Accompany it with a written offer, valid for at least three
|
||||||
|
years, to give any third party, for a charge no more than your
|
||||||
|
cost of physically performing source distribution, a complete
|
||||||
|
machine-readable copy of the corresponding source code, to be
|
||||||
|
distributed under the terms of Sections 1 and 2 above on a medium
|
||||||
|
customarily used for software interchange; or,
|
||||||
|
|
||||||
|
c) Accompany it with the information you received as to the offer
|
||||||
|
to distribute corresponding source code. (This alternative is
|
||||||
|
allowed only for noncommercial distribution and only if you
|
||||||
|
received the program in object code or executable form with such
|
||||||
|
an offer, in accord with Subsection b above.)
|
||||||
|
|
||||||
|
The source code for a work means the preferred form of the work for
|
||||||
|
making modifications to it. For an executable work, complete source
|
||||||
|
code means all the source code for all modules it contains, plus any
|
||||||
|
associated interface definition files, plus the scripts used to
|
||||||
|
control compilation and installation of the executable. However, as a
|
||||||
|
special exception, the source code distributed need not include
|
||||||
|
anything that is normally distributed (in either source or binary
|
||||||
|
form) with the major components (compiler, kernel, and so on) of the
|
||||||
|
operating system on which the executable runs, unless that component
|
||||||
|
itself accompanies the executable.
|
||||||
|
|
||||||
|
If distribution of executable or object code is made by offering
|
||||||
|
access to copy from a designated place, then offering equivalent
|
||||||
|
access to copy the source code from the same place counts as
|
||||||
|
distribution of the source code, even though third parties are not
|
||||||
|
compelled to copy the source along with the object code.
|
||||||
|
|
||||||
|
4. You may not copy, modify, sublicense, or distribute the Program
|
||||||
|
except as expressly provided under this License. Any attempt
|
||||||
|
otherwise to copy, modify, sublicense or distribute the Program is
|
||||||
|
void, and will automatically terminate your rights under this License.
|
||||||
|
However, parties who have received copies, or rights, from you under
|
||||||
|
this License will not have their licenses terminated so long as such
|
||||||
|
parties remain in full compliance.
|
||||||
|
|
||||||
|
5. You are not required to accept this License, since you have not
|
||||||
|
signed it. However, nothing else grants you permission to modify or
|
||||||
|
distribute the Program or its derivative works. These actions are
|
||||||
|
prohibited by law if you do not accept this License. Therefore, by
|
||||||
|
modifying or distributing the Program (or any work based on the
|
||||||
|
Program), you indicate your acceptance of this License to do so, and
|
||||||
|
all its terms and conditions for copying, distributing or modifying
|
||||||
|
the Program or works based on it.
|
||||||
|
|
||||||
|
6. Each time you redistribute the Program (or any work based on the
|
||||||
|
Program), the recipient automatically receives a license from the
|
||||||
|
original licensor to copy, distribute or modify the Program subject to
|
||||||
|
these terms and conditions. You may not impose any further
|
||||||
|
restrictions on the recipients' exercise of the rights granted herein.
|
||||||
|
You are not responsible for enforcing compliance by third parties to
|
||||||
|
this License.
|
||||||
|
|
||||||
|
7. If, as a consequence of a court judgment or allegation of patent
|
||||||
|
infringement or for any other reason (not limited to patent issues),
|
||||||
|
conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot
|
||||||
|
distribute so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you
|
||||||
|
may not distribute the Program at all. For example, if a patent
|
||||||
|
license would not permit royalty-free redistribution of the Program by
|
||||||
|
all those who receive copies directly or indirectly through you, then
|
||||||
|
the only way you could satisfy both it and this License would be to
|
||||||
|
refrain entirely from distribution of the Program.
|
||||||
|
|
||||||
|
If any portion of this section is held invalid or unenforceable under
|
||||||
|
any particular circumstance, the balance of the section is intended to
|
||||||
|
apply and the section as a whole is intended to apply in other
|
||||||
|
circumstances.
|
||||||
|
|
||||||
|
It is not the purpose of this section to induce you to infringe any
|
||||||
|
patents or other property right claims or to contest validity of any
|
||||||
|
such claims; this section has the sole purpose of protecting the
|
||||||
|
integrity of the free software distribution system, which is
|
||||||
|
implemented by public license practices. Many people have made
|
||||||
|
generous contributions to the wide range of software distributed
|
||||||
|
through that system in reliance on consistent application of that
|
||||||
|
system; it is up to the author/donor to decide if he or she is willing
|
||||||
|
to distribute software through any other system and a licensee cannot
|
||||||
|
impose that choice.
|
||||||
|
|
||||||
|
This section is intended to make thoroughly clear what is believed to
|
||||||
|
be a consequence of the rest of this License.
|
||||||
|
|
||||||
|
8. If the distribution and/or use of the Program is restricted in
|
||||||
|
certain countries either by patents or by copyrighted interfaces, the
|
||||||
|
original copyright holder who places the Program under this License
|
||||||
|
may add an explicit geographical distribution limitation excluding
|
||||||
|
those countries, so that distribution is permitted only in or among
|
||||||
|
countries not thus excluded. In such case, this License incorporates
|
||||||
|
the limitation as if written in the body of this License.
|
||||||
|
|
||||||
|
9. The Free Software Foundation may publish revised and/or new versions
|
||||||
|
of the General Public License from time to time. Such new versions will
|
||||||
|
be similar in spirit to the present version, but may differ in detail to
|
||||||
|
address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the Program
|
||||||
|
specifies a version number of this License which applies to it and "any
|
||||||
|
later version", you have the option of following the terms and conditions
|
||||||
|
either of that version or of any later version published by the Free
|
||||||
|
Software Foundation. If the Program does not specify a version number of
|
||||||
|
this License, you may choose any version ever published by the Free Software
|
||||||
|
Foundation.
|
||||||
|
|
||||||
|
10. If you wish to incorporate parts of the Program into other free
|
||||||
|
programs whose distribution conditions are different, write to the author
|
||||||
|
to ask for permission. For software which is copyrighted by the Free
|
||||||
|
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||||
|
make exceptions for this. Our decision will be guided by the two goals
|
||||||
|
of preserving the free status of all derivatives of our free software and
|
||||||
|
of promoting the sharing and reuse of software generally.
|
||||||
|
|
||||||
|
NO WARRANTY
|
||||||
|
|
||||||
|
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||||
|
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||||
|
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||||
|
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||||
|
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||||
|
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||||
|
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||||
|
REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||||
|
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||||
|
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||||
|
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||||
|
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||||
|
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
How to Apply These Terms to Your New Programs
|
||||||
|
|
||||||
|
If you develop a new program, and you want it to be of the greatest
|
||||||
|
possible use to the public, the best way to achieve this is to make it
|
||||||
|
free software which everyone can redistribute and change under these terms.
|
||||||
|
|
||||||
|
To do so, attach the following notices to the program. It is safest
|
||||||
|
to attach them to the start of each source file to most effectively
|
||||||
|
convey the exclusion of warranty; and each file should have at least
|
||||||
|
the "copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
|
<one line to give the program's name and a brief idea of what it does.>
|
||||||
|
Copyright (C) <year> <name of author>
|
||||||
|
|
||||||
|
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 2 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, write to the Free Software Foundation, Inc.,
|
||||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
If the program is interactive, make it output a short notice like this
|
||||||
|
when it starts in an interactive mode:
|
||||||
|
|
||||||
|
Gnomovision version 69, Copyright (C) year name of author
|
||||||
|
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||||
|
This is free software, and you are welcome to redistribute it
|
||||||
|
under certain conditions; type `show c' for details.
|
||||||
|
|
||||||
|
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||||
|
parts of the General Public License. Of course, the commands you use may
|
||||||
|
be called something other than `show w' and `show c'; they could even be
|
||||||
|
mouse-clicks or menu items--whatever suits your program.
|
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or your
|
||||||
|
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||||
|
necessary. Here is a sample; alter the names:
|
||||||
|
|
||||||
|
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||||
|
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||||
|
|
||||||
|
<signature of Ty Coon>, 1 April 1989
|
||||||
|
Ty Coon, President of Vice
|
||||||
|
|
||||||
|
This General Public License does not permit incorporating your program into
|
||||||
|
proprietary programs. If your program is a subroutine library, you may
|
||||||
|
consider it more useful to permit linking proprietary applications with the
|
||||||
|
library. If this is what you want to do, use the GNU Lesser General
|
||||||
|
Public License instead of this License.
|
481
thumbnailers/COPYING.LIB
Normal file
481
thumbnailers/COPYING.LIB
Normal file
|
@ -0,0 +1,481 @@
|
||||||
|
GNU LIBRARY GENERAL PUBLIC LICENSE
|
||||||
|
Version 2, June 1991
|
||||||
|
|
||||||
|
Copyright (C) 1991 Free Software Foundation, Inc.
|
||||||
|
51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
[This is the first released version of the library GPL. It is
|
||||||
|
numbered 2 because it goes with version 2 of the ordinary GPL.]
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The licenses for most software are designed to take away your
|
||||||
|
freedom to share and change it. By contrast, the GNU General Public
|
||||||
|
Licenses are intended to guarantee your freedom to share and change
|
||||||
|
free software--to make sure the software is free for all its users.
|
||||||
|
|
||||||
|
This license, the Library General Public License, applies to some
|
||||||
|
specially designated Free Software Foundation software, and to any
|
||||||
|
other libraries whose authors decide to use it. You can use it for
|
||||||
|
your libraries, too.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom, not
|
||||||
|
price. Our General Public Licenses are designed to make sure that you
|
||||||
|
have the freedom to distribute copies of free software (and charge for
|
||||||
|
this service if you wish), that you receive source code or can get it
|
||||||
|
if you want it, that you can change the software or use pieces of it
|
||||||
|
in new free programs; and that you know you can do these things.
|
||||||
|
|
||||||
|
To protect your rights, we need to make restrictions that forbid
|
||||||
|
anyone to deny you these rights or to ask you to surrender the rights.
|
||||||
|
These restrictions translate to certain responsibilities for you if
|
||||||
|
you distribute copies of the library, or if you modify it.
|
||||||
|
|
||||||
|
For example, if you distribute copies of the library, whether gratis
|
||||||
|
or for a fee, you must give the recipients all the rights that we gave
|
||||||
|
you. You must make sure that they, too, receive or can get the source
|
||||||
|
code. If you link a program with the library, you must provide
|
||||||
|
complete object files to the recipients so that they can relink them
|
||||||
|
with the library, after making changes to the library and recompiling
|
||||||
|
it. And you must show them these terms so they know their rights.
|
||||||
|
|
||||||
|
Our method of protecting your rights has two steps: (1) copyright
|
||||||
|
the library, and (2) offer you this license which gives you legal
|
||||||
|
permission to copy, distribute and/or modify the library.
|
||||||
|
|
||||||
|
Also, for each distributor's protection, we want to make certain
|
||||||
|
that everyone understands that there is no warranty for this free
|
||||||
|
library. If the library is modified by someone else and passed on, we
|
||||||
|
want its recipients to know that what they have is not the original
|
||||||
|
version, so that any problems introduced by others will not reflect on
|
||||||
|
the original authors' reputations.
|
||||||
|
|
||||||
|
Finally, any free program is threatened constantly by software
|
||||||
|
patents. We wish to avoid the danger that companies distributing free
|
||||||
|
software will individually obtain patent licenses, thus in effect
|
||||||
|
transforming the program into proprietary software. To prevent this,
|
||||||
|
we have made it clear that any patent must be licensed for everyone's
|
||||||
|
free use or not licensed at all.
|
||||||
|
|
||||||
|
Most GNU software, including some libraries, is covered by the ordinary
|
||||||
|
GNU General Public License, which was designed for utility programs. This
|
||||||
|
license, the GNU Library General Public License, applies to certain
|
||||||
|
designated libraries. This license is quite different from the ordinary
|
||||||
|
one; be sure to read it in full, and don't assume that anything in it is
|
||||||
|
the same as in the ordinary license.
|
||||||
|
|
||||||
|
The reason we have a separate public license for some libraries is that
|
||||||
|
they blur the distinction we usually make between modifying or adding to a
|
||||||
|
program and simply using it. Linking a program with a library, without
|
||||||
|
changing the library, is in some sense simply using the library, and is
|
||||||
|
analogous to running a utility program or application program. However, in
|
||||||
|
a textual and legal sense, the linked executable is a combined work, a
|
||||||
|
derivative of the original library, and the ordinary General Public License
|
||||||
|
treats it as such.
|
||||||
|
|
||||||
|
Because of this blurred distinction, using the ordinary General
|
||||||
|
Public License for libraries did not effectively promote software
|
||||||
|
sharing, because most developers did not use the libraries. We
|
||||||
|
concluded that weaker conditions might promote sharing better.
|
||||||
|
|
||||||
|
However, unrestricted linking of non-free programs would deprive the
|
||||||
|
users of those programs of all benefit from the free status of the
|
||||||
|
libraries themselves. This Library General Public License is intended to
|
||||||
|
permit developers of non-free programs to use free libraries, while
|
||||||
|
preserving your freedom as a user of such programs to change the free
|
||||||
|
libraries that are incorporated in them. (We have not seen how to achieve
|
||||||
|
this as regards changes in header files, but we have achieved it as regards
|
||||||
|
changes in the actual functions of the Library.) The hope is that this
|
||||||
|
will lead to faster development of free libraries.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow. Pay close attention to the difference between a
|
||||||
|
"work based on the library" and a "work that uses the library". The
|
||||||
|
former contains code derived from the library, while the latter only
|
||||||
|
works together with the library.
|
||||||
|
|
||||||
|
Note that it is possible for a library to be covered by the ordinary
|
||||||
|
General Public License rather than by this special one.
|
||||||
|
|
||||||
|
GNU LIBRARY GENERAL PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. This License Agreement applies to any software library which
|
||||||
|
contains a notice placed by the copyright holder or other authorized
|
||||||
|
party saying it may be distributed under the terms of this Library
|
||||||
|
General Public License (also called "this License"). Each licensee is
|
||||||
|
addressed as "you".
|
||||||
|
|
||||||
|
A "library" means a collection of software functions and/or data
|
||||||
|
prepared so as to be conveniently linked with application programs
|
||||||
|
(which use some of those functions and data) to form executables.
|
||||||
|
|
||||||
|
The "Library", below, refers to any such software library or work
|
||||||
|
which has been distributed under these terms. A "work based on the
|
||||||
|
Library" means either the Library or any derivative work under
|
||||||
|
copyright law: that is to say, a work containing the Library or a
|
||||||
|
portion of it, either verbatim or with modifications and/or translated
|
||||||
|
straightforwardly into another language. (Hereinafter, translation is
|
||||||
|
included without limitation in the term "modification".)
|
||||||
|
|
||||||
|
"Source code" for a work means the preferred form of the work for
|
||||||
|
making modifications to it. For a library, complete source code means
|
||||||
|
all the source code for all modules it contains, plus any associated
|
||||||
|
interface definition files, plus the scripts used to control compilation
|
||||||
|
and installation of the library.
|
||||||
|
|
||||||
|
Activities other than copying, distribution and modification are not
|
||||||
|
covered by this License; they are outside its scope. The act of
|
||||||
|
running a program using the Library is not restricted, and output from
|
||||||
|
such a program is covered only if its contents constitute a work based
|
||||||
|
on the Library (independent of the use of the Library in a tool for
|
||||||
|
writing it). Whether that is true depends on what the Library does
|
||||||
|
and what the program that uses the Library does.
|
||||||
|
|
||||||
|
1. You may copy and distribute verbatim copies of the Library's
|
||||||
|
complete source code as you receive it, in any medium, provided that
|
||||||
|
you conspicuously and appropriately publish on each copy an
|
||||||
|
appropriate copyright notice and disclaimer of warranty; keep intact
|
||||||
|
all the notices that refer to this License and to the absence of any
|
||||||
|
warranty; and distribute a copy of this License along with the
|
||||||
|
Library.
|
||||||
|
|
||||||
|
You may charge a fee for the physical act of transferring a copy,
|
||||||
|
and you may at your option offer warranty protection in exchange for a
|
||||||
|
fee.
|
||||||
|
|
||||||
|
2. You may modify your copy or copies of the Library or any portion
|
||||||
|
of it, thus forming a work based on the Library, and copy and
|
||||||
|
distribute such modifications or work under the terms of Section 1
|
||||||
|
above, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) The modified work must itself be a software library.
|
||||||
|
|
||||||
|
b) You must cause the files modified to carry prominent notices
|
||||||
|
stating that you changed the files and the date of any change.
|
||||||
|
|
||||||
|
c) You must cause the whole of the work to be licensed at no
|
||||||
|
charge to all third parties under the terms of this License.
|
||||||
|
|
||||||
|
d) If a facility in the modified Library refers to a function or a
|
||||||
|
table of data to be supplied by an application program that uses
|
||||||
|
the facility, other than as an argument passed when the facility
|
||||||
|
is invoked, then you must make a good faith effort to ensure that,
|
||||||
|
in the event an application does not supply such function or
|
||||||
|
table, the facility still operates, and performs whatever part of
|
||||||
|
its purpose remains meaningful.
|
||||||
|
|
||||||
|
(For example, a function in a library to compute square roots has
|
||||||
|
a purpose that is entirely well-defined independent of the
|
||||||
|
application. Therefore, Subsection 2d requires that any
|
||||||
|
application-supplied function or table used by this function must
|
||||||
|
be optional: if the application does not supply it, the square
|
||||||
|
root function must still compute square roots.)
|
||||||
|
|
||||||
|
These requirements apply to the modified work as a whole. If
|
||||||
|
identifiable sections of that work are not derived from the Library,
|
||||||
|
and can be reasonably considered independent and separate works in
|
||||||
|
themselves, then this License, and its terms, do not apply to those
|
||||||
|
sections when you distribute them as separate works. But when you
|
||||||
|
distribute the same sections as part of a whole which is a work based
|
||||||
|
on the Library, the distribution of the whole must be on the terms of
|
||||||
|
this License, whose permissions for other licensees extend to the
|
||||||
|
entire whole, and thus to each and every part regardless of who wrote
|
||||||
|
it.
|
||||||
|
|
||||||
|
Thus, it is not the intent of this section to claim rights or contest
|
||||||
|
your rights to work written entirely by you; rather, the intent is to
|
||||||
|
exercise the right to control the distribution of derivative or
|
||||||
|
collective works based on the Library.
|
||||||
|
|
||||||
|
In addition, mere aggregation of another work not based on the Library
|
||||||
|
with the Library (or with a work based on the Library) on a volume of
|
||||||
|
a storage or distribution medium does not bring the other work under
|
||||||
|
the scope of this License.
|
||||||
|
|
||||||
|
3. You may opt to apply the terms of the ordinary GNU General Public
|
||||||
|
License instead of this License to a given copy of the Library. To do
|
||||||
|
this, you must alter all the notices that refer to this License, so
|
||||||
|
that they refer to the ordinary GNU General Public License, version 2,
|
||||||
|
instead of to this License. (If a newer version than version 2 of the
|
||||||
|
ordinary GNU General Public License has appeared, then you can specify
|
||||||
|
that version instead if you wish.) Do not make any other change in
|
||||||
|
these notices.
|
||||||
|
|
||||||
|
Once this change is made in a given copy, it is irreversible for
|
||||||
|
that copy, so the ordinary GNU General Public License applies to all
|
||||||
|
subsequent copies and derivative works made from that copy.
|
||||||
|
|
||||||
|
This option is useful when you wish to copy part of the code of
|
||||||
|
the Library into a program that is not a library.
|
||||||
|
|
||||||
|
4. You may copy and distribute the Library (or a portion or
|
||||||
|
derivative of it, under Section 2) in object code or executable form
|
||||||
|
under the terms of Sections 1 and 2 above provided that you accompany
|
||||||
|
it with the complete corresponding machine-readable source code, which
|
||||||
|
must be distributed under the terms of Sections 1 and 2 above on a
|
||||||
|
medium customarily used for software interchange.
|
||||||
|
|
||||||
|
If distribution of object code is made by offering access to copy
|
||||||
|
from a designated place, then offering equivalent access to copy the
|
||||||
|
source code from the same place satisfies the requirement to
|
||||||
|
distribute the source code, even though third parties are not
|
||||||
|
compelled to copy the source along with the object code.
|
||||||
|
|
||||||
|
5. A program that contains no derivative of any portion of the
|
||||||
|
Library, but is designed to work with the Library by being compiled or
|
||||||
|
linked with it, is called a "work that uses the Library". Such a
|
||||||
|
work, in isolation, is not a derivative work of the Library, and
|
||||||
|
therefore falls outside the scope of this License.
|
||||||
|
|
||||||
|
However, linking a "work that uses the Library" with the Library
|
||||||
|
creates an executable that is a derivative of the Library (because it
|
||||||
|
contains portions of the Library), rather than a "work that uses the
|
||||||
|
library". The executable is therefore covered by this License.
|
||||||
|
Section 6 states terms for distribution of such executables.
|
||||||
|
|
||||||
|
When a "work that uses the Library" uses material from a header file
|
||||||
|
that is part of the Library, the object code for the work may be a
|
||||||
|
derivative work of the Library even though the source code is not.
|
||||||
|
Whether this is true is especially significant if the work can be
|
||||||
|
linked without the Library, or if the work is itself a library. The
|
||||||
|
threshold for this to be true is not precisely defined by law.
|
||||||
|
|
||||||
|
If such an object file uses only numerical parameters, data
|
||||||
|
structure layouts and accessors, and small macros and small inline
|
||||||
|
functions (ten lines or less in length), then the use of the object
|
||||||
|
file is unrestricted, regardless of whether it is legally a derivative
|
||||||
|
work. (Executables containing this object code plus portions of the
|
||||||
|
Library will still fall under Section 6.)
|
||||||
|
|
||||||
|
Otherwise, if the work is a derivative of the Library, you may
|
||||||
|
distribute the object code for the work under the terms of Section 6.
|
||||||
|
Any executables containing that work also fall under Section 6,
|
||||||
|
whether or not they are linked directly with the Library itself.
|
||||||
|
|
||||||
|
6. As an exception to the Sections above, you may also compile or
|
||||||
|
link a "work that uses the Library" with the Library to produce a
|
||||||
|
work containing portions of the Library, and distribute that work
|
||||||
|
under terms of your choice, provided that the terms permit
|
||||||
|
modification of the work for the customer's own use and reverse
|
||||||
|
engineering for debugging such modifications.
|
||||||
|
|
||||||
|
You must give prominent notice with each copy of the work that the
|
||||||
|
Library is used in it and that the Library and its use are covered by
|
||||||
|
this License. You must supply a copy of this License. If the work
|
||||||
|
during execution displays copyright notices, you must include the
|
||||||
|
copyright notice for the Library among them, as well as a reference
|
||||||
|
directing the user to the copy of this License. Also, you must do one
|
||||||
|
of these things:
|
||||||
|
|
||||||
|
a) Accompany the work with the complete corresponding
|
||||||
|
machine-readable source code for the Library including whatever
|
||||||
|
changes were used in the work (which must be distributed under
|
||||||
|
Sections 1 and 2 above); and, if the work is an executable linked
|
||||||
|
with the Library, with the complete machine-readable "work that
|
||||||
|
uses the Library", as object code and/or source code, so that the
|
||||||
|
user can modify the Library and then relink to produce a modified
|
||||||
|
executable containing the modified Library. (It is understood
|
||||||
|
that the user who changes the contents of definitions files in the
|
||||||
|
Library will not necessarily be able to recompile the application
|
||||||
|
to use the modified definitions.)
|
||||||
|
|
||||||
|
b) Accompany the work with a written offer, valid for at
|
||||||
|
least three years, to give the same user the materials
|
||||||
|
specified in Subsection 6a, above, for a charge no more
|
||||||
|
than the cost of performing this distribution.
|
||||||
|
|
||||||
|
c) If distribution of the work is made by offering access to copy
|
||||||
|
from a designated place, offer equivalent access to copy the above
|
||||||
|
specified materials from the same place.
|
||||||
|
|
||||||
|
d) Verify that the user has already received a copy of these
|
||||||
|
materials or that you have already sent this user a copy.
|
||||||
|
|
||||||
|
For an executable, the required form of the "work that uses the
|
||||||
|
Library" must include any data and utility programs needed for
|
||||||
|
reproducing the executable from it. However, as a special exception,
|
||||||
|
the source code distributed need not include anything that is normally
|
||||||
|
distributed (in either source or binary form) with the major
|
||||||
|
components (compiler, kernel, and so on) of the operating system on
|
||||||
|
which the executable runs, unless that component itself accompanies
|
||||||
|
the executable.
|
||||||
|
|
||||||
|
It may happen that this requirement contradicts the license
|
||||||
|
restrictions of other proprietary libraries that do not normally
|
||||||
|
accompany the operating system. Such a contradiction means you cannot
|
||||||
|
use both them and the Library together in an executable that you
|
||||||
|
distribute.
|
||||||
|
|
||||||
|
7. You may place library facilities that are a work based on the
|
||||||
|
Library side-by-side in a single library together with other library
|
||||||
|
facilities not covered by this License, and distribute such a combined
|
||||||
|
library, provided that the separate distribution of the work based on
|
||||||
|
the Library and of the other library facilities is otherwise
|
||||||
|
permitted, and provided that you do these two things:
|
||||||
|
|
||||||
|
a) Accompany the combined library with a copy of the same work
|
||||||
|
based on the Library, uncombined with any other library
|
||||||
|
facilities. This must be distributed under the terms of the
|
||||||
|
Sections above.
|
||||||
|
|
||||||
|
b) Give prominent notice with the combined library of the fact
|
||||||
|
that part of it is a work based on the Library, and explaining
|
||||||
|
where to find the accompanying uncombined form of the same work.
|
||||||
|
|
||||||
|
8. You may not copy, modify, sublicense, link with, or distribute
|
||||||
|
the Library except as expressly provided under this License. Any
|
||||||
|
attempt otherwise to copy, modify, sublicense, link with, or
|
||||||
|
distribute the Library is void, and will automatically terminate your
|
||||||
|
rights under this License. However, parties who have received copies,
|
||||||
|
or rights, from you under this License will not have their licenses
|
||||||
|
terminated so long as such parties remain in full compliance.
|
||||||
|
|
||||||
|
9. You are not required to accept this License, since you have not
|
||||||
|
signed it. However, nothing else grants you permission to modify or
|
||||||
|
distribute the Library or its derivative works. These actions are
|
||||||
|
prohibited by law if you do not accept this License. Therefore, by
|
||||||
|
modifying or distributing the Library (or any work based on the
|
||||||
|
Library), you indicate your acceptance of this License to do so, and
|
||||||
|
all its terms and conditions for copying, distributing or modifying
|
||||||
|
the Library or works based on it.
|
||||||
|
|
||||||
|
10. Each time you redistribute the Library (or any work based on the
|
||||||
|
Library), the recipient automatically receives a license from the
|
||||||
|
original licensor to copy, distribute, link with or modify the Library
|
||||||
|
subject to these terms and conditions. You may not impose any further
|
||||||
|
restrictions on the recipients' exercise of the rights granted herein.
|
||||||
|
You are not responsible for enforcing compliance by third parties to
|
||||||
|
this License.
|
||||||
|
|
||||||
|
11. If, as a consequence of a court judgment or allegation of patent
|
||||||
|
infringement or for any other reason (not limited to patent issues),
|
||||||
|
conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot
|
||||||
|
distribute so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you
|
||||||
|
may not distribute the Library at all. For example, if a patent
|
||||||
|
license would not permit royalty-free redistribution of the Library by
|
||||||
|
all those who receive copies directly or indirectly through you, then
|
||||||
|
the only way you could satisfy both it and this License would be to
|
||||||
|
refrain entirely from distribution of the Library.
|
||||||
|
|
||||||
|
If any portion of this section is held invalid or unenforceable under any
|
||||||
|
particular circumstance, the balance of the section is intended to apply,
|
||||||
|
and the section as a whole is intended to apply in other circumstances.
|
||||||
|
|
||||||
|
It is not the purpose of this section to induce you to infringe any
|
||||||
|
patents or other property right claims or to contest validity of any
|
||||||
|
such claims; this section has the sole purpose of protecting the
|
||||||
|
integrity of the free software distribution system which is
|
||||||
|
implemented by public license practices. Many people have made
|
||||||
|
generous contributions to the wide range of software distributed
|
||||||
|
through that system in reliance on consistent application of that
|
||||||
|
system; it is up to the author/donor to decide if he or she is willing
|
||||||
|
to distribute software through any other system and a licensee cannot
|
||||||
|
impose that choice.
|
||||||
|
|
||||||
|
This section is intended to make thoroughly clear what is believed to
|
||||||
|
be a consequence of the rest of this License.
|
||||||
|
|
||||||
|
12. If the distribution and/or use of the Library is restricted in
|
||||||
|
certain countries either by patents or by copyrighted interfaces, the
|
||||||
|
original copyright holder who places the Library under this License may add
|
||||||
|
an explicit geographical distribution limitation excluding those countries,
|
||||||
|
so that distribution is permitted only in or among countries not thus
|
||||||
|
excluded. In such case, this License incorporates the limitation as if
|
||||||
|
written in the body of this License.
|
||||||
|
|
||||||
|
13. The Free Software Foundation may publish revised and/or new
|
||||||
|
versions of the Library General Public License from time to time.
|
||||||
|
Such new versions will be similar in spirit to the present version,
|
||||||
|
but may differ in detail to address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the Library
|
||||||
|
specifies a version number of this License which applies to it and
|
||||||
|
"any later version", you have the option of following the terms and
|
||||||
|
conditions either of that version or of any later version published by
|
||||||
|
the Free Software Foundation. If the Library does not specify a
|
||||||
|
license version number, you may choose any version ever published by
|
||||||
|
the Free Software Foundation.
|
||||||
|
|
||||||
|
14. If you wish to incorporate parts of the Library into other free
|
||||||
|
programs whose distribution conditions are incompatible with these,
|
||||||
|
write to the author to ask for permission. For software which is
|
||||||
|
copyrighted by the Free Software Foundation, write to the Free
|
||||||
|
Software Foundation; we sometimes make exceptions for this. Our
|
||||||
|
decision will be guided by the two goals of preserving the free status
|
||||||
|
of all derivatives of our free software and of promoting the sharing
|
||||||
|
and reuse of software generally.
|
||||||
|
|
||||||
|
NO WARRANTY
|
||||||
|
|
||||||
|
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
||||||
|
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
||||||
|
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
||||||
|
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
|
||||||
|
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
|
||||||
|
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
||||||
|
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
|
||||||
|
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
|
||||||
|
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
|
||||||
|
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
|
||||||
|
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
|
||||||
|
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
|
||||||
|
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
|
||||||
|
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
|
||||||
|
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
||||||
|
DAMAGES.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
How to Apply These Terms to Your New Libraries
|
||||||
|
|
||||||
|
If you develop a new library, and you want it to be of the greatest
|
||||||
|
possible use to the public, we recommend making it free software that
|
||||||
|
everyone can redistribute and change. You can do so by permitting
|
||||||
|
redistribution under these terms (or, alternatively, under the terms of the
|
||||||
|
ordinary General Public License).
|
||||||
|
|
||||||
|
To apply these terms, attach the following notices to the library. It is
|
||||||
|
safest to attach them to the start of each source file to most effectively
|
||||||
|
convey the exclusion of warranty; and each file should have at least the
|
||||||
|
"copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
|
<one line to give the library's name and a brief idea of what it does.>
|
||||||
|
Copyright (C) <year> <name of author>
|
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This library 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
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this library; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA
|
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or your
|
||||||
|
school, if any, to sign a "copyright disclaimer" for the library, if
|
||||||
|
necessary. Here is a sample; alter the names:
|
||||||
|
|
||||||
|
Yoyodyne, Inc., hereby disclaims all copyright interest in the
|
||||||
|
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
|
||||||
|
|
||||||
|
<signature of Ty Coon>, 1 April 1990
|
||||||
|
Ty Coon, President of Vice
|
||||||
|
|
||||||
|
That's all there is to it!
|
17
thumbnailers/ps/CMakeLists.txt
Normal file
17
thumbnailers/ps/CMakeLists.txt
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
########### next target ###############
|
||||||
|
|
||||||
|
set(gsthumbnail_PART_SRCS gscreator.cpp dscparse.cpp dscparse_adapter.cpp)
|
||||||
|
|
||||||
|
|
||||||
|
kde4_add_plugin(gsthumbnail ${gsthumbnail_PART_SRCS})
|
||||||
|
|
||||||
|
|
||||||
|
target_link_libraries(gsthumbnail ${KDE4_KDECORE_LIBS} ${KDE4_KIO_LIBS} ${QT_QTGUI_LIBRARY} )
|
||||||
|
|
||||||
|
install(TARGETS gsthumbnail DESTINATION ${PLUGIN_INSTALL_DIR} )
|
||||||
|
|
||||||
|
|
||||||
|
########### install files ###############
|
||||||
|
|
||||||
|
install( FILES gsthumbnail.desktop DESTINATION ${SERVICES_INSTALL_DIR} )
|
||||||
|
|
2
thumbnailers/ps/Messages.sh
Normal file
2
thumbnailers/ps/Messages.sh
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
#! /bin/sh
|
||||||
|
$XGETTEXT *.cpp -o $podir/kfile_ps.pot
|
3429
thumbnailers/ps/dscparse.cpp
Normal file
3429
thumbnailers/ps/dscparse.cpp
Normal file
File diff suppressed because it is too large
Load diff
477
thumbnailers/ps/dscparse.h
Normal file
477
thumbnailers/ps/dscparse.h
Normal file
|
@ -0,0 +1,477 @@
|
||||||
|
/* Copyright (C) 2000-2001, Ghostgum Software Pty Ltd. All rights reserved.
|
||||||
|
|
||||||
|
This file is part of GSview.
|
||||||
|
|
||||||
|
This file is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY. No author or distributor accepts responsibility
|
||||||
|
to anyone for the consequences of using it or for whether it serves any
|
||||||
|
particular purpose or works at all, unless he says so in writing. Refer
|
||||||
|
to the GNU General Public License for full details.
|
||||||
|
|
||||||
|
Everyone is granted permission to copy, modify and redistribute this
|
||||||
|
file, but only under the conditions described in the GNU General
|
||||||
|
Public License. A copy of this license is supposed to have been given
|
||||||
|
to you along with this file so you can know your rights and
|
||||||
|
responsibilities. It should be in a file named COPYING. Among other
|
||||||
|
things, the copyright notice and this notice must be preserved on all
|
||||||
|
copies.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/* dscparse.h */
|
||||||
|
/* Interface for the DSC parser. */
|
||||||
|
|
||||||
|
#ifndef _DSCPARSE_H_
|
||||||
|
#define _DSCPARSE_H_
|
||||||
|
|
||||||
|
/* Some local types that may need modification */
|
||||||
|
typedef bool GSBOOL;
|
||||||
|
typedef unsigned long GSDWORD; /* must be at least 32 bits */
|
||||||
|
typedef unsigned int GSWORD; /* must be at least 16 bits */
|
||||||
|
|
||||||
|
#ifndef FALSE
|
||||||
|
# define FALSE ((GSBOOL)0)
|
||||||
|
# define TRUE ((GSBOOL)(!FALSE))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef dsc_private
|
||||||
|
# ifdef private
|
||||||
|
# define dsc_private private
|
||||||
|
# else
|
||||||
|
# define dsc_private static
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef min
|
||||||
|
# define min(a,b) ((a) < (b) ? (a) : (b))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* macros to allow conversion of function declarations to K&R */
|
||||||
|
#ifndef P0
|
||||||
|
#define P0() void
|
||||||
|
#define P1(t1) t1
|
||||||
|
#define P2(t1,t2) t1,t2
|
||||||
|
#define P3(t1,t2,t3) t1,t2,t3
|
||||||
|
#define P4(t1,t2,t3,t4) t1,t2,t3,t4
|
||||||
|
#define P5(t1,t2,t3,t4,t5) t1,t2,t3,t4,t5
|
||||||
|
#define P6(t1,t2,t3,t4,t5,t6) t1,t2,t3,t4,t5,t6
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* maximum legal length of lines in a DSC compliant file */
|
||||||
|
#define DSC_LINE_LENGTH 255
|
||||||
|
|
||||||
|
/* memory for strings is allocated in chunks of this length */
|
||||||
|
#define CDSC_STRING_CHUNK 4096
|
||||||
|
|
||||||
|
/* page array is allocated in chunks of this many pages */
|
||||||
|
#define CDSC_PAGE_CHUNK 128
|
||||||
|
|
||||||
|
/* buffer length for storing lines passed to dsc_scan_data() */
|
||||||
|
/* must be at least 2 * DSC_LINE_LENGTH */
|
||||||
|
/* We choose 8192 as twice the length passed to us by GSview */
|
||||||
|
#define CDSC_DATA_LENGTH 8192
|
||||||
|
|
||||||
|
/* Return codes from dsc_scan_data()
|
||||||
|
* < 0 = error
|
||||||
|
* >=0 = OK
|
||||||
|
*
|
||||||
|
* -1 = error, usually insufficient memory.
|
||||||
|
* 0-9 = normal
|
||||||
|
* 10-99 = internal codes, should not be seen.
|
||||||
|
* 100-999 = identifier of last DSC comment processed.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
CDSC_ERROR = -1, /* Fatal error, usually insufficient memory */
|
||||||
|
|
||||||
|
CDSC_OK = 0, /* OK, no DSC comment found */
|
||||||
|
CDSC_NOTDSC = 1, /* Not DSC, or DSC is being ignored */
|
||||||
|
|
||||||
|
/* Any section */
|
||||||
|
CDSC_UNKNOWNDSC = 100, /* DSC comment not recognised */
|
||||||
|
|
||||||
|
/* Header section */
|
||||||
|
CDSC_PSADOBE = 200, /* %!PS-Adobe- */
|
||||||
|
CDSC_BEGINCOMMENTS = 201, /* %%BeginComments */
|
||||||
|
CDSC_ENDCOMMENTS = 202, /* %%EndComments */
|
||||||
|
CDSC_PAGES = 203, /* %%Pages: */
|
||||||
|
CDSC_CREATOR = 204, /* %%Creator: */
|
||||||
|
CDSC_CREATIONDATE = 205, /* %%CreationDate: */
|
||||||
|
CDSC_TITLE = 206, /* %%Title: */
|
||||||
|
CDSC_FOR = 207, /* %%For: */
|
||||||
|
CDSC_LANGUAGELEVEL = 208, /* %%LanguageLevel: */
|
||||||
|
CDSC_BOUNDINGBOX = 209, /* %%BoundingBox: */
|
||||||
|
CDSC_ORIENTATION = 210, /* %%Orientation: */
|
||||||
|
CDSC_PAGEORDER = 211, /* %%PageOrder: */
|
||||||
|
CDSC_DOCUMENTMEDIA = 212, /* %%DocumentMedia: */
|
||||||
|
CDSC_DOCUMENTPAPERSIZES = 213, /* %%DocumentPaperSizes: */
|
||||||
|
CDSC_DOCUMENTPAPERFORMS = 214, /* %%DocumentPaperForms: */
|
||||||
|
CDSC_DOCUMENTPAPERCOLORS = 215, /* %%DocumentPaperColors: */
|
||||||
|
CDSC_DOCUMENTPAPERWEIGHTS = 216, /* %%DocumentPaperWeights: */
|
||||||
|
CDSC_DOCUMENTDATA = 217, /* %%DocumentData: */
|
||||||
|
CDSC_REQUIREMENTS = 218, /* IGNORED %%Requirements: */
|
||||||
|
CDSC_DOCUMENTNEEDEDFONTS = 219, /* IGNORED %%DocumentNeededFonts: */
|
||||||
|
CDSC_DOCUMENTSUPPLIEDFONTS = 220, /* IGNORED %%DocumentSuppliedFonts: */
|
||||||
|
CDSC_HIRESBOUNDINGBOX = 221, /* %%HiResBoundingBox: */
|
||||||
|
CDSC_CROPBOX = 222, /* %%CropBox: */
|
||||||
|
|
||||||
|
/* Preview section */
|
||||||
|
CDSC_BEGINPREVIEW = 301, /* %%BeginPreview */
|
||||||
|
CDSC_ENDPREVIEW = 302, /* %%EndPreview */
|
||||||
|
|
||||||
|
/* Defaults section */
|
||||||
|
CDSC_BEGINDEFAULTS = 401, /* %%BeginDefaults */
|
||||||
|
CDSC_ENDDEFAULTS = 402, /* %%EndDefaults */
|
||||||
|
/* also %%PageMedia, %%PageOrientation, %%PageBoundingBox */
|
||||||
|
|
||||||
|
/* Prolog section */
|
||||||
|
CDSC_BEGINPROLOG = 501, /* %%BeginProlog */
|
||||||
|
CDSC_ENDPROLOG = 502, /* %%EndProlog */
|
||||||
|
CDSC_BEGINFONT = 503, /* IGNORED %%BeginFont */
|
||||||
|
CDSC_ENDFONT = 504, /* IGNORED %%EndFont */
|
||||||
|
CDSC_BEGINFEATURE = 505, /* IGNORED %%BeginFeature */
|
||||||
|
CDSC_ENDFEATURE = 506, /* IGNORED %%EndFeature */
|
||||||
|
CDSC_BEGINRESOURCE = 507, /* IGNORED %%BeginResource */
|
||||||
|
CDSC_ENDRESOURCE = 508, /* IGNORED %%EndResource */
|
||||||
|
CDSC_BEGINPROCSET = 509, /* IGNORED %%BeginProcSet */
|
||||||
|
CDSC_ENDPROCSET = 510, /* IGNORED %%EndProcSet */
|
||||||
|
|
||||||
|
/* Setup section */
|
||||||
|
CDSC_BEGINSETUP = 601, /* %%BeginSetup */
|
||||||
|
CDSC_ENDSETUP = 602, /* %%EndSetup */
|
||||||
|
CDSC_FEATURE = 603, /* IGNORED %%Feature: */
|
||||||
|
CDSC_PAPERCOLOR = 604, /* IGNORED %%PaperColor: */
|
||||||
|
CDSC_PAPERFORM = 605, /* IGNORED %%PaperForm: */
|
||||||
|
CDSC_PAPERWEIGHT = 606, /* IGNORED %%PaperWeight: */
|
||||||
|
CDSC_PAPERSIZE = 607, /* %%PaperSize: */
|
||||||
|
/* also %%Begin/EndFeature, %%Begin/EndResource */
|
||||||
|
|
||||||
|
/* Page section */
|
||||||
|
CDSC_PAGE = 700, /* %%Page: */
|
||||||
|
CDSC_PAGETRAILER = 701, /* IGNORED %%PageTrailer */
|
||||||
|
CDSC_BEGINPAGESETUP = 702, /* IGNORED %%BeginPageSetup */
|
||||||
|
CDSC_ENDPAGESETUP = 703, /* IGNORED %%EndPageSetup */
|
||||||
|
CDSC_PAGEMEDIA = 704, /* %%PageMedia: */
|
||||||
|
/* also %%PaperColor, %%PaperForm, %%PaperWeight, %%PaperSize */
|
||||||
|
CDSC_PAGEORIENTATION = 705, /* %%PageOrientation: */
|
||||||
|
CDSC_PAGEBOUNDINGBOX = 706, /* %%PageBoundingBox: */
|
||||||
|
/* also %%Begin/EndFont, %%Begin/EndFeature */
|
||||||
|
/* also %%Begin/EndResource, %%Begin/EndProcSet */
|
||||||
|
CDSC_INCLUDEFONT = 707, /* IGNORED %%IncludeFont: */
|
||||||
|
CDSC_VIEWINGORIENTATION = 708, /* %%ViewingOrientation: */
|
||||||
|
|
||||||
|
/* Trailer section */
|
||||||
|
CDSC_TRAILER = 800, /* %%Trailer */
|
||||||
|
/* also %%Pages, %%BoundingBox, %%Orientation, %%PageOrder, %%DocumentMedia */
|
||||||
|
/* %%Page is recognised as an error */
|
||||||
|
/* also %%DocumentNeededFonts, %%DocumentSuppliedFonts */
|
||||||
|
|
||||||
|
/* End of File */
|
||||||
|
CDSC_EOF = 900 /* %%EOF */
|
||||||
|
} CDSC_RETURN_CODE;
|
||||||
|
|
||||||
|
|
||||||
|
/* stored in dsc->preview */
|
||||||
|
typedef enum {
|
||||||
|
CDSC_NOPREVIEW = 0,
|
||||||
|
CDSC_EPSI = 1,
|
||||||
|
CDSC_TIFF = 2,
|
||||||
|
CDSC_WMF = 3,
|
||||||
|
CDSC_PICT = 4
|
||||||
|
} CDSC_PREVIEW_TYPE;
|
||||||
|
|
||||||
|
/* stored in dsc->page_order */
|
||||||
|
typedef enum {
|
||||||
|
CDSC_ORDER_UNKNOWN = 0,
|
||||||
|
CDSC_ASCEND = 1,
|
||||||
|
CDSC_DESCEND = 2,
|
||||||
|
CDSC_SPECIAL = 3
|
||||||
|
} CDSC_PAGE_ORDER;
|
||||||
|
|
||||||
|
/* stored in dsc->page_orientation and dsc->page[pagenum-1].orientation */
|
||||||
|
typedef enum {
|
||||||
|
CDSC_ORIENT_UNKNOWN = 0,
|
||||||
|
CDSC_PORTRAIT = 1,
|
||||||
|
CDSC_LANDSCAPE = 2,
|
||||||
|
CDSC_UPSIDEDOWN = 3,
|
||||||
|
CDSC_SEASCAPE = 4
|
||||||
|
} CDSC_ORIENTATION_ENUM;
|
||||||
|
|
||||||
|
/* stored in dsc->document_data */
|
||||||
|
typedef enum {
|
||||||
|
CDSC_DATA_UNKNOWN = 0,
|
||||||
|
CDSC_CLEAN7BIT = 1,
|
||||||
|
CDSC_CLEAN8BIT = 2,
|
||||||
|
CDSC_BINARY = 3
|
||||||
|
} CDSC_DOCUMENT_DATA ;
|
||||||
|
|
||||||
|
typedef struct CDSCBBOX_S {
|
||||||
|
int llx;
|
||||||
|
int lly;
|
||||||
|
int urx;
|
||||||
|
int ury;
|
||||||
|
} CDSCBBOX;
|
||||||
|
|
||||||
|
typedef struct CDSCFBBOX_S {
|
||||||
|
float fllx;
|
||||||
|
float flly;
|
||||||
|
float furx;
|
||||||
|
float fury;
|
||||||
|
} CDSCFBBOX;
|
||||||
|
|
||||||
|
typedef struct CDSCMEDIA_S {
|
||||||
|
const char *name;
|
||||||
|
float width; /* PostScript points */
|
||||||
|
float height;
|
||||||
|
float weight; /* GSM */
|
||||||
|
const char *colour;
|
||||||
|
const char *type;
|
||||||
|
CDSCBBOX *mediabox; /* Used by GSview for PDF MediaBox */
|
||||||
|
} CDSCMEDIA;
|
||||||
|
|
||||||
|
#define CDSC_KNOWN_MEDIA 46
|
||||||
|
extern const CDSCMEDIA dsc_known_media[CDSC_KNOWN_MEDIA];
|
||||||
|
|
||||||
|
typedef struct CDSCCTM_S { /* used for %%ViewingOrientation */
|
||||||
|
float xx;
|
||||||
|
float xy;
|
||||||
|
float yx;
|
||||||
|
float yy;
|
||||||
|
/* float ty; */
|
||||||
|
/* float ty; */
|
||||||
|
} CDSCCTM;
|
||||||
|
|
||||||
|
typedef struct CDSCPAGE_S {
|
||||||
|
int ordinal;
|
||||||
|
const char *label;
|
||||||
|
unsigned long begin;
|
||||||
|
unsigned long end;
|
||||||
|
unsigned int orientation;
|
||||||
|
const CDSCMEDIA *media;
|
||||||
|
CDSCBBOX *bbox; /* PageBoundingBox, also used by GSview for PDF CropBox */
|
||||||
|
CDSCCTM *viewing_orientation;
|
||||||
|
} CDSCPAGE;
|
||||||
|
|
||||||
|
/* binary DOS EPS header */
|
||||||
|
typedef struct CDSCDOSEPS_S {
|
||||||
|
GSDWORD ps_begin;
|
||||||
|
GSDWORD ps_length;
|
||||||
|
GSDWORD wmf_begin;
|
||||||
|
GSDWORD wmf_length;
|
||||||
|
GSDWORD tiff_begin;
|
||||||
|
GSDWORD tiff_length;
|
||||||
|
GSWORD checksum;
|
||||||
|
} CDSCDOSEPS;
|
||||||
|
|
||||||
|
/* rather than allocated every string with malloc, we allocate
|
||||||
|
* chunks of 4k and place the (usually) short strings in these
|
||||||
|
* chunks.
|
||||||
|
*/
|
||||||
|
typedef struct CDSCSTRING_S CDSCSTRING;
|
||||||
|
struct CDSCSTRING_S {
|
||||||
|
unsigned int index;
|
||||||
|
unsigned int length;
|
||||||
|
char *data;
|
||||||
|
CDSCSTRING *next;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* DSC error reporting */
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
CDSC_MESSAGE_BBOX = 0,
|
||||||
|
CDSC_MESSAGE_EARLY_TRAILER = 1,
|
||||||
|
CDSC_MESSAGE_EARLY_EOF = 2,
|
||||||
|
CDSC_MESSAGE_PAGE_IN_TRAILER = 3,
|
||||||
|
CDSC_MESSAGE_PAGE_ORDINAL = 4,
|
||||||
|
CDSC_MESSAGE_PAGES_WRONG = 5,
|
||||||
|
CDSC_MESSAGE_EPS_NO_BBOX = 6,
|
||||||
|
CDSC_MESSAGE_EPS_PAGES = 7,
|
||||||
|
CDSC_MESSAGE_NO_MEDIA = 8,
|
||||||
|
CDSC_MESSAGE_ATEND = 9,
|
||||||
|
CDSC_MESSAGE_DUP_COMMENT = 10,
|
||||||
|
CDSC_MESSAGE_DUP_TRAILER = 11,
|
||||||
|
CDSC_MESSAGE_BEGIN_END = 12,
|
||||||
|
CDSC_MESSAGE_BAD_SECTION = 13,
|
||||||
|
CDSC_MESSAGE_LONG_LINE = 14,
|
||||||
|
CDSC_MESSAGE_INCORRECT_USAGE = 15
|
||||||
|
} CDSC_MESSAGE_ERROR;
|
||||||
|
|
||||||
|
/* severity */
|
||||||
|
typedef enum {
|
||||||
|
CDSC_ERROR_INFORM = 0, /* Not an error */
|
||||||
|
CDSC_ERROR_WARN = 1, /* Not a DSC error itself, */
|
||||||
|
CDSC_ERROR_ERROR = 2 /* DSC error */
|
||||||
|
} CDSC_MESSAGE_SEVERITY;
|
||||||
|
|
||||||
|
/* response */
|
||||||
|
typedef enum {
|
||||||
|
CDSC_RESPONSE_OK = 0,
|
||||||
|
CDSC_RESPONSE_CANCEL = 1,
|
||||||
|
CDSC_RESPONSE_IGNORE_ALL = 2
|
||||||
|
} CDSC_RESPONSE;
|
||||||
|
|
||||||
|
extern const char * const dsc_message[];
|
||||||
|
|
||||||
|
typedef struct CDSC_S CDSC;
|
||||||
|
struct CDSC_S {
|
||||||
|
/* public data */
|
||||||
|
GSBOOL dsc; /* TRUE if DSC comments found */
|
||||||
|
GSBOOL ctrld; /* TRUE if has CTRLD at start of stream */
|
||||||
|
GSBOOL pjl; /* TRUE if has HP PJL at start of stream */
|
||||||
|
GSBOOL epsf; /* TRUE if EPSF */
|
||||||
|
GSBOOL pdf; /* TRUE if Portable Document Format */
|
||||||
|
unsigned int preview; /* enum CDSC_PREVIEW_TYPE */
|
||||||
|
char *dsc_version; /* first line of file */
|
||||||
|
unsigned int language_level;
|
||||||
|
unsigned int document_data; /* Clean7Bit, Clean8Bit, Binary */
|
||||||
|
/* enum CDSC_DOCUMENT_DATA */
|
||||||
|
/* DSC sections */
|
||||||
|
unsigned long begincomments;
|
||||||
|
unsigned long endcomments;
|
||||||
|
unsigned long beginpreview;
|
||||||
|
unsigned long endpreview;
|
||||||
|
unsigned long begindefaults;
|
||||||
|
unsigned long enddefaults;
|
||||||
|
unsigned long beginprolog;
|
||||||
|
unsigned long endprolog;
|
||||||
|
unsigned long beginsetup;
|
||||||
|
unsigned long endsetup;
|
||||||
|
unsigned long begintrailer;
|
||||||
|
unsigned long endtrailer;
|
||||||
|
CDSCPAGE *page;
|
||||||
|
unsigned int page_count; /* number of %%Page: pages in document */
|
||||||
|
unsigned int page_pages; /* number of pages in document from %%Pages: */
|
||||||
|
unsigned int page_order; /* enum CDSC_PAGE_ORDER */
|
||||||
|
unsigned int page_orientation; /* the default page orientation */
|
||||||
|
/* enum CDSC_ORIENTATION */
|
||||||
|
CDSCCTM *viewing_orientation;
|
||||||
|
unsigned int media_count; /* number of media items */
|
||||||
|
CDSCMEDIA **media; /* the array of media */
|
||||||
|
const CDSCMEDIA *page_media;/* the default page media */
|
||||||
|
CDSCBBOX *bbox; /* the document bounding box */
|
||||||
|
CDSCBBOX *page_bbox; /* the default page bounding box */
|
||||||
|
CDSCDOSEPS *doseps; /* DOS binary header */
|
||||||
|
char *dsc_title;
|
||||||
|
char *dsc_creator;
|
||||||
|
char *dsc_date;
|
||||||
|
char *dsc_for;
|
||||||
|
|
||||||
|
unsigned int max_error; /* highest error number that will be reported */
|
||||||
|
const int *severity; /* array of severity values, one per error */
|
||||||
|
|
||||||
|
|
||||||
|
/* private data */
|
||||||
|
void *caller_data; /* pointer to be provided when calling */
|
||||||
|
/* error and debug callbacks */
|
||||||
|
int id; /* last DSC comment found */
|
||||||
|
int scan_section; /* section currently being scanned */
|
||||||
|
/* enum CDSC_SECTION */
|
||||||
|
|
||||||
|
unsigned long doseps_end; /* ps_begin+ps_length, otherwise 0 */
|
||||||
|
unsigned int page_chunk_length; /* number of pages allocated */
|
||||||
|
unsigned long file_length; /* length of document */
|
||||||
|
/* If provided we try to recognise %%Trailer and %%EOF */
|
||||||
|
/* incorrectly embedded inside document. */
|
||||||
|
/* Can be left set to default value of 0 */
|
||||||
|
int skip_document; /* recursion level of %%BeginDocument: */
|
||||||
|
int skip_bytes; /* #bytes to ignore from BeginData: */
|
||||||
|
/* or DOSEPS preview section */
|
||||||
|
int skip_lines; /* #lines to ignore from BeginData: */
|
||||||
|
GSBOOL skip_pjl; /* TRUE if skip PJL until first PS comment */
|
||||||
|
int begin_font_count; /* recursion level of %%BeginFont */
|
||||||
|
int begin_feature_count; /* recursion level of %%BeginFeature */
|
||||||
|
int begin_resource_count; /* recursion level of %%BeginResource */
|
||||||
|
int begin_procset_count; /* recursion level of %%BeginProcSet */
|
||||||
|
|
||||||
|
/* buffer for input */
|
||||||
|
char data[CDSC_DATA_LENGTH];/* start of buffer */
|
||||||
|
unsigned int data_length; /* length of data in buffer */
|
||||||
|
unsigned int data_index; /* offset to next char in buffer */
|
||||||
|
unsigned long data_offset; /* offset from start of document */
|
||||||
|
/* to byte in data[0] */
|
||||||
|
GSBOOL eof; /* TRUE if there is no more data */
|
||||||
|
|
||||||
|
/* information about DSC line */
|
||||||
|
char *line; /* pointer to last read DSC line */
|
||||||
|
/* not null terminated */
|
||||||
|
unsigned int line_length; /* number of characters in line */
|
||||||
|
GSBOOL eol; /* TRUE if dsc_line contains EOL */
|
||||||
|
GSBOOL last_cr; /* TRUE if last line ended in \r */
|
||||||
|
/* check next time for \n */
|
||||||
|
unsigned int line_count; /* line number */
|
||||||
|
GSBOOL long_line; /* TRUE if found a line longer than 255 characters */
|
||||||
|
char last_line[256]; /* previous DSC line, used for %%+ */
|
||||||
|
|
||||||
|
/* more efficient string storage (for short strings) than malloc */
|
||||||
|
CDSCSTRING *string_head; /* linked list head */
|
||||||
|
CDSCSTRING *string; /* current list item */
|
||||||
|
|
||||||
|
/* memory allocation routines */
|
||||||
|
void *(*memalloc)(P2(size_t size, void *closure_data));
|
||||||
|
void (*memfree)(P2(void *ptr, void *closure_data));
|
||||||
|
void *mem_closure_data;
|
||||||
|
|
||||||
|
/* function for printing debug messages */
|
||||||
|
void (*debug_print_fn)(P2(void *caller_data, const char *str));
|
||||||
|
|
||||||
|
/* function for reporting errors in DSC comments */
|
||||||
|
int (*dsc_error_fn)(P5(void *caller_data, CDSC *dsc,
|
||||||
|
unsigned int explanation, const char *line, unsigned int line_len));
|
||||||
|
|
||||||
|
/* public data */
|
||||||
|
/* Added 2001-10-01 */
|
||||||
|
CDSCFBBOX *hires_bbox; /* the hires document bounding box */
|
||||||
|
CDSCFBBOX *crop_box; /* the size of the trimmed page */
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* Public functions */
|
||||||
|
|
||||||
|
/* Create and initialise DSC parser */
|
||||||
|
CDSC *dsc_init(P1(void *caller_data));
|
||||||
|
|
||||||
|
CDSC *dsc_init_with_alloc(P4(
|
||||||
|
void *caller_data,
|
||||||
|
void *(*memalloc)(size_t size, void *closure_data),
|
||||||
|
void (*memfree)(void *ptr, void *closure_data),
|
||||||
|
void *closure_data));
|
||||||
|
|
||||||
|
/* Free the DSC parser */
|
||||||
|
void dsc_free(P1(CDSC *dsc));
|
||||||
|
|
||||||
|
/* Tell DSC parser how long document will be, to allow ignoring
|
||||||
|
* of early %%Trailer and %%EOF. This is optional.
|
||||||
|
*/
|
||||||
|
void dsc_set_length(P2(CDSC *dsc, unsigned long len));
|
||||||
|
|
||||||
|
/* Process a buffer containing DSC comments and PostScript */
|
||||||
|
int dsc_scan_data(P3(CDSC *dsc, const char *data, int len));
|
||||||
|
|
||||||
|
/* All data has been processed, fixup any DSC errors */
|
||||||
|
int dsc_fixup(P1(CDSC *dsc));
|
||||||
|
|
||||||
|
/* Install error query function */
|
||||||
|
void dsc_set_error_function(P2(CDSC *dsc,
|
||||||
|
int (*dsc_error_fn)(P5(void *caller_data, CDSC *dsc,
|
||||||
|
unsigned int explanation, const char *line, unsigned int line_len))));
|
||||||
|
|
||||||
|
/* Install print function for debug messages */
|
||||||
|
void dsc_set_debug_function(P2(CDSC *dsc,
|
||||||
|
void (*debug_fn)(P2(void *caller_data, const char *str))));
|
||||||
|
|
||||||
|
/* Print a message to debug output, if provided */
|
||||||
|
void dsc_debug_print(P2(CDSC *dsc, const char *str));
|
||||||
|
|
||||||
|
/* should be internal only functions, but made available to
|
||||||
|
* GSview for handling PDF
|
||||||
|
*/
|
||||||
|
int dsc_add_page(P3(CDSC *dsc, int ordinal, char *label));
|
||||||
|
int dsc_add_media(P2(CDSC *dsc, CDSCMEDIA *media));
|
||||||
|
int dsc_set_page_bbox(P6(CDSC *dsc, unsigned int page_number,
|
||||||
|
int llx, int lly, int urx, int ury));
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// vim:sw=4:sts=4:ts=8:noet
|
420
thumbnailers/ps/dscparse_adapter.cpp
Normal file
420
thumbnailers/ps/dscparse_adapter.cpp
Normal file
|
@ -0,0 +1,420 @@
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2001 the KGhostView authors. See file AUTHORS.
|
||||||
|
*
|
||||||
|
* 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 2 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, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "dscparse_adapter.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
/*-- KDSCBBOX implementation -----------------------------------------------*/
|
||||||
|
|
||||||
|
KDSCBBOX::KDSCBBOX() :
|
||||||
|
_llx( 0 ), _lly( 0 ),
|
||||||
|
_urx( 0 ), _ury( 0 )
|
||||||
|
{}
|
||||||
|
|
||||||
|
KDSCBBOX::KDSCBBOX( const KDSCBBOX& b ) :
|
||||||
|
_llx( b._llx ), _lly( b._lly ),
|
||||||
|
_urx( b._urx ), _ury( b._ury )
|
||||||
|
{}
|
||||||
|
|
||||||
|
KDSCBBOX::KDSCBBOX( int llx, int lly, int urx, int ury ) :
|
||||||
|
_llx( llx ), _lly( lly ),
|
||||||
|
_urx( urx ), _ury( ury )
|
||||||
|
{}
|
||||||
|
|
||||||
|
KDSCBBOX::KDSCBBOX( const CDSCBBOX& bbox ) :
|
||||||
|
_llx( bbox.llx ), _lly( bbox.lly ),
|
||||||
|
_urx( bbox.urx ), _ury( bbox.ury )
|
||||||
|
{}
|
||||||
|
|
||||||
|
KDSCBBOX& KDSCBBOX::operator = ( const KDSCBBOX& b )
|
||||||
|
{
|
||||||
|
_llx = b._llx; _lly = b._lly; _urx = b._urx; _ury = b._ury;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool KDSCBBOX::operator == ( const KDSCBBOX& b )
|
||||||
|
{
|
||||||
|
return ( _llx == b._llx && _lly == b._lly
|
||||||
|
&& _urx == b._urx && _ury == b._ury );
|
||||||
|
}
|
||||||
|
|
||||||
|
bool KDSCBBOX::operator != ( const KDSCBBOX& b )
|
||||||
|
{
|
||||||
|
return !( *this == b );
|
||||||
|
}
|
||||||
|
|
||||||
|
int KDSCBBOX::llx() const { return _llx; }
|
||||||
|
int KDSCBBOX::lly() const { return _lly; }
|
||||||
|
int KDSCBBOX::urx() const { return _urx; }
|
||||||
|
int KDSCBBOX::ury() const { return _ury; }
|
||||||
|
|
||||||
|
int KDSCBBOX::width() const { return _urx - _llx; }
|
||||||
|
int KDSCBBOX::height() const { return _ury - _lly; }
|
||||||
|
|
||||||
|
QSize KDSCBBOX::size() const { return QSize( width(), height() ); }
|
||||||
|
|
||||||
|
ostream& operator << ( ostream& os, const KDSCBBOX& source )
|
||||||
|
{
|
||||||
|
os << "{ llx: "<< source.llx() << ", lly: " << source.lly()
|
||||||
|
<< " urx: "<< source.urx() << ", ury: " << source.ury() << " }";
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*-- KDSCError implementation ----------------------------------------------*/
|
||||||
|
|
||||||
|
KDSCError::KDSCError( Type type, Severity severity, const QByteArray& line,
|
||||||
|
unsigned int lineNumber ) :
|
||||||
|
_type( type ),
|
||||||
|
_severity( severity ),
|
||||||
|
_line( line ),
|
||||||
|
_lineNumber( lineNumber )
|
||||||
|
{}
|
||||||
|
|
||||||
|
KDSCError::Type KDSCError::type() const
|
||||||
|
{
|
||||||
|
return _type;
|
||||||
|
}
|
||||||
|
|
||||||
|
KDSCError::Severity KDSCError::severity() const
|
||||||
|
{
|
||||||
|
return _severity;
|
||||||
|
}
|
||||||
|
|
||||||
|
QByteArray KDSCError::line() const
|
||||||
|
{
|
||||||
|
return _line;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int KDSCError::lineNumber() const
|
||||||
|
{
|
||||||
|
return _lineNumber;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*-- KDSCOkErrorHandler implementation -------------------------------------*/
|
||||||
|
|
||||||
|
KDSCErrorHandler::Response KDSCOkErrorHandler::error( const KDSCError& err )
|
||||||
|
{
|
||||||
|
cout << "KDSC: error in line " << err.lineNumber() << endl;
|
||||||
|
//cout << err.line() << endl;
|
||||||
|
return Ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*-- KDSC implementation ---------------------------------------------------*/
|
||||||
|
|
||||||
|
KDSC::KDSC() :
|
||||||
|
_errorHandler( 0 ),
|
||||||
|
_commentHandler( 0 )
|
||||||
|
{
|
||||||
|
_cdsc = dsc_init( this );
|
||||||
|
Q_ASSERT( _cdsc != 0 );
|
||||||
|
_scanHandler = new KDSCScanHandler( _cdsc );
|
||||||
|
}
|
||||||
|
|
||||||
|
KDSC::~KDSC()
|
||||||
|
{
|
||||||
|
dsc_free( _cdsc );
|
||||||
|
delete _scanHandler;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString KDSC::dsc_version() const
|
||||||
|
{
|
||||||
|
return QString( _cdsc->dsc_version );
|
||||||
|
}
|
||||||
|
|
||||||
|
bool KDSC::dsc() const
|
||||||
|
{
|
||||||
|
return ( _cdsc->dsc == TRUE );
|
||||||
|
}
|
||||||
|
|
||||||
|
bool KDSC::ctrld() const
|
||||||
|
{
|
||||||
|
return ( _cdsc->ctrld == TRUE );
|
||||||
|
}
|
||||||
|
|
||||||
|
bool KDSC::pjl() const
|
||||||
|
{
|
||||||
|
return ( _cdsc->pjl == TRUE );
|
||||||
|
}
|
||||||
|
|
||||||
|
bool KDSC::epsf() const
|
||||||
|
{
|
||||||
|
return ( _cdsc->epsf == TRUE );
|
||||||
|
}
|
||||||
|
|
||||||
|
bool KDSC::pdf() const
|
||||||
|
{
|
||||||
|
return ( _cdsc->pdf == TRUE );
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int KDSC::preview() const
|
||||||
|
{
|
||||||
|
return _cdsc->preview;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int KDSC::language_level() const
|
||||||
|
{
|
||||||
|
return _cdsc->language_level;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int KDSC::document_data() const
|
||||||
|
{
|
||||||
|
return _cdsc->document_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long KDSC::begincomments() const
|
||||||
|
{
|
||||||
|
return _cdsc->begincomments;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long KDSC::endcomments() const
|
||||||
|
{
|
||||||
|
return _cdsc->endcomments;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long KDSC::beginpreview() const
|
||||||
|
{
|
||||||
|
return _cdsc->beginpreview;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long KDSC::endpreview() const
|
||||||
|
{
|
||||||
|
return _cdsc->endpreview;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long KDSC::begindefaults() const
|
||||||
|
{
|
||||||
|
return _cdsc->begindefaults;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long KDSC::enddefaults() const
|
||||||
|
{
|
||||||
|
return _cdsc->enddefaults;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long KDSC::beginprolog() const
|
||||||
|
{
|
||||||
|
return _cdsc->beginprolog;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long KDSC::endprolog() const
|
||||||
|
{
|
||||||
|
return _cdsc->endprolog;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long KDSC::beginsetup() const
|
||||||
|
{
|
||||||
|
return _cdsc->beginsetup;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long KDSC::endsetup() const
|
||||||
|
{
|
||||||
|
return _cdsc->endsetup;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long KDSC::begintrailer() const
|
||||||
|
{
|
||||||
|
return _cdsc->begintrailer;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long KDSC::endtrailer() const
|
||||||
|
{
|
||||||
|
return _cdsc->endtrailer;
|
||||||
|
}
|
||||||
|
|
||||||
|
CDSCPAGE* KDSC::page() const
|
||||||
|
{
|
||||||
|
return _cdsc->page;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int KDSC::page_count() const
|
||||||
|
{
|
||||||
|
return _cdsc->page_count;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int KDSC::page_pages() const
|
||||||
|
{
|
||||||
|
return _cdsc->page_pages;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int KDSC::page_order() const
|
||||||
|
{
|
||||||
|
return _cdsc->page_order;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int KDSC::page_orientation() const
|
||||||
|
{
|
||||||
|
return _cdsc->page_orientation;
|
||||||
|
}
|
||||||
|
|
||||||
|
CDSCCTM* KDSC::viewing_orientation() const
|
||||||
|
{
|
||||||
|
return _cdsc->viewing_orientation;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int KDSC::media_count() const
|
||||||
|
{
|
||||||
|
return _cdsc->media_count;
|
||||||
|
}
|
||||||
|
|
||||||
|
CDSCMEDIA** KDSC::media() const
|
||||||
|
{
|
||||||
|
return _cdsc->media;
|
||||||
|
}
|
||||||
|
|
||||||
|
const CDSCMEDIA* KDSC::page_media() const
|
||||||
|
{
|
||||||
|
return _cdsc->page_media;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto_ptr<KDSCBBOX> KDSC::bbox() const
|
||||||
|
{
|
||||||
|
if( _cdsc->bbox == 0 )
|
||||||
|
return auto_ptr<KDSCBBOX>( 0 );
|
||||||
|
else
|
||||||
|
return auto_ptr<KDSCBBOX>( new KDSCBBOX( *_cdsc->bbox ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
auto_ptr<KDSCBBOX> KDSC::page_bbox() const
|
||||||
|
{
|
||||||
|
if( _cdsc->page_bbox == 0 )
|
||||||
|
return auto_ptr<KDSCBBOX>( 0 );
|
||||||
|
else
|
||||||
|
return auto_ptr<KDSCBBOX>( new KDSCBBOX( *_cdsc->page_bbox ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
QString KDSC::dsc_title() const
|
||||||
|
{
|
||||||
|
return QString( _cdsc->dsc_title );
|
||||||
|
}
|
||||||
|
|
||||||
|
QString KDSC::dsc_creator() const
|
||||||
|
{
|
||||||
|
return QString( _cdsc->dsc_creator );
|
||||||
|
}
|
||||||
|
|
||||||
|
QString KDSC::dsc_date() const
|
||||||
|
{
|
||||||
|
return QString( _cdsc->dsc_date );
|
||||||
|
}
|
||||||
|
|
||||||
|
QString KDSC::dsc_for() const
|
||||||
|
{
|
||||||
|
return QString( _cdsc->dsc_for );
|
||||||
|
}
|
||||||
|
|
||||||
|
bool KDSC::scanData( char* buffer, unsigned int count )
|
||||||
|
{
|
||||||
|
return _scanHandler->scanData( buffer, count );
|
||||||
|
}
|
||||||
|
|
||||||
|
int KDSC::fixup()
|
||||||
|
{
|
||||||
|
return dsc_fixup( _cdsc );
|
||||||
|
}
|
||||||
|
|
||||||
|
KDSCErrorHandler* KDSC::errorHandler() const
|
||||||
|
{
|
||||||
|
return _errorHandler;
|
||||||
|
}
|
||||||
|
|
||||||
|
void KDSC::setErrorHandler( KDSCErrorHandler* errorHandler )
|
||||||
|
{
|
||||||
|
_errorHandler = errorHandler;
|
||||||
|
if( errorHandler == 0 )
|
||||||
|
dsc_set_error_function( _cdsc, 0 );
|
||||||
|
else
|
||||||
|
dsc_set_error_function( _cdsc, &errorFunction );
|
||||||
|
}
|
||||||
|
|
||||||
|
KDSCCommentHandler* KDSC::commentHandler() const
|
||||||
|
{
|
||||||
|
return _commentHandler;
|
||||||
|
}
|
||||||
|
|
||||||
|
void KDSC::setCommentHandler( KDSCCommentHandler* commentHandler )
|
||||||
|
{
|
||||||
|
if( _commentHandler != 0 && commentHandler == 0 )
|
||||||
|
{
|
||||||
|
delete _scanHandler;
|
||||||
|
_scanHandler = new KDSCScanHandler( _cdsc );
|
||||||
|
}
|
||||||
|
else if( _commentHandler == 0 && commentHandler != 0 )
|
||||||
|
{
|
||||||
|
delete _scanHandler;
|
||||||
|
_scanHandler = new KDSCScanHandlerByLine( _cdsc, commentHandler );
|
||||||
|
}
|
||||||
|
_commentHandler = commentHandler;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool KDSC::isStructured() const
|
||||||
|
{
|
||||||
|
return epsf() ? ( page_count() > 1 ) : ( page_count() > 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
CDSC* KDSC::cdsc() const
|
||||||
|
{
|
||||||
|
return _cdsc;
|
||||||
|
}
|
||||||
|
|
||||||
|
int KDSC::errorFunction( void* caller_data, CDSC* dsc,
|
||||||
|
unsigned int explanation, const char* line, unsigned int line_len )
|
||||||
|
{
|
||||||
|
KDSCError error(
|
||||||
|
static_cast< KDSCError::Type >( explanation ),
|
||||||
|
static_cast< KDSCError::Severity >( dsc->severity[explanation] ),
|
||||||
|
QByteArray( line, line_len + 1 ),
|
||||||
|
dsc->line_count
|
||||||
|
);
|
||||||
|
|
||||||
|
KDSC* kdsc = static_cast< KDSC* >( caller_data );
|
||||||
|
Q_ASSERT( kdsc );
|
||||||
|
|
||||||
|
return kdsc->errorHandler()->error( error );
|
||||||
|
}
|
||||||
|
|
||||||
|
bool KDSCScanHandlerByLine::scanData( char* buf, unsigned int count )
|
||||||
|
{
|
||||||
|
char* lineStart = buf;
|
||||||
|
char* it = buf;
|
||||||
|
while( it < buf + count )
|
||||||
|
{
|
||||||
|
if( *it++ == '\n' )
|
||||||
|
{
|
||||||
|
int retval = dsc_scan_data( _cdsc, lineStart, it - lineStart );
|
||||||
|
if( retval < 0 )
|
||||||
|
return false;
|
||||||
|
else if( retval > 0 )
|
||||||
|
{
|
||||||
|
_commentHandler->comment(
|
||||||
|
static_cast<KDSCCommentHandler::Name>( retval ) );
|
||||||
|
}
|
||||||
|
lineStart = it;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( it != lineStart )
|
||||||
|
{
|
||||||
|
// Scan the remaining part of the string.
|
||||||
|
return ( dsc_scan_data( _cdsc, lineStart, it - lineStart ) < 0 );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// vim:sw=4:sts=4:ts=8:noet
|
391
thumbnailers/ps/dscparse_adapter.h
Normal file
391
thumbnailers/ps/dscparse_adapter.h
Normal file
|
@ -0,0 +1,391 @@
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2001 the KGhostView authors. See file AUTHORS.
|
||||||
|
*
|
||||||
|
* 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 2 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, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef DSCPARSE_ADAPTER_H
|
||||||
|
#define DSCPARSE_ADAPTER_H
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <map>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
#include <qsize.h>
|
||||||
|
#include <qstring.h>
|
||||||
|
|
||||||
|
#include "dscparse.h"
|
||||||
|
|
||||||
|
#ifndef KDE_USE_FINAL
|
||||||
|
#undef min
|
||||||
|
#undef max
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__GNUC__)
|
||||||
|
#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 93)
|
||||||
|
/*
|
||||||
|
* We add a quick 'n' dirty inline implementation of auto_ptr for older
|
||||||
|
* releases of GCC, which don't include an auto_ptr implementation in
|
||||||
|
* <memory>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
template <class T> class auto_ptr {
|
||||||
|
private:
|
||||||
|
T* _ptr;
|
||||||
|
|
||||||
|
public:
|
||||||
|
typedef T element_type;
|
||||||
|
explicit auto_ptr(T* p = 0) : _ptr(p) {}
|
||||||
|
auto_ptr(auto_ptr& a) : _ptr(a.release()) {}
|
||||||
|
template <class T1> auto_ptr(auto_ptr<T1>& a) : _ptr(a.release()) {}
|
||||||
|
auto_ptr& operator=(auto_ptr& a) {
|
||||||
|
if (&a != this) {
|
||||||
|
delete _ptr;
|
||||||
|
_ptr = a.release();
|
||||||
|
}
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
template <class T1>
|
||||||
|
auto_ptr& operator=(auto_ptr<T1>& a) {
|
||||||
|
if (a.get() != this->get()) {
|
||||||
|
delete _ptr;
|
||||||
|
_ptr = a.release();
|
||||||
|
}
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
~auto_ptr() { delete _ptr; }
|
||||||
|
|
||||||
|
T& operator*() const { return *_ptr; }
|
||||||
|
T* operator->() const { return _ptr; }
|
||||||
|
T* get() const { return _ptr; }
|
||||||
|
T* release() { T* tmp = _ptr; _ptr = 0; return tmp; }
|
||||||
|
void reset(T* p = 0) { delete _ptr; _ptr = p; }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
class KDSCBBOX
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
KDSCBBOX();
|
||||||
|
KDSCBBOX( const KDSCBBOX& b );
|
||||||
|
KDSCBBOX( int llx, int lly, int urx, int ury );
|
||||||
|
KDSCBBOX( const CDSCBBOX& bbox );
|
||||||
|
|
||||||
|
KDSCBBOX& operator = ( const KDSCBBOX& b );
|
||||||
|
|
||||||
|
bool operator == ( const KDSCBBOX& b );
|
||||||
|
bool operator != ( const KDSCBBOX& b );
|
||||||
|
|
||||||
|
int llx() const;
|
||||||
|
int lly() const;
|
||||||
|
int urx() const;
|
||||||
|
int ury() const;
|
||||||
|
|
||||||
|
int width() const;
|
||||||
|
int height() const;
|
||||||
|
|
||||||
|
QSize size() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
int _llx, _lly, _urx, _ury;
|
||||||
|
};
|
||||||
|
|
||||||
|
std::ostream& operator << ( std::ostream&, const KDSCBBOX& );
|
||||||
|
|
||||||
|
|
||||||
|
class KDSCError
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
enum Type
|
||||||
|
{
|
||||||
|
BBox = CDSC_MESSAGE_BBOX,
|
||||||
|
EarlyTrailer = CDSC_MESSAGE_EARLY_TRAILER,
|
||||||
|
EarlyEOF = CDSC_MESSAGE_EARLY_EOF,
|
||||||
|
PageInTrailer = CDSC_MESSAGE_PAGE_IN_TRAILER,
|
||||||
|
PageOrdinal = CDSC_MESSAGE_PAGE_ORDINAL,
|
||||||
|
PagesWrong = CDSC_MESSAGE_PAGES_WRONG,
|
||||||
|
EPSNoBBox = CDSC_MESSAGE_EPS_NO_BBOX,
|
||||||
|
EPSPages = CDSC_MESSAGE_EPS_PAGES,
|
||||||
|
NoMedia = CDSC_MESSAGE_NO_MEDIA,
|
||||||
|
AtEnd = CDSC_MESSAGE_ATEND,
|
||||||
|
DuplicateComment = CDSC_MESSAGE_DUP_COMMENT,
|
||||||
|
DuplicateTrailer = CDSC_MESSAGE_DUP_TRAILER,
|
||||||
|
BeginEnd = CDSC_MESSAGE_BEGIN_END,
|
||||||
|
BadSection = CDSC_MESSAGE_BAD_SECTION,
|
||||||
|
LongLine = CDSC_MESSAGE_LONG_LINE,
|
||||||
|
IncorrectUsage = CDSC_MESSAGE_INCORRECT_USAGE
|
||||||
|
};
|
||||||
|
|
||||||
|
enum Severity
|
||||||
|
{
|
||||||
|
Information = CDSC_ERROR_INFORM,
|
||||||
|
Warning = CDSC_ERROR_WARN,
|
||||||
|
Error = CDSC_ERROR_ERROR
|
||||||
|
};
|
||||||
|
|
||||||
|
KDSCError( Type, Severity, const QByteArray& line,
|
||||||
|
unsigned int lineNumber );
|
||||||
|
|
||||||
|
Type type() const;
|
||||||
|
Severity severity() const;
|
||||||
|
QByteArray line() const;
|
||||||
|
unsigned int lineNumber() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
Type _type;
|
||||||
|
Severity _severity;
|
||||||
|
QByteArray _line;
|
||||||
|
unsigned int _lineNumber;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class KDSCErrorHandler
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual ~KDSCErrorHandler() {}
|
||||||
|
enum Response
|
||||||
|
{
|
||||||
|
Ok = CDSC_RESPONSE_OK,
|
||||||
|
Cancel = CDSC_RESPONSE_CANCEL,
|
||||||
|
IgnoreAll = CDSC_RESPONSE_IGNORE_ALL
|
||||||
|
};
|
||||||
|
|
||||||
|
virtual Response error( const KDSCError& ) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
class KDSCOkErrorHandler : public KDSCErrorHandler
|
||||||
|
{
|
||||||
|
Response error( const KDSCError& );
|
||||||
|
};
|
||||||
|
|
||||||
|
class KDSCCommentHandler
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual ~KDSCCommentHandler() {}
|
||||||
|
enum Name
|
||||||
|
{
|
||||||
|
// Header section
|
||||||
|
PSAdobe = CDSC_PSADOBE,
|
||||||
|
BeginComments = CDSC_BEGINCOMMENTS,
|
||||||
|
EndComments = CDSC_ENDCOMMENTS,
|
||||||
|
Pages = CDSC_PAGES,
|
||||||
|
Creator = CDSC_CREATOR,
|
||||||
|
CreationDate = CDSC_CREATIONDATE,
|
||||||
|
Title = CDSC_TITLE,
|
||||||
|
For = CDSC_FOR,
|
||||||
|
LanguageLevel = CDSC_LANGUAGELEVEL,
|
||||||
|
BoundingBox = CDSC_BOUNDINGBOX,
|
||||||
|
Orientation = CDSC_ORIENTATION,
|
||||||
|
PageOrder = CDSC_PAGEORDER,
|
||||||
|
DocumentMedia = CDSC_DOCUMENTMEDIA,
|
||||||
|
DocumentPaperSizes = CDSC_DOCUMENTPAPERSIZES,
|
||||||
|
DocumentPaperForms = CDSC_DOCUMENTPAPERFORMS,
|
||||||
|
DocumentPaperColors = CDSC_DOCUMENTPAPERCOLORS,
|
||||||
|
DocumentPaperWeights = CDSC_DOCUMENTPAPERWEIGHTS,
|
||||||
|
DocumentData = CDSC_DOCUMENTDATA,
|
||||||
|
Requirements = CDSC_REQUIREMENTS,
|
||||||
|
DocumentNeededFonts = CDSC_DOCUMENTNEEDEDFONTS,
|
||||||
|
DocumentSuppliedFonts = CDSC_DOCUMENTSUPPLIEDFONTS,
|
||||||
|
HiResBoundingBox = CDSC_HIRESBOUNDINGBOX,
|
||||||
|
CropBox = CDSC_CROPBOX,
|
||||||
|
|
||||||
|
// Preview section
|
||||||
|
BeginPreview = CDSC_BEGINPREVIEW,
|
||||||
|
EndPreview = CDSC_ENDPREVIEW,
|
||||||
|
|
||||||
|
// Defaults section
|
||||||
|
BeginDefaults = CDSC_BEGINDEFAULTS,
|
||||||
|
EndDefaults = CDSC_ENDDEFAULTS,
|
||||||
|
// also %%PageMedia, %%PageOrientation, %%PageBoundingBox
|
||||||
|
|
||||||
|
// Prolog section
|
||||||
|
BeginProlog = CDSC_BEGINPROLOG,
|
||||||
|
EndProlog = CDSC_ENDPROLOG,
|
||||||
|
BeginFont = CDSC_BEGINFONT,
|
||||||
|
EndFont = CDSC_ENDFONT,
|
||||||
|
BeginFeature = CDSC_BEGINFEATURE,
|
||||||
|
EndFeature = CDSC_ENDFEATURE,
|
||||||
|
BeginResource = CDSC_BEGINRESOURCE,
|
||||||
|
EndResource = CDSC_ENDRESOURCE,
|
||||||
|
BeginProcset = CDSC_BEGINPROCSET,
|
||||||
|
EndProcset = CDSC_ENDPROCSET,
|
||||||
|
|
||||||
|
// Setup section
|
||||||
|
BeginSetup = CDSC_BEGINSETUP,
|
||||||
|
EndSetup = CDSC_ENDSETUP,
|
||||||
|
Feature = CDSC_FEATURE,
|
||||||
|
PaperColor = CDSC_PAPERCOLOR,
|
||||||
|
PaperForm = CDSC_PAPERFORM,
|
||||||
|
PaperWeight = CDSC_PAPERWEIGHT,
|
||||||
|
PaperSize = CDSC_PAPERSIZE,
|
||||||
|
// also %%Begin/EndFeature, %%Begin/EndResource
|
||||||
|
|
||||||
|
// Page section
|
||||||
|
Page = CDSC_PAGE,
|
||||||
|
PageTrailer = CDSC_PAGETRAILER,
|
||||||
|
BeginPageSetup = CDSC_BEGINPAGESETUP,
|
||||||
|
EndPageSetup = CDSC_ENDPAGESETUP,
|
||||||
|
PageMedia = CDSC_PAGEMEDIA,
|
||||||
|
// also %%PaperColor, %%PaperForm, %%PaperWeight, %%PaperSize
|
||||||
|
PageOrientation = CDSC_PAGEORIENTATION,
|
||||||
|
PageBoundingBox = CDSC_PAGEBOUNDINGBOX,
|
||||||
|
// also %%Begin/EndFont, %%Begin/EndFeature
|
||||||
|
// also %%Begin/EndResource, %%Begin/EndProcSet
|
||||||
|
IncludeFont = CDSC_INCLUDEFONT,
|
||||||
|
ViewingOrientation = CDSC_VIEWINGORIENTATION,
|
||||||
|
|
||||||
|
// Trailer section
|
||||||
|
Trailer = CDSC_TRAILER,
|
||||||
|
// also %%Pages, %%BoundingBox, %%Orientation, %%PageOrder,
|
||||||
|
// %%DocumentMedia
|
||||||
|
// %%Page is recognised as an error
|
||||||
|
// also %%DocumentNeededFonts, %%DocumentSuppliedFonts
|
||||||
|
|
||||||
|
// End of File */
|
||||||
|
Eof = CDSC_EOF
|
||||||
|
};
|
||||||
|
|
||||||
|
virtual void comment( Name name ) { std::cout << name << std::endl; }
|
||||||
|
};
|
||||||
|
|
||||||
|
class KDSCScanHandler;
|
||||||
|
class KDSC
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
KDSC();
|
||||||
|
~KDSC();
|
||||||
|
|
||||||
|
/*--- Adapter for CDSC ------------------------------------------------*/
|
||||||
|
QString dsc_version() const;
|
||||||
|
|
||||||
|
bool dsc() const;
|
||||||
|
bool ctrld() const;
|
||||||
|
bool pjl() const;
|
||||||
|
bool epsf() const;
|
||||||
|
bool pdf() const;
|
||||||
|
|
||||||
|
unsigned int preview() const;
|
||||||
|
unsigned int language_level() const;
|
||||||
|
unsigned int document_data() const;
|
||||||
|
|
||||||
|
unsigned long begincomments() const;
|
||||||
|
unsigned long endcomments() const;
|
||||||
|
unsigned long beginpreview() const;
|
||||||
|
unsigned long endpreview() const;
|
||||||
|
unsigned long begindefaults() const;
|
||||||
|
unsigned long enddefaults() const;
|
||||||
|
unsigned long beginprolog() const;
|
||||||
|
unsigned long endprolog() const;
|
||||||
|
unsigned long beginsetup() const;
|
||||||
|
unsigned long endsetup() const;
|
||||||
|
unsigned long begintrailer() const;
|
||||||
|
unsigned long endtrailer() const;
|
||||||
|
|
||||||
|
CDSCPAGE* page() const;
|
||||||
|
|
||||||
|
unsigned int page_count() const;
|
||||||
|
unsigned int page_pages() const;
|
||||||
|
unsigned int page_order() const;
|
||||||
|
unsigned int page_orientation() const;
|
||||||
|
|
||||||
|
CDSCCTM* viewing_orientation() const;
|
||||||
|
|
||||||
|
unsigned int media_count() const;
|
||||||
|
CDSCMEDIA** media() const;
|
||||||
|
const CDSCMEDIA* page_media() const;
|
||||||
|
|
||||||
|
#if defined(__GNUC__) && (__GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 93))
|
||||||
|
auto_ptr<KDSCBBOX> bbox() const;
|
||||||
|
auto_ptr<KDSCBBOX> page_bbox() const;
|
||||||
|
#else
|
||||||
|
std::auto_ptr<KDSCBBOX> bbox() const;
|
||||||
|
std::auto_ptr<KDSCBBOX> page_bbox() const;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// CDSCDOSEPS *doseps;
|
||||||
|
|
||||||
|
QString dsc_title() const;
|
||||||
|
QString dsc_creator() const;
|
||||||
|
QString dsc_date() const;
|
||||||
|
QString dsc_for() const;
|
||||||
|
|
||||||
|
// unsigned int max_error
|
||||||
|
|
||||||
|
bool scanData( char*, unsigned int );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tidy up from incorrect DSC comments.
|
||||||
|
*/
|
||||||
|
int fixup();
|
||||||
|
|
||||||
|
KDSCErrorHandler* errorHandler() const;
|
||||||
|
void setErrorHandler( KDSCErrorHandler* );
|
||||||
|
|
||||||
|
KDSCCommentHandler* commentHandler() const;
|
||||||
|
void setCommentHandler( KDSCCommentHandler* );
|
||||||
|
|
||||||
|
/*--- Extra methods for convenience -----------------------------------*/
|
||||||
|
bool isStructured() const;
|
||||||
|
|
||||||
|
/*--- Temporary -------------------------------------------------------*/
|
||||||
|
CDSC* cdsc() const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static int errorFunction( void* caller_data, CDSC* dsc,
|
||||||
|
unsigned int explanation,
|
||||||
|
const char* line, unsigned int line_len );
|
||||||
|
|
||||||
|
private:
|
||||||
|
CDSC* _cdsc;
|
||||||
|
KDSCErrorHandler* _errorHandler;
|
||||||
|
KDSCCommentHandler* _commentHandler;
|
||||||
|
KDSCScanHandler* _scanHandler;
|
||||||
|
};
|
||||||
|
|
||||||
|
class KDSCScanHandler
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual ~KDSCScanHandler() {}
|
||||||
|
KDSCScanHandler( CDSC* cdsc ) : _cdsc( cdsc ) {}
|
||||||
|
|
||||||
|
virtual bool scanData( char* buf, unsigned int count )
|
||||||
|
{
|
||||||
|
return ( dsc_scan_data( _cdsc, buf, count ) >= 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
CDSC* _cdsc;
|
||||||
|
};
|
||||||
|
|
||||||
|
class KDSCScanHandlerByLine : public KDSCScanHandler
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
KDSCScanHandlerByLine( CDSC* cdsc, KDSCCommentHandler* commentHandler ) :
|
||||||
|
KDSCScanHandler( cdsc ),
|
||||||
|
_commentHandler( commentHandler )
|
||||||
|
{}
|
||||||
|
|
||||||
|
virtual bool scanData( char* buf, unsigned int count );
|
||||||
|
|
||||||
|
protected:
|
||||||
|
KDSCCommentHandler* _commentHandler;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// vim:sw=4:sts=4:ts=8:noet
|
624
thumbnailers/ps/gscreator.cpp
Normal file
624
thumbnailers/ps/gscreator.cpp
Normal file
|
@ -0,0 +1,624 @@
|
||||||
|
/* This file is part of the KDE libraries
|
||||||
|
Copyright (C) 2001 Malte Starostik <malte@kde.org>
|
||||||
|
|
||||||
|
Handling of EPS previews Copyright (C) 2003 Philipp Hullmann <phull@gmx.de>
|
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This library 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
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public License
|
||||||
|
along with this library; see the file COPYING.LIB. If not, write to
|
||||||
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||||
|
Boston, MA 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* This function gets a path of a DVI, EPS, PS or PDF file and
|
||||||
|
produces a PNG-Thumbnail which is stored as a QImage
|
||||||
|
|
||||||
|
The program works as follows
|
||||||
|
|
||||||
|
1. Test if file is a DVI file
|
||||||
|
|
||||||
|
2. Create a child process (1), in which the
|
||||||
|
file is to be changed into a PNG
|
||||||
|
|
||||||
|
3. Child-process (1) :
|
||||||
|
|
||||||
|
4. If file is DVI continue with 6
|
||||||
|
|
||||||
|
5. If file is no DVI continue with 9
|
||||||
|
|
||||||
|
6. Create another child process (2), in which the DVI is
|
||||||
|
turned into PS using dvips
|
||||||
|
|
||||||
|
7. Parent process (2) :
|
||||||
|
Turn the recently created PS file into a PNG file using gs
|
||||||
|
|
||||||
|
8. continue with 10
|
||||||
|
|
||||||
|
9. Turn the PS,PDF or EPS file into a PNG file using gs
|
||||||
|
|
||||||
|
10. Parent process (1)
|
||||||
|
store data in a QImage
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <signal.h>
|
||||||
|
#ifdef HAVE_SYS_SELECT_H
|
||||||
|
#include <sys/select.h>
|
||||||
|
#endif
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <sys/wait.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <kdemacros.h>
|
||||||
|
|
||||||
|
#include <qcolor.h>
|
||||||
|
#include <qfile.h>
|
||||||
|
#include <qimage.h>
|
||||||
|
#include <qregexp.h>
|
||||||
|
#include <QVector>
|
||||||
|
|
||||||
|
|
||||||
|
#include "gscreator.h"
|
||||||
|
#include "dscparse_adapter.h"
|
||||||
|
#include "dscparse.h"
|
||||||
|
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
KDE_EXPORT ThumbCreator *new_creator()
|
||||||
|
{
|
||||||
|
return new GSCreator;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// This PS snippet will be prepended to the actual file so that only
|
||||||
|
// the first page is output.
|
||||||
|
static const char *psprolog =
|
||||||
|
"%!PS-Adobe-3.0\n"
|
||||||
|
"/.showpage.orig /showpage load def\n"
|
||||||
|
"/.showpage.firstonly {\n"
|
||||||
|
" .showpage.orig\n"
|
||||||
|
" quit\n"
|
||||||
|
"} def\n"
|
||||||
|
"/showpage { .showpage.firstonly } def\n";
|
||||||
|
|
||||||
|
// This is the code recommended by Adobe tech note 5002 for including
|
||||||
|
// EPS files.
|
||||||
|
static const char *epsprolog =
|
||||||
|
"%!PS-Adobe-3.0\n"
|
||||||
|
"userdict begin /pagelevel save def /showpage { } def\n"
|
||||||
|
"0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit\n"
|
||||||
|
"[ ] 0 setdash newpath false setoverprint false setstrokeadjust\n";
|
||||||
|
|
||||||
|
static const char * gsargs_ps[] = {
|
||||||
|
"gs",
|
||||||
|
"-sDEVICE=png16m",
|
||||||
|
"-sOutputFile=-",
|
||||||
|
"-dSAFER",
|
||||||
|
"-dPARANOIDSAFER",
|
||||||
|
"-dNOPAUSE",
|
||||||
|
"-dFirstPage=1",
|
||||||
|
"-dLastPage=1",
|
||||||
|
"-q",
|
||||||
|
"-",
|
||||||
|
0, // file name
|
||||||
|
"-c",
|
||||||
|
"showpage",
|
||||||
|
"-c",
|
||||||
|
"quit",
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char * gsargs_eps[] = {
|
||||||
|
"gs",
|
||||||
|
"-sDEVICE=png16m",
|
||||||
|
"-sOutputFile=-",
|
||||||
|
"-dSAFER",
|
||||||
|
"-dPARANOIDSAFER",
|
||||||
|
"-dNOPAUSE",
|
||||||
|
0, // page size
|
||||||
|
0, // resolution
|
||||||
|
"-q",
|
||||||
|
"-",
|
||||||
|
0, // file name
|
||||||
|
"-c",
|
||||||
|
"pagelevel",
|
||||||
|
"-c",
|
||||||
|
"restore",
|
||||||
|
"-c",
|
||||||
|
"end",
|
||||||
|
"-c",
|
||||||
|
"showpage",
|
||||||
|
"-c",
|
||||||
|
"quit",
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char *dvipsargs[] = {
|
||||||
|
"dvips",
|
||||||
|
"-n",
|
||||||
|
"1",
|
||||||
|
"-q",
|
||||||
|
"-o",
|
||||||
|
"-",
|
||||||
|
0, // file name
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
|
static bool correctDVI(const QString& filename);
|
||||||
|
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
bool got_sig_term = false;
|
||||||
|
void handle_sigterm( int ) {
|
||||||
|
got_sig_term = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool GSCreator::create(const QString &path, int width, int height, QImage &img)
|
||||||
|
{
|
||||||
|
// The code in the loop (when testing whether got_sig_term got set)
|
||||||
|
// should read some variation of:
|
||||||
|
// parentJob()->wasKilled()
|
||||||
|
//
|
||||||
|
// Unfortunatelly, that's currently impossible without breaking BIC.
|
||||||
|
// So we need to catch the signal ourselves.
|
||||||
|
// Otherwise, on certain funny PS files (for example
|
||||||
|
// http://www.tjhsst.edu/~Eedanaher/pslife/life.ps )
|
||||||
|
// gs would run forever after we were dead.
|
||||||
|
// #### Reconsider for KDE 4 ###
|
||||||
|
// (24/12/03 - luis_pedro)
|
||||||
|
//
|
||||||
|
typedef void ( *sighandler_t )( int );
|
||||||
|
// according to linux's "man signal" the above typedef is a gnu extension
|
||||||
|
sighandler_t oldhandler = signal( SIGTERM, handle_sigterm );
|
||||||
|
|
||||||
|
int input[2];
|
||||||
|
int output[2];
|
||||||
|
int dvipipe[2];
|
||||||
|
|
||||||
|
QByteArray data(1024, '\0');
|
||||||
|
|
||||||
|
bool ok = false;
|
||||||
|
|
||||||
|
// Test if file is DVI
|
||||||
|
bool no_dvi =!correctDVI(path);
|
||||||
|
|
||||||
|
if (pipe(input) == -1) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (pipe(output) == -1) {
|
||||||
|
close(input[0]);
|
||||||
|
close(input[1]);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
KDSC dsc;
|
||||||
|
endComments = false;
|
||||||
|
dsc.setCommentHandler(this);
|
||||||
|
|
||||||
|
if (no_dvi)
|
||||||
|
{
|
||||||
|
FILE* fp = fopen(QFile::encodeName(path), "r");
|
||||||
|
if (fp == 0) return false;
|
||||||
|
|
||||||
|
char buf[4096];
|
||||||
|
int count;
|
||||||
|
while ((count = fread(buf, sizeof(char), 4096, fp)) != 0
|
||||||
|
&& !endComments) {
|
||||||
|
dsc.scanData(buf, count);
|
||||||
|
}
|
||||||
|
fclose(fp);
|
||||||
|
|
||||||
|
if (dsc.pjl() || dsc.ctrld()) {
|
||||||
|
// this file is a mess.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const bool is_encapsulated = no_dvi &&
|
||||||
|
(path.indexOf(QRegExp("\\.epsi?$", Qt::CaseInsensitive)) > 0) &&
|
||||||
|
(dsc.bbox()->width() > 0) && (dsc.bbox()->height() > 0) &&
|
||||||
|
(dsc.page_count() <= 1);
|
||||||
|
|
||||||
|
char translation[64] = "";
|
||||||
|
char pagesize[32] = "";
|
||||||
|
char resopt[32] = "";
|
||||||
|
std::auto_ptr<KDSCBBOX> bbox = dsc.bbox();
|
||||||
|
if (is_encapsulated) {
|
||||||
|
// GhostScript's rendering at the extremely low resolutions
|
||||||
|
// required for thumbnails leaves something to be desired. To
|
||||||
|
// get nicer images, we render to four times the required
|
||||||
|
// resolution and let QImage scale the result.
|
||||||
|
const int hres = (width * 72) / bbox->width();
|
||||||
|
const int vres = (height * 72) / bbox->height();
|
||||||
|
const int resolution = (hres > vres ? vres : hres) * 4;
|
||||||
|
const int gswidth = ((bbox->urx() - bbox->llx()) * resolution) / 72;
|
||||||
|
const int gsheight = ((bbox->ury() - bbox->lly()) * resolution) / 72;
|
||||||
|
|
||||||
|
snprintf(pagesize, 31, "-g%ix%i", gswidth, gsheight);
|
||||||
|
snprintf(resopt, 31, "-r%i", resolution);
|
||||||
|
snprintf(translation, 63,
|
||||||
|
" 0 %i sub 0 %i sub translate\n", bbox->llx(),
|
||||||
|
bbox->lly());
|
||||||
|
}
|
||||||
|
|
||||||
|
const CDSC_PREVIEW_TYPE previewType =
|
||||||
|
static_cast<CDSC_PREVIEW_TYPE>(dsc.preview());
|
||||||
|
|
||||||
|
switch (previewType) {
|
||||||
|
case CDSC_TIFF:
|
||||||
|
case CDSC_WMF:
|
||||||
|
case CDSC_PICT:
|
||||||
|
// FIXME: these should take precedence, since they can hold
|
||||||
|
// color previews, which EPSI can't (or can it?).
|
||||||
|
break;
|
||||||
|
case CDSC_EPSI:
|
||||||
|
{
|
||||||
|
const int xscale = bbox->width() / width;
|
||||||
|
const int yscale = bbox->height() / height;
|
||||||
|
const int scale = xscale < yscale ? xscale : yscale;
|
||||||
|
if (getEPSIPreview(path,
|
||||||
|
dsc.beginpreview(),
|
||||||
|
dsc.endpreview(),
|
||||||
|
img,
|
||||||
|
bbox->width() / scale,
|
||||||
|
bbox->height() / scale))
|
||||||
|
return true;
|
||||||
|
// If the preview extraction routine fails, gs is used to
|
||||||
|
// create a thumbnail.
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case CDSC_NOPREVIEW:
|
||||||
|
default:
|
||||||
|
// need to run ghostscript in these cases
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
pid_t pid = fork();
|
||||||
|
if (pid == 0) {
|
||||||
|
// Child process (1)
|
||||||
|
|
||||||
|
// close(STDERR_FILENO);
|
||||||
|
|
||||||
|
// find first zero entry in gsargs and put the filename
|
||||||
|
// or - (stdin) there, if DVI
|
||||||
|
const char **gsargs = gsargs_ps;
|
||||||
|
const char **arg = gsargs;
|
||||||
|
|
||||||
|
if (no_dvi && is_encapsulated) {
|
||||||
|
gsargs = gsargs_eps;
|
||||||
|
arg = gsargs;
|
||||||
|
|
||||||
|
// find first zero entry and put page size there
|
||||||
|
while (*arg) ++arg;
|
||||||
|
*arg = pagesize;
|
||||||
|
|
||||||
|
// find second zero entry and put resolution there
|
||||||
|
while (*arg) ++arg;
|
||||||
|
*arg = resopt;
|
||||||
|
}
|
||||||
|
|
||||||
|
// find next zero entry and put the filename there
|
||||||
|
QByteArray fname = QFile::encodeName( path );
|
||||||
|
while (*arg)
|
||||||
|
++arg;
|
||||||
|
if( no_dvi )
|
||||||
|
*arg = fname.data();
|
||||||
|
else
|
||||||
|
*arg = "-";
|
||||||
|
|
||||||
|
// find first zero entry in dvipsargs and put the filename there
|
||||||
|
arg = dvipsargs;
|
||||||
|
while (*arg)
|
||||||
|
++arg;
|
||||||
|
*arg = fname.data();
|
||||||
|
|
||||||
|
if( !no_dvi ){
|
||||||
|
pipe(dvipipe);
|
||||||
|
pid_t pid_two = fork();
|
||||||
|
if( pid_two == 0 ){
|
||||||
|
// Child process (2), reopen stdout on the pipe "dvipipe" and exec dvips
|
||||||
|
|
||||||
|
close(input[0]);
|
||||||
|
close(input[1]);
|
||||||
|
close(output[0]);
|
||||||
|
close(output[1]);
|
||||||
|
close(dvipipe[0]);
|
||||||
|
|
||||||
|
dup2( dvipipe[1], STDOUT_FILENO);
|
||||||
|
|
||||||
|
execvp(dvipsargs[0], const_cast<char *const *>(dvipsargs));
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
else if(pid_two != -1){
|
||||||
|
close(input[1]);
|
||||||
|
close(output[0]);
|
||||||
|
close(dvipipe[1]);
|
||||||
|
|
||||||
|
dup2( dvipipe[0], STDIN_FILENO);
|
||||||
|
dup2( output[1], STDOUT_FILENO);
|
||||||
|
|
||||||
|
execvp(gsargs[0], const_cast<char *const *>(gsargs));
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
// fork() (2) failed, close these
|
||||||
|
close(dvipipe[0]);
|
||||||
|
close(dvipipe[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else if( no_dvi ){
|
||||||
|
// Reopen stdin/stdout on the pipes and exec gs
|
||||||
|
close(input[1]);
|
||||||
|
close(output[0]);
|
||||||
|
|
||||||
|
dup2(input[0], STDIN_FILENO);
|
||||||
|
dup2(output[1], STDOUT_FILENO);
|
||||||
|
|
||||||
|
execvp(gsargs[0], const_cast<char *const *>(gsargs));
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (pid != -1) {
|
||||||
|
// Parent process, write first-page-only-hack (the hack is not
|
||||||
|
// used if DVI) and read the png output
|
||||||
|
close(input[0]);
|
||||||
|
close(output[1]);
|
||||||
|
const char *prolog;
|
||||||
|
if (is_encapsulated)
|
||||||
|
prolog = epsprolog;
|
||||||
|
else
|
||||||
|
prolog = psprolog;
|
||||||
|
int count = write(input[1], prolog, strlen(prolog));
|
||||||
|
if (is_encapsulated)
|
||||||
|
write(input[1], translation, strlen(translation));
|
||||||
|
|
||||||
|
close(input[1]);
|
||||||
|
if (count == static_cast<int>(strlen(prolog))) {
|
||||||
|
int offset = 0;
|
||||||
|
while (!ok) {
|
||||||
|
fd_set fds;
|
||||||
|
FD_ZERO(&fds);
|
||||||
|
FD_SET(output[0], &fds);
|
||||||
|
struct timeval tv;
|
||||||
|
tv.tv_sec = 20;
|
||||||
|
tv.tv_usec = 0;
|
||||||
|
|
||||||
|
got_sig_term = false;
|
||||||
|
if (select(output[0] + 1, &fds, 0, 0, &tv) <= 0) {
|
||||||
|
if ( ( errno == EINTR || errno == EAGAIN ) && !got_sig_term ) continue;
|
||||||
|
break; // error, timeout or master wants us to quit (SIGTERM)
|
||||||
|
}
|
||||||
|
if (FD_ISSET(output[0], &fds)) {
|
||||||
|
count = read(output[0], data.data() + offset, 1024);
|
||||||
|
if (count == -1)
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
if (count) // prepare for next block
|
||||||
|
{
|
||||||
|
offset += count;
|
||||||
|
data.resize(offset + 1024);
|
||||||
|
}
|
||||||
|
else // got all data
|
||||||
|
{
|
||||||
|
data.resize(offset);
|
||||||
|
ok = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!ok) // error or timeout, gs probably didn't exit yet
|
||||||
|
{
|
||||||
|
kill(pid, SIGTERM);
|
||||||
|
}
|
||||||
|
|
||||||
|
int status = 0;
|
||||||
|
int ret;
|
||||||
|
do {
|
||||||
|
ret = waitpid(pid, &status, 0);
|
||||||
|
} while (ret == -1 && errno == EINTR);
|
||||||
|
if (ret != pid || (status != 0 && status != 256) )
|
||||||
|
ok = false;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// fork() (1) failed, close these
|
||||||
|
close(input[0]);
|
||||||
|
close(input[1]);
|
||||||
|
close(output[1]);
|
||||||
|
}
|
||||||
|
close(output[0]);
|
||||||
|
|
||||||
|
int l = img.loadFromData( data );
|
||||||
|
|
||||||
|
if ( got_sig_term &&
|
||||||
|
oldhandler != SIG_ERR &&
|
||||||
|
oldhandler != SIG_DFL &&
|
||||||
|
oldhandler != SIG_IGN ) {
|
||||||
|
oldhandler( SIGTERM ); // propagate the signal. Other things might rely on it
|
||||||
|
}
|
||||||
|
if ( oldhandler != SIG_ERR ) signal( SIGTERM, oldhandler );
|
||||||
|
|
||||||
|
return ok && l;
|
||||||
|
}
|
||||||
|
|
||||||
|
ThumbCreator::Flags GSCreator::flags() const
|
||||||
|
{
|
||||||
|
return static_cast<Flags>(DrawFrame);
|
||||||
|
}
|
||||||
|
|
||||||
|
void GSCreator::comment(Name name)
|
||||||
|
{
|
||||||
|
switch (name) {
|
||||||
|
case EndPreview:
|
||||||
|
case BeginProlog:
|
||||||
|
case Page:
|
||||||
|
endComments = true;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Quick function to check if the filename corresponds to a valid DVI
|
||||||
|
// file. Returns true if <filename> is a DVI file, false otherwise.
|
||||||
|
|
||||||
|
static bool correctDVI(const QString& filename)
|
||||||
|
{
|
||||||
|
QFile f(filename);
|
||||||
|
if (!f.open(QIODevice::ReadOnly))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
unsigned char test[4];
|
||||||
|
if ( f.read( (char *)test,2)<2 || test[0] != 247 || test[1] != 2 )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
int n = f.size();
|
||||||
|
if ( n < 134 ) // Too short for a dvi file
|
||||||
|
return false;
|
||||||
|
f.seek( n-4 );
|
||||||
|
|
||||||
|
unsigned char trailer[4] = { 0xdf,0xdf,0xdf,0xdf };
|
||||||
|
|
||||||
|
if ( f.read( (char *)test, 4 )<4 || strncmp( (char *)test, (char*) trailer, 4 ) )
|
||||||
|
return false;
|
||||||
|
// We suppose now that the dvi file is complete and OK
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool GSCreator::getEPSIPreview(const QString &path, long start, long
|
||||||
|
end, QImage &outimg, int imgwidth, int imgheight)
|
||||||
|
{
|
||||||
|
FILE *fp;
|
||||||
|
fp = fopen(QFile::encodeName(path), "r");
|
||||||
|
if (fp == 0) return false;
|
||||||
|
|
||||||
|
const long previewsize = end - start + 1;
|
||||||
|
|
||||||
|
char *buf = (char *) malloc(previewsize);
|
||||||
|
fseek(fp, start, SEEK_SET);
|
||||||
|
int count = fread(buf, sizeof(char), previewsize - 1, fp);
|
||||||
|
fclose(fp);
|
||||||
|
buf[previewsize - 1] = 0;
|
||||||
|
if (count != previewsize - 1)
|
||||||
|
{
|
||||||
|
free(buf);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString previewstr = QString::fromLatin1(buf);
|
||||||
|
free(buf);
|
||||||
|
|
||||||
|
int offset = 0;
|
||||||
|
while ((offset < previewsize) && !(previewstr[offset].isDigit())) offset++;
|
||||||
|
int digits = 0;
|
||||||
|
while ((offset + digits < previewsize) && previewstr[offset + digits].isDigit()) digits++;
|
||||||
|
int width = previewstr.mid(offset, digits).toInt();
|
||||||
|
offset += digits + 1;
|
||||||
|
while ((offset < previewsize) && !(previewstr[offset].isDigit())) offset++;
|
||||||
|
digits = 0;
|
||||||
|
while ((offset + digits < previewsize) && previewstr[offset + digits].isDigit()) digits++;
|
||||||
|
int height = previewstr.mid(offset, digits).toInt();
|
||||||
|
offset += digits + 1;
|
||||||
|
while ((offset < previewsize) && !(previewstr[offset].isDigit())) offset++;
|
||||||
|
digits = 0;
|
||||||
|
while ((offset + digits < previewsize) && previewstr[offset + digits].isDigit()) digits++;
|
||||||
|
int depth = previewstr.mid(offset, digits).toInt();
|
||||||
|
|
||||||
|
// skip over the rest of the BeginPreview comment
|
||||||
|
while ((offset < previewsize) &&
|
||||||
|
previewstr[offset] != '\n' &&
|
||||||
|
previewstr[offset] != '\r') offset++;
|
||||||
|
while ((offset < previewsize) && previewstr[offset] != '%') offset++;
|
||||||
|
|
||||||
|
unsigned int imagedepth;
|
||||||
|
switch (depth) {
|
||||||
|
case 1:
|
||||||
|
case 2:
|
||||||
|
case 4:
|
||||||
|
case 8:
|
||||||
|
imagedepth = 8;
|
||||||
|
break;
|
||||||
|
case 12: // valid, but not (yet) supported
|
||||||
|
default: // illegal value
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int colors = (1U << depth);
|
||||||
|
QImage img(width, height, QImage::Format_Indexed8);
|
||||||
|
img.setColorCount(colors);
|
||||||
|
|
||||||
|
if (imagedepth <= 8) {
|
||||||
|
for (unsigned int gray = 0; gray < colors; gray++) {
|
||||||
|
unsigned int grayvalue = (255U * (colors - 1 - gray)) /
|
||||||
|
(colors - 1);
|
||||||
|
img.setColor(gray, qRgb(grayvalue, grayvalue, grayvalue));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const unsigned int bits_per_scan_line = width * depth;
|
||||||
|
unsigned int bytes_per_scan_line = bits_per_scan_line / 8;
|
||||||
|
if (bits_per_scan_line % 8) bytes_per_scan_line++;
|
||||||
|
const unsigned int bindatabytes = height * bytes_per_scan_line;
|
||||||
|
QVector<unsigned char> bindata(bindatabytes);
|
||||||
|
|
||||||
|
for (unsigned int i = 0; i < bindatabytes; i++) {
|
||||||
|
if (offset >= previewsize)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
while (!isxdigit(previewstr[offset].toLatin1()) &&
|
||||||
|
offset < previewsize)
|
||||||
|
offset++;
|
||||||
|
|
||||||
|
bool ok = false;
|
||||||
|
bindata[i] = static_cast<unsigned char>(previewstr.mid(offset, 2).toUInt(&ok, 16));
|
||||||
|
if (!ok)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
offset += 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int scanline = 0; scanline < height; scanline++) {
|
||||||
|
unsigned char *scanlineptr = img.scanLine(scanline);
|
||||||
|
|
||||||
|
for (int pixelindex = 0; pixelindex < width; pixelindex++) {
|
||||||
|
unsigned char pixelvalue = 0;
|
||||||
|
const unsigned int bitoffset =
|
||||||
|
scanline * bytes_per_scan_line * 8U + pixelindex * depth;
|
||||||
|
for (int depthindex = 0; depthindex < depth;
|
||||||
|
depthindex++) {
|
||||||
|
const unsigned int byteindex = (bitoffset + depthindex) / 8U;
|
||||||
|
const unsigned int bitindex =
|
||||||
|
7 - ((bitoffset + depthindex) % 8U);
|
||||||
|
const unsigned char bitvalue =
|
||||||
|
(bindata[byteindex] & static_cast<unsigned char>(1U << bitindex)) >> bitindex;
|
||||||
|
pixelvalue |= (bitvalue << depthindex);
|
||||||
|
}
|
||||||
|
scanlineptr[pixelindex] = pixelvalue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
outimg = img.convertToFormat(QImage::Format_RGB32).scaled(imgwidth, imgheight, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
42
thumbnailers/ps/gscreator.h
Normal file
42
thumbnailers/ps/gscreator.h
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
/* This file is part of the KDE libraries
|
||||||
|
Copyright (C) 2000 Malte Starostik <malte@kde.org>
|
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This library 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
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public License
|
||||||
|
along with this library; see the file COPYING.LIB. If not, write to
|
||||||
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||||
|
Boston, MA 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _GSCREATOR_H_
|
||||||
|
#define _GSCREATOR_H_
|
||||||
|
|
||||||
|
#include <kio/thumbcreator.h>
|
||||||
|
#include "dscparse_adapter.h"
|
||||||
|
|
||||||
|
class GSCreator : public ThumbCreator, public KDSCCommentHandler
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
GSCreator() {}
|
||||||
|
virtual bool create(const QString &path, int, int, QImage &img);
|
||||||
|
virtual Flags flags() const;
|
||||||
|
void comment(Name name);
|
||||||
|
|
||||||
|
private:
|
||||||
|
static bool getEPSIPreview(const QString &path,
|
||||||
|
long start, long end,
|
||||||
|
QImage &outimg,
|
||||||
|
int imgwidth, int imgheight);
|
||||||
|
bool endComments;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
79
thumbnailers/ps/gsthumbnail.desktop
Normal file
79
thumbnailers/ps/gsthumbnail.desktop
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Service
|
||||||
|
Name=PostScript, PDF and DVI Files
|
||||||
|
Name[ar]=ملفات PostScript, PDF و DVI
|
||||||
|
Name[ast]=Ficheros PostScript, PDF y DVI
|
||||||
|
Name[bg]=Файлове PostScript, PDF и DVI
|
||||||
|
Name[br]=Restroù PostScript, PDF ha DVI
|
||||||
|
Name[bs]=Postskript, PDF i DVI datoteke
|
||||||
|
Name[ca]=Fitxers PostScript, PDF i DVI
|
||||||
|
Name[ca@valencia]=Fitxers PostScript, PDF i DVI
|
||||||
|
Name[cs]=Postscriptové, PDF a DVI soubory
|
||||||
|
Name[cy]=Ffeiliau PostScript, PDF a DVI
|
||||||
|
Name[da]=PostScript, PDF- og DVI-filer
|
||||||
|
Name[de]=PostScript-, PDF- und DVI-Dateien
|
||||||
|
Name[el]=Αρχεία PostScript, PDF και DVI
|
||||||
|
Name[en_GB]=PostScript, PDF and DVI Files
|
||||||
|
Name[eo]=Postskriptaj, PDF kaj DVI dosieroj
|
||||||
|
Name[es]=Archivos PostScript, PDF y DVI
|
||||||
|
Name[et]=PostScript-, PDF- ja DVI-failid
|
||||||
|
Name[eu]=PostScript, PDF eta DVI fitxategiak
|
||||||
|
Name[fa]=پروندههای PostScript، PDF و DVI
|
||||||
|
Name[fi]=PostScript-, PDF- ja DVI-tiedostot
|
||||||
|
Name[fr]=Fichiers « PostScript », « PDF » et « DVI »
|
||||||
|
Name[ga]=Comhaid PostScript, PDF agus DVI
|
||||||
|
Name[gl]=Ficheiros PostScript, PDF e DVI
|
||||||
|
Name[he]=קבצי PostScript, PDF ו־DVI
|
||||||
|
Name[hi]=पोस्ट-स्क्रिप्ट, पीडीएफ तथा डीवीआई फ़ाइलें
|
||||||
|
Name[hne]=पोस्ट-स्क्रिप्ट, पीडीएफ अउ डीवीआई फाइल मन ल
|
||||||
|
Name[hr]=Datoteke oblika PostScript, PDF i DVI
|
||||||
|
Name[hu]=PostScript-, PDF- és DVI-fájlok
|
||||||
|
Name[ia]=Files PostScript, PDF e DVI
|
||||||
|
Name[is]=PostScript, PDF og DVI skrár
|
||||||
|
Name[it]=File PostScript, PDF e DVI
|
||||||
|
Name[ja]=PostScript, PDF, DVI ファイル
|
||||||
|
Name[kk]=PostScript, PDF және DVI файлдары
|
||||||
|
Name[km]=ឯកសារ PostScript, PDF និង DVI
|
||||||
|
Name[ko]=포스트크스립트, PDF, DVI 파일
|
||||||
|
Name[ku]=Pelên PostScript, PDF û DVI
|
||||||
|
Name[lt]=Postscript, PDF ir DVI failai
|
||||||
|
Name[lv]=Postscript, PDF un DVI faili
|
||||||
|
Name[mr]=पोस्टस्क्रिप्ट, PDF व DVI फाईल्स
|
||||||
|
Name[ms]=PostScript, PDF dan Fail DVI
|
||||||
|
Name[nb]=PostScript, PDF og DVI filer
|
||||||
|
Name[nds]=PostScript-, PDF- un DVI-Dateien
|
||||||
|
Name[ne]=पोष्टस्क्रिप्ट, पीडीएफ र डीभीआई फाइल
|
||||||
|
Name[nl]=PostScript-, DVI- en PDF-bestanden
|
||||||
|
Name[nn]=PostScript-, PDF- og DVI-filer
|
||||||
|
Name[pa]=ਪੋਸਟ-ਸਕ੍ਰਿਪਟ, PDF ਅਤੇ DVI ਫਾਇਲਾਂ
|
||||||
|
Name[pl]=Pliki PostScript, PDF i DVI
|
||||||
|
Name[pt]=Ficheiros PostScript, PDF e DVI
|
||||||
|
Name[pt_BR]=Arquivos PostScript, PDF e DVI
|
||||||
|
Name[ro]=Fișiere PostScript, PDF și DVI
|
||||||
|
Name[ru]=Файлы PostScript, PDF и DVI
|
||||||
|
Name[se]=PostScript-, PDF- ja DVI-fiillat
|
||||||
|
Name[si]=PostScript, PDF සහ DVI ගොනු
|
||||||
|
Name[sk]=PostScript, PDF a DVI súbory
|
||||||
|
Name[sl]=Datoteke PostScript, PDF in DVI
|
||||||
|
Name[sr]=Постскрипт, ПДФ и ДВИ фајлови
|
||||||
|
Name[sr@ijekavian]=Постскрипт, ПДФ и ДВИ фајлови
|
||||||
|
Name[sr@ijekavianlatin]=PostScript, PDF i DVI fajlovi
|
||||||
|
Name[sr@latin]=PostScript, PDF i DVI fajlovi
|
||||||
|
Name[sv]=Postscript-, PDF- och DVI-filer
|
||||||
|
Name[ta]= போஸ்ட்கிரிப்ட், பிடிஃப் மற்றும் டிவிஐ கோப்புகள்
|
||||||
|
Name[tg]=Файлҳои PostScript, PDF ва DVI
|
||||||
|
Name[th]=แฟ้ม PDF, DVI และ โพสต์สคริปต์
|
||||||
|
Name[tr]=PostScript, PDF ve DVI Dosyaları
|
||||||
|
Name[ug]=PostScript، PDF ۋە DVI ھۆججەتلىرى
|
||||||
|
Name[uk]=Файли PostScript, PDF та DVI
|
||||||
|
Name[uz]=PostScript, PDF va DVI fayllari
|
||||||
|
Name[uz@cyrillic]=PostScript, PDF ва DVI файллари
|
||||||
|
Name[vi]=Các tập tin PostScript, PDF và DVI
|
||||||
|
Name[x-test]=xxPostScript, PDF and DVI Filesxx
|
||||||
|
Name[zh_CN]=PostScript、PDF 和 DVI 文件
|
||||||
|
Name[zh_HK]=PostScript 、PDF 及 DVI 檔案
|
||||||
|
Name[zh_TW]=PostScript,PDF 與 DVI 檔
|
||||||
|
X-KDE-ServiceTypes=ThumbCreator
|
||||||
|
MimeType=application/x-dvi;application/postscript;application/pdf;image/x-eps;
|
||||||
|
X-KDE-Library=gsthumbnail
|
||||||
|
CacheThumbnail=true
|
19
thumbnailers/raw/CMakeLists.txt
Normal file
19
thumbnailers/raw/CMakeLists.txt
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
project(rawthumbnail)
|
||||||
|
|
||||||
|
## includes and linking
|
||||||
|
include_directories(${KEXIV2_INCLUDE_DIR} ${KDCRAW_INCLUDE_DIR})
|
||||||
|
|
||||||
|
|
||||||
|
#sources
|
||||||
|
set(rawthumbnail_SRCS rawcreator.cpp)
|
||||||
|
kde4_add_plugin(rawthumbnail ${rawthumbnail_SRCS})
|
||||||
|
|
||||||
|
|
||||||
|
## includes and linking
|
||||||
|
target_link_libraries(rawthumbnail ${KDE4_KIO_LIBS} ${KDCRAW_LIBRARIES} ${KEXIV2_LIBRARIES} ${QT_QTGUI_LIBRARY} ${KDE4_KDECORE_LIBS})
|
||||||
|
|
||||||
|
## install the plugin
|
||||||
|
install(TARGETS rawthumbnail DESTINATION ${PLUGIN_INSTALL_DIR})
|
||||||
|
install(FILES rawthumbnail.desktop DESTINATION ${SERVICES_INSTALL_DIR})
|
||||||
|
|
||||||
|
|
109
thumbnailers/raw/rawcreator.cpp
Normal file
109
thumbnailers/raw/rawcreator.cpp
Normal file
|
@ -0,0 +1,109 @@
|
||||||
|
/**
|
||||||
|
Copyright (C) 2008 Unai Garro <ugarro@gmail.com>
|
||||||
|
|
||||||
|
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 2 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, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
|
||||||
|
USA
|
||||||
|
**/
|
||||||
|
|
||||||
|
#include "rawcreator.h"
|
||||||
|
|
||||||
|
#include <QImage>
|
||||||
|
|
||||||
|
#include <libkdcraw/kdcraw.h>
|
||||||
|
#include <libkexiv2/kexiv2.h>
|
||||||
|
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
KDE_EXPORT ThumbCreator *new_creator()
|
||||||
|
{
|
||||||
|
return new RAWCreator;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
RAWCreator::RAWCreator()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
RAWCreator::~RAWCreator()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool RAWCreator::create(const QString &path, int width, int height, QImage &img)
|
||||||
|
{
|
||||||
|
//load the image into the QByteArray
|
||||||
|
QByteArray data;
|
||||||
|
bool loaded=KDcrawIface::KDcraw::loadEmbeddedPreview(data,path);
|
||||||
|
|
||||||
|
if (loaded)
|
||||||
|
{
|
||||||
|
|
||||||
|
//Load the image into a QImage
|
||||||
|
QImage preview;
|
||||||
|
if (!preview.loadFromData(data) || preview.isNull())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
//And its EXIF info
|
||||||
|
KExiv2Iface::KExiv2 exiv;
|
||||||
|
if (exiv.loadFromData(data))
|
||||||
|
{
|
||||||
|
//We managed reading the EXIF info, rotate the image
|
||||||
|
//according to the EXIF orientation flag
|
||||||
|
KExiv2Iface::KExiv2::ImageOrientation orient=exiv.getImageOrientation();
|
||||||
|
|
||||||
|
//Rotate according to the EXIF orientation flag
|
||||||
|
switch(orient)
|
||||||
|
{
|
||||||
|
case KExiv2Iface::KExiv2::ORIENTATION_UNSPECIFIED:
|
||||||
|
case KExiv2Iface::KExiv2::ORIENTATION_NORMAL:
|
||||||
|
break; //we do nothing
|
||||||
|
case KExiv2Iface::KExiv2::ORIENTATION_HFLIP:
|
||||||
|
preview = preview.mirrored(true,false);
|
||||||
|
break;
|
||||||
|
case KExiv2Iface::KExiv2::ORIENTATION_ROT_180:
|
||||||
|
preview = preview.transformed(QMatrix().rotate(180));
|
||||||
|
break;
|
||||||
|
case KExiv2Iface::KExiv2::ORIENTATION_VFLIP:
|
||||||
|
preview = preview.mirrored(false,true);
|
||||||
|
break;
|
||||||
|
case KExiv2Iface::KExiv2::ORIENTATION_ROT_90_HFLIP:
|
||||||
|
preview = preview.mirrored(true,false);
|
||||||
|
preview = preview.transformed(QMatrix().rotate(90));
|
||||||
|
break;
|
||||||
|
case KExiv2Iface::KExiv2::ORIENTATION_ROT_90:
|
||||||
|
preview = preview.transformed(QMatrix().rotate(90));
|
||||||
|
break;
|
||||||
|
case KExiv2Iface::KExiv2::ORIENTATION_ROT_90_VFLIP:
|
||||||
|
preview = preview.mirrored(false,true);
|
||||||
|
preview = preview.transformed(QMatrix().rotate(90));
|
||||||
|
break;
|
||||||
|
case KExiv2Iface::KExiv2::ORIENTATION_ROT_270:
|
||||||
|
preview = preview.transformed(QMatrix().rotate(270));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Scale the image as requested by the thumbnailer
|
||||||
|
img=preview.scaled(width,height,Qt::KeepAspectRatio);
|
||||||
|
|
||||||
|
}
|
||||||
|
return loaded;
|
||||||
|
}
|
||||||
|
|
||||||
|
ThumbCreator::Flags RAWCreator::flags() const
|
||||||
|
{
|
||||||
|
return (Flags)(0);
|
||||||
|
}
|
34
thumbnailers/raw/rawcreator.h
Normal file
34
thumbnailers/raw/rawcreator.h
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
/**
|
||||||
|
Copyright (C) 2008 Unai Garro <ugarro@gmail.com>
|
||||||
|
|
||||||
|
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 2 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, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
|
||||||
|
USA
|
||||||
|
**/
|
||||||
|
|
||||||
|
#ifndef RAWCREATOR_H
|
||||||
|
#define RAWCREATOR_H
|
||||||
|
|
||||||
|
#include <kio/thumbcreator.h>
|
||||||
|
|
||||||
|
class RAWCreator : public ThumbCreator
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
RAWCreator();
|
||||||
|
virtual ~RAWCreator();
|
||||||
|
virtual bool create(const QString &path, int width, int height, QImage &img);
|
||||||
|
virtual Flags flags() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
60
thumbnailers/raw/rawthumbnail.desktop
Normal file
60
thumbnailers/raw/rawthumbnail.desktop
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Service
|
||||||
|
Name=RAW Photo Camera Files
|
||||||
|
Name[ar]=ملفات الخامة RAW لآلة التصوير
|
||||||
|
Name[bg]=Снимки RAW от фотоапарат
|
||||||
|
Name[bs]=Sirove datoteke s kamere
|
||||||
|
Name[ca]=Fitxers RAW de càmera de fotos
|
||||||
|
Name[ca@valencia]=Fitxers RAW de càmera de fotos
|
||||||
|
Name[cs]=RAW soubory z fotoaparátu
|
||||||
|
Name[da]=Kamera-filer i RAW-foto
|
||||||
|
Name[de]=RAW-Fotokamera-Dateien
|
||||||
|
Name[el]=RAW αρχεία φωτογραφιών
|
||||||
|
Name[en_GB]=RAW Photo Camera Files
|
||||||
|
Name[es]=Archivos RAW de cámara fotográfica
|
||||||
|
Name[et]=Kaamera toorfailid
|
||||||
|
Name[eu]=RAW argazki kamera-fitxategiak
|
||||||
|
Name[fi]=RAW-kuvakameratiedostot
|
||||||
|
Name[fr]=Fichiers « RAW » d'appareil photo numérique
|
||||||
|
Name[ga]=Comhaid Cheamara RAW
|
||||||
|
Name[gl]=Ficheiros RAW de cámara de fotos
|
||||||
|
Name[hr]=Fotografske datoteke RAW
|
||||||
|
Name[hu]=RAW-fájlok
|
||||||
|
Name[ia]=Files de photo camera RAW
|
||||||
|
Name[is]=RAW myndavélaskrár
|
||||||
|
Name[it]=File grezzi fotocamera
|
||||||
|
Name[ja]=カメラの RAW ファイル
|
||||||
|
Name[kk]=Камераның RAW ('шикі') файлдары
|
||||||
|
Name[km]=ឯកសាររូបថតរបស់ម៉ាស៊ីនថតដើម
|
||||||
|
Name[ko]=RAW 사진 카메라 파일
|
||||||
|
Name[lt]=Fotoaparato RAW failai
|
||||||
|
Name[lv]=RAW fotogrāfiju faili
|
||||||
|
Name[mr]=RAW फोटो कॅमेरा फाईल्स
|
||||||
|
Name[nb]=RAW foto kamerafiler
|
||||||
|
Name[nds]=RAW-Fotokamera-Dateien
|
||||||
|
Name[nl]=Bestanden met RAW-camera-afbeelding
|
||||||
|
Name[pa]=RAW ਫੋਟੋ ਕੈਮਰਾ ਫਾਇਲਾਂ
|
||||||
|
Name[pl]=Pliki RAW z aparatów cyfrowych
|
||||||
|
Name[pt]=Ficheiros de Máquinas Fotográficas RAW
|
||||||
|
Name[pt_BR]=Arquivos RAW de câmeras fotográficas
|
||||||
|
Name[ro]=Fișiere fotografice brute
|
||||||
|
Name[ru]=Цифровые негативы (RAW)
|
||||||
|
Name[si]=RAW පිංතූර කැමරා ගොනු
|
||||||
|
Name[sk]=RAW súbory z digitálneho fotoaparátu
|
||||||
|
Name[sl]=Surove datoteke s fotoaparata
|
||||||
|
Name[sr]=Сирови фајлови с фотоапарата
|
||||||
|
Name[sr@ijekavian]=Сирови фајлови с фотоапарата
|
||||||
|
Name[sr@ijekavianlatin]=Sirovi fajlovi s fotoaparata
|
||||||
|
Name[sr@latin]=Sirovi fajlovi s fotoaparata
|
||||||
|
Name[sv]=Obehandlade kamerafiler
|
||||||
|
Name[tr]=RAW Fotoğraf Makinesi Dosyaları
|
||||||
|
Name[ug]=RAW سۈرەت كامېرا ھۆججىتى
|
||||||
|
Name[uk]=Файли цифрових негативів
|
||||||
|
Name[x-test]=xxRAW Photo Camera Filesxx
|
||||||
|
Name[zh_CN]=RAW 照片相机文件
|
||||||
|
Name[zh_TW]=原始相機檔
|
||||||
|
X-KDE-ServiceTypes=ThumbCreator
|
||||||
|
# image/x-dcraw is the subclass for all "raw" image formats, so no need to list them all
|
||||||
|
MimeType=image/x-dcraw;
|
||||||
|
X-KDE-Library=rawthumbnail
|
||||||
|
CacheThumbnail=true
|
Loading…
Add table
Reference in a new issue