2 * genshortcutents.cpp - Copyright 2005 Frerich Raabe <raabe@kde.org>
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
15 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
16 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
17 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
18 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
19 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
21 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 #include "kaboutdata.h"
26 #include "kcomponentdata.h"
27 #include "kcmdlineargs.h"
29 #include "kstandardshortcut.h"
31 #include <QtCore/QDate>
32 #include <QtCore/QFile>
33 #include <QtCore/QCoreApplication>
34 #include <QtCore/QTextStream>
35 #include <QtCore/QStringList>
37 static QString
keyAsMarkup( const QString
&key
)
39 if ( key
== "Alt" || key
== "Ctrl" || key
== "Enter" || key
== "Esc" ||
40 key
== "Shift" || key
== "Tab" ) {
41 return QString('&' + key
+ ';');
43 if ( key
== "Left" || key
== "Right" || key
== "Up" || key
== "Down" ) {
44 return QString("<keysym>" + key
+ " Arrow</keysym>");
46 if ( key
== "Backspace" || key
== "Menu" ) {
47 return QString("<keysym>" + key
+ "</keysym>");
49 if ( key
== "Plus" ) {
50 return QString("<keycap>+</keycap>");
52 if ( key
== "Minus" ) {
53 return QString("<keycap>-</keycap>");
55 return QString("<keycap>" + key
+ "</keycap>");
58 static QString
entityForAccel( KStandardShortcut::StandardShortcut accel
)
60 QString markup
= "<!ENTITY KeyCombo_";
62 /* We use a switch so that the compiler gives us warning messages in
63 * case KStandardShortcut::StandardShortcut gets extended (which means we have to
64 * extend this code, too).
67 case KStandardShortcut::AccelNone
:
69 case KStandardShortcut::Open
:
72 case KStandardShortcut::OpenRecent
:
73 markup
+= "OpenRecent";
75 case KStandardShortcut::New
:
78 case KStandardShortcut::Close
:
81 case KStandardShortcut::Save
:
84 case KStandardShortcut::SaveAs
:
87 case KStandardShortcut::Print
:
90 case KStandardShortcut::Quit
:
93 case KStandardShortcut::Undo
:
96 case KStandardShortcut::Redo
:
99 case KStandardShortcut::Cut
:
102 case KStandardShortcut::Copy
:
105 case KStandardShortcut::Paste
:
108 case KStandardShortcut::SelectAll
:
109 markup
+= "SelectAll";
111 case KStandardShortcut::Deselect
:
112 markup
+= "Deselect";
114 case KStandardShortcut::DeleteWordBack
:
115 markup
+= "DeleteWordBack";
117 case KStandardShortcut::DeleteWordForward
:
118 markup
+= "DeleteWordForward";
120 case KStandardShortcut::Find
:
123 case KStandardShortcut::FindNext
:
124 markup
+= "FindNext";
126 case KStandardShortcut::FindPrev
:
127 markup
+= "FindPrev";
129 case KStandardShortcut::Replace
:
132 case KStandardShortcut::Home
:
135 case KStandardShortcut::Begin
:
138 case KStandardShortcut::End
:
141 case KStandardShortcut::Prior
:
144 case KStandardShortcut::Next
:
147 case KStandardShortcut::GotoLine
:
148 markup
+= "GotoLine";
150 case KStandardShortcut::AddBookmark
:
151 markup
+= "AddBookmark";
153 case KStandardShortcut::ZoomIn
:
156 case KStandardShortcut::ZoomOut
:
159 case KStandardShortcut::Up
:
162 case KStandardShortcut::Back
:
165 case KStandardShortcut::Forward
:
168 case KStandardShortcut::Reload
:
171 case KStandardShortcut::ShowMenubar
:
172 markup
+= "ShowMenubar";
174 case KStandardShortcut::Help
:
177 case KStandardShortcut::WhatsThis
:
178 markup
+= "WhatsThis";
180 case KStandardShortcut::TextCompletion
:
181 markup
+= "TextCompletion";
183 case KStandardShortcut::PrevCompletion
:
184 markup
+= "PrevCompletion";
186 case KStandardShortcut::NextCompletion
:
187 markup
+= "NextCompletion";
189 case KStandardShortcut::SubstringCompletion
:
190 markup
+= "SubstringCompletion";
192 case KStandardShortcut::RotateUp
:
193 markup
+= "RotateUp";
195 case KStandardShortcut::RotateDown
:
196 markup
+= "RotateDown";
198 case KStandardShortcut::TabNext
:
201 case KStandardShortcut::TabPrev
:
204 case KStandardShortcut::FullScreen
:
205 markup
+= "FullScreen";
207 case KStandardShortcut::BackwardWord
:
208 markup
+= "BackwardWord";
210 case KStandardShortcut::ForwardWord
:
211 markup
+= "ForwardWord";
213 case KStandardShortcut::BeginningOfLine
:
214 markup
+= "BeginningOfLine";
216 case KStandardShortcut::EndOfLine
:
217 markup
+= "EndOfLine";
219 case KStandardShortcut::PasteSelection
:
220 markup
+= "PastSelection";
222 case KStandardShortcut::Revert
:
225 case KStandardShortcut::PrintPreview
:
226 markup
+= "PrintPreview";
228 case KStandardShortcut::Mail
:
231 case KStandardShortcut::Clear
:
234 case KStandardShortcut::ActualSize
:
235 markup
+= "ActualSize";
237 case KStandardShortcut::FitToPage
:
238 markup
+= "FitToPage";
240 case KStandardShortcut::FitToWidth
:
241 markup
+= "FitToWidth";
243 case KStandardShortcut::FitToHeight
:
244 markup
+= "FitToHeight";
246 case KStandardShortcut::Zoom
:
249 case KStandardShortcut::Goto
:
252 case KStandardShortcut::GotoPage
:
253 markup
+= "GotoPage";
255 case KStandardShortcut::DocumentBack
:
256 markup
+= "DocumentBack";
258 case KStandardShortcut::DocumentForward
:
259 markup
+= "DocumentForward";
261 case KStandardShortcut::EditBookmarks
:
262 markup
+= "EditBookmarks";
264 case KStandardShortcut::Spelling
:
265 markup
+= "Spelling";
267 case KStandardShortcut::ShowToolbar
:
268 markup
+= "ShowToolbar";
270 case KStandardShortcut::ShowStatusbar
:
271 markup
+= "ShowStatusbar";
273 case KStandardShortcut::SaveOptions
:
274 markup
+= "SaveOptions";
276 case KStandardShortcut::KeyBindings
:
277 markup
+= "KeyBindings";
279 case KStandardShortcut::Preferences
:
280 markup
+= "Preferences";
282 case KStandardShortcut::ConfigureToolbars
:
283 markup
+= "ConfigureToolbars";
285 case KStandardShortcut::ConfigureNotifications
:
286 markup
+= "ConfigureNotifications";
288 case KStandardShortcut::TipofDay
:
289 markup
+= "TipofDay";
291 case KStandardShortcut::ReportBug
:
292 markup
+= "ReportBug";
294 case KStandardShortcut::SwitchApplicationLanguage
:
295 markup
+= "SwitchApplicationLanguage";
297 case KStandardShortcut::AboutApp
:
298 markup
+= "AboutApp";
300 case KStandardShortcut::AboutKDE
:
301 markup
+= "AboutKDE";
303 case KStandardShortcut::StandardShortcutCount
:
309 QString internalStr
= KStandardShortcut::shortcut( accel
).toString();
310 QString firstSequence
= internalStr
.left( internalStr
.indexOf( ';' ) );
311 const QStringList keys
= firstSequence
.split( '+',QString::SkipEmptyParts
);
312 if ( keys
.empty() ) {
316 if ( keys
.count() == 1 ) {
317 if ( keys
.first().startsWith( "XF86" ) ) {
320 markup
+= keyAsMarkup( keys
.first() );
322 markup
+= "<keycombo action=\"Simul\">";
323 foreach( const QString
&key
, keys
) {
324 if ( key
.startsWith( "XF86" ) ) {
327 markup
+= keyAsMarkup( key
);
329 markup
+= "</keycombo>";
335 int main( int argc
, char **argv
)
337 KCmdLineOptions cmdLineOptions
;
338 cmdLineOptions
.add("o");
339 cmdLineOptions
.add("output <file>", ki18n("Output file"), "kde-standard-accels.entities");
341 KAboutData
aboutData( "genshortcutents", 0, ki18n("genshortcutents"), "1.0",
342 ki18n( "Generates DocBook entities for key shortcuts of standard actions" ));
344 KCmdLineArgs::init( argc
, argv
, &aboutData
);
345 KCmdLineArgs::addCmdLineOptions( cmdLineOptions
);
347 KComponentData
componentData( &aboutData
);
348 QCoreApplication
app( KCmdLineArgs::qtArgc(), KCmdLineArgs::qtArgv() );
350 KCmdLineArgs
*args
= KCmdLineArgs::parsedArgs();
352 const QString outputFileName
= args
->getOption( "output" );
353 QFile
outputFile( outputFileName
);
354 if ( !outputFile
.open( QIODevice::WriteOnly
) ) {
355 qDebug( "Failed to open %s for writing.", qPrintable( outputFileName
) );
359 QTextStream
stream( &outputFile
);
360 stream
<< "<!-- Generated by "
361 << aboutData
.programName() + ' '
362 << aboutData
.version() + " on "
363 << QDateTime::currentDateTime().toString() + ".\n";
364 stream
<< " Do not bother to fiddle with this, your modifications will be\n"
365 << " overwritten as soon as the file is regenerated. -->\n";
368 for ( unsigned int i
= 0; i
< KStandardShortcut::StandardShortcutCount
; ++i
) {
369 stream
<< entityForAccel( static_cast<KStandardShortcut::StandardShortcut
>(i
) ) << "\n";