#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# icon_naming_spec.py
# Viewer of the Icon Naming Specification, version 1.0
# See screenshot at http://bitimg.com/dH1azu

# Icon Naming Specification document
# Author: Rodney Dawes <dobey.pwns@gmail.com>
# Copy & paste from http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html
SPEC_DATA = """
Table 2. Standard Action Icons
Name	Description
address-book-new	The icon used for the action to create a new address book.
application-exit	The icon used for exiting an application. Typically this is seen in the application's menus as File->Quit.
appointment-new	The icon used for the action to create a new appointment in a calendaring application.
call-start	The icon used for initiating or accepting a call. Should be similar to the standard cellular call pickup icon, a green handset with ear and mouth pieces facing upward.
call-stop	The icon used for stopping a current call. Should be similar to the standard cellular call hangup icon, a red handset with ear and mouth pieces facing downward.
contact-new	The icon used for the action to create a new contact in an address book application.
document-new	The icon used for the action to create a new document.
document-open	The icon used for the action to open a document.
document-open-recent	The icon used for the action to open a document that was recently opened.
document-page-setup	The icon for the page setup action of a document editor.
document-print	The icon for the print action of an application.
document-print-preview	The icon for the print preview action of an application.
document-properties	The icon for the action to view the properties of a document in an application.
document-revert	The icon for the action of reverting to a previous version of a document.
document-save	The icon for the save action. Should be an arrow pointing down and toward a hard disk.
document-save-as	The icon for the save as action.
document-send	The icon for the send action. Should be an arrow pointing up and away from a hard disk.
edit-clear	The icon for the clear action.
edit-copy	The icon for the copy action.
edit-cut	The icon for the cut action.
edit-delete	The icon for the delete action.
edit-find	The icon for the find action.
edit-find-replace	The icon for the find and replace action.
edit-paste	The icon for the paste action.
edit-redo	The icon for the redo action.
edit-select-all	The icon for the select all action.
edit-undo	The icon for the undo action.
folder-new	The icon for creating a new folder.
format-indent-less	The icon for the decrease indent formatting action.
format-indent-more	The icon for the increase indent formatting action.
format-justify-center	The icon for the center justification formatting action.
format-justify-fill	The icon for the fill justification formatting action.
format-justify-left	The icon for the left justification formatting action.
format-justify-right	The icon for the right justification action.
format-text-direction-ltr	The icon for the left-to-right text formatting action.
format-text-direction-rtl	The icon for the right-to-left formatting action.
format-text-bold	The icon for the bold text formatting action.
format-text-italic	The icon for the italic text formatting action.
format-text-underline	The icon for the underlined text formatting action.
format-text-strikethrough	The icon for the strikethrough text formatting action.
go-bottom	The icon for the go to bottom of a list action.
go-down	The icon for the go down in a list action.
go-first	The icon for the go to the first item in a list action.
go-home	The icon for the go to home location action.
go-jump	The icon for the jump to action.
go-last	The icon for the go to the last item in a list action.
go-next	The icon for the go to the next item in a list action.
go-previous	The icon for the go to the previous item in a list action.
go-top	The icon for the go to the top of a list action.
go-up	The icon for the go up in a list action.
help-about	The icon for the About item in the Help menu.
help-contents	The icon for Contents item in the Help menu.
help-faq	The icon for the FAQ item in the Help menu.
insert-image	The icon for the insert image action of an application.
insert-link	The icon for the insert link action of an application.
insert-object	The icon for the insert object action of an application.
insert-text	The icon for the insert text action of an application.
list-add	The icon for the add to list action.
list-remove	The icon for the remove from list action.
mail-forward	The icon for the forward action of an electronic mail application.
mail-mark-important	The icon for the mark as important action of an electronic mail application.
mail-mark-junk	The icon for the mark as junk action of an electronic mail application.
mail-mark-notjunk	The icon for the mark as not junk action of an electronic mail application.
mail-mark-read	The icon for the mark as read action of an electronic mail application.
mail-mark-unread	The icon for the mark as unread action of an electronic mail application.
mail-message-new	The icon for the compose new mail action of an electronic mail application.
mail-reply-all	The icon for the reply to all action of an electronic mail application.
mail-reply-sender	The icon for the reply to sender action of an electronic mail application.
mail-send	The icon for the send action of an electronic mail application.
mail-send-receive	The icon for the send and receive action of an electronic mail application.
media-eject	The icon for the eject action of a media player or file manager.
media-playback-pause	The icon for the pause action of a media player.
media-playback-start	The icon for the start playback action of a media player.
media-playback-stop	The icon for the stop action of a media player.
media-record	The icon for the record action of a media application.
media-seek-backward	The icon for the seek backward action of a media player.
media-seek-forward	The icon for the seek forward action of a media player.
media-skip-backward	The icon for the skip backward action of a media player.
media-skip-forward	The icon for the skip forward action of a media player.
object-flip-horizontal	The icon for the action to flip an object horizontally.
object-flip-vertical	The icon for the action to flip an object vertically.
object-rotate-left	The icon for the rotate left action performed on an object.
object-rotate-right	The icon for the rotate rigt action performed on an object.
process-stop	The icon used for the “Stop” action in applications with actions that may take a while to process, such as web page loading in a browser.
system-lock-screen	The icon used for the “Lock Screen” item in the desktop's panel application.
system-log-out	The icon used for the “Log Out” item in the desktop's panel application.
system-run	The icon used for the “Run Application...” item in the desktop's panel application.
system-search	The icon used for the “Search” item in the desktop's panel application.
system-reboot	The icon used for the “Reboot” item in the desktop's panel application.
system-shutdown	The icon used for the “Shutdown” item in the desktop's panel application.
tools-check-spelling	The icon used for the “Check Spelling” item in the application's “Tools” menu.
view-fullscreen	The icon used for the “Fullscreen” item in the application's “View” menu.
view-refresh	The icon used for the “Refresh” item in the application's “View” menu.
view-restore	The icon used by an application for leaving the fullscreen view, and returning to a normal windowed view.
view-sort-ascending	The icon used for the “Sort Ascending” item in the application's “View” menu, or in a button for changing the sort method for a list.
view-sort-descending	The icon used for the “Sort Descending” item in the application's “View” menu, or in a button for changing the sort method for a list.
window-close	The icon used for the “Close Window” item in the application's “Windows” menu.
window-new	The icon used for the “New Window” item in the application's “Windows” menu.
zoom-fit-best	The icon used for the “Best Fit” item in the application's “View” menu.
zoom-in	The icon used for the “Zoom in” item in the application's “View” menu.
zoom-original	The icon used for the “Original Size” item in the application's “View” menu.
zoom-out	The icon used for the “Zoom Out” item in the application's “View” menu.

Table 3. Standard Animation Icons
Name	Description
process-working	This is the standard spinner animation for web browsers and file managers to show that the location is loading.

Table 4. Standard Application Icons
Name	Description
accessories-calculator	The icon used for the desktop's calculator accessory program.
accessories-character-map	The icon used for the desktop's international and extended text character accessory program.
accessories-dictionary	The icon used for the desktop's dictionary accessory program.
accessories-text-editor	The icon used for the desktop's text editing accessory program.
help-browser	The icon used for the desktop's help browsing application.
multimedia-volume-control	The icon used for the desktop's hardware volume control application.
preferences-desktop-accessibility	The icon used for the desktop's accessibility preferences.
preferences-desktop-font	The icon used for the desktop's font preferences.
preferences-desktop-keyboard	The icon used for the desktop's keyboard preferences.
preferences-desktop-locale	The icon used for the desktop's locale preferences.
preferences-desktop-multimedia	The icon used for the desktop's multimedia preferences.
preferences-desktop-screensaver	The icon used for the desktop's screen saving preferences.
preferences-desktop-theme	The icon used for the desktop's theme preferences.
preferences-desktop-wallpaper	The icon used for the desktop's wallpaper preferences.
system-file-manager	The icon used for the desktop's file management application.
system-software-install	The icon used for the desktop's software installer application.
system-software-update	The icon used for the desktop's software updating application.
utilities-system-monitor	The icon used for the desktop's system resource monitor application.
utilities-terminal	The icon used for the desktop's terminal emulation application.

Table 5. Standard Category Icons
Name	Description
applications-accessories	The icon for the “Accessories” sub-menu of the Programs menu.
applications-development	The icon for the “Programming” sub-menu of the Programs menu.
applications-engineering	The icon for the “Engineering” sub-menu of the Programs menu.
applications-games	The icon for the “Games” sub-menu of the Programs menu.
applications-graphics	The icon for the “Graphics” sub-menu of the Programs menu.
applications-internet	The icon for the “Internet” sub-menu of the Programs menu.
applications-multimedia	The icon for the “Multimedia” sub-menu of the Programs menu.
applications-office	The icon for the “Office” sub-menu of the Programs menu.
applications-other	The icon for the “Other” sub-menu of the Programs menu.
applications-science	The icon for the “Science” sub-menu of the Programs menu.
applications-system	The icon for the “System Tools” sub-menu of the Programs menu.
applications-utilities	The icon for the “Utilities” sub-menu of the Programs menu.
preferences-desktop	The icon for the “Desktop Preferences” category.
preferences-desktop-peripherals	The icon for the “Peripherals” sub-category of the “Desktop Preferences” category.
preferences-desktop-personal	The icon for the “Personal” sub-category of the “Desktop Preferences” category.
preferences-other	The icon for the “Other” preferences category.
preferences-system	The icon for the “System Preferences” category.
preferences-system-network	The icon for the “Network” sub-category of the “System Preferences” category.
system-help	The icon for the “Help” system category.

Table 6. Standard Device Icons
Name	Description
audio-card	The icon used for the audio rendering device.
audio-input-microphone	The icon used for the microphone audio input device.
battery	The icon used for the system battery device.
camera-photo	The icon used for a digital still camera devices.
camera-video	The fallback icon for video cameras.
camera-web	The fallback icon for web cameras.
computer	The icon used for the computing device as a whole.
drive-harddisk	The icon used for hard disk drives.
drive-optical	The icon used for optical media drives such as CD and DVD.
drive-removable-media	The icon used for removable media drives.
input-gaming	The icon used for the gaming input device.
input-keyboard	The icon used for the keyboard input device.
input-mouse	The icon used for the mousing input device.
input-tablet	The icon used for graphics tablet input devices.
media-flash	The fallback icon used for flash media, such as memory stick and SD.
media-floppy	The icon used for physical floppy disk media.
media-optical	The icon used for physical optical media such as CD and DVD.
media-tape	The icon used for generic physical tape media.
modem	The icon used for modem devices.
multimedia-player	The icon used for generic multimedia playing devices.
network-wired	The icon used for wired network connections.
network-wireless	The icon used for wireless network connections.
pda	This is the fallback icon for Personal Digial Assistant devices. Primary use of this icon is for PDA devices connected to the PC. Connection medium is not an important aspect of the icon. The metaphor for this fallback icon should be a generic PDA device icon.
phone	This is the default fallback for phone devices. Primary use of this icon group is for phone devices which support connectivity to the PC. These may be VoIP, cellular, or possibly landline phones. The metaphor for this fallback should be a generic mobile phone device.
printer	The icon used for a printer device.
scanner	The icon used for a scanner device.
video-display	The icon used for the monitor that video gets displayed to.

Table 7. Standard Emblem Icons
Name	Description
emblem-default	The icon used as an emblem to specify the default selection of a printer for example.
emblem-documents	The icon used as an emblem for the directory where a user's documents are stored.
emblem-downloads	The icon used as an emblem for the directory where a user's downloads from the internet are stored.
emblem-favorite	The icon used as an emblem for files and directories that the user marks as favorites.
emblem-important	The icon used as an emblem for files and directories that are marked as important by the user.
emblem-mail	The icon used as an emblem to specify the directory where the user's electronic mail is stored.
emblem-photos	The icon used as an emblem to specify the directory where the user stores photographs.
emblem-readonly	The icon used as an emblem for files and directories which can not be written to by the user.
emblem-shared	The icon used as an emblem for files and directories that are shared to other users.
emblem-symbolic-link	The icon used as an emblem for files and direcotires that are links to other files or directories on the filesystem.
emblem-synchronized	The icon used as an emblem for files or directories that are configured to be synchronized to another device.
emblem-system	The icon used as an emblem for directories that contain system libraries, settings, and data.
emblem-unreadable	The icon used as an emblem for files and directories that are inaccessible.

Table 8. Standard Emotion Icons
Name	Description
face-angel	The icon used for the 0:-) emote.
face-angry	The icon used for the X-( emote.
face-cool	The icon used for the B-) emote.
face-crying	The icon used for the :'( emote.
face-devilish	The icon used for the >:-) emote.
face-embarrassed	The icon used for the :-[ emote.
face-kiss	The icon used for the :-* emote.
face-laugh	The icon used for the :-)) emote.
face-monkey	The icon used for the :-(|) emote.
face-plain	The icon used for the :-| emote.
face-raspberry	The icon used for the :-P emote.
face-sad	The icon used for the :-( emote.
face-sick	The icon used for the :-& emote.
face-smile	The icon used for the :-) emote.
face-smile-big	The icon used for the :-D emote.
face-smirk	The icon used for the :-! emote.
face-surprise	The icon used for the :-0 emote.
face-tired	The icon used for the |-) emote.
face-uncertain	The icon used for the :-/ emote.
face-wink	The icon used for the ;-) emote.
face-worried	The icon used for the :-S emote.

Table 9. Standard International Icons
Name	Description
flag-aa	The flag for the country with the ISO 3166 country code AA. All flags should use ISO 3166 two-letter country codes, in lowercase form, as the specifier for the country.

Table 10. Standard MIME Type Icons
Name	Description
application-x-executable	The icon used for executable file types.
audio-x-generic	The icon used for generic audio file types.
font-x-generic	The icon used for generic font file types.
image-x-generic	The icon used for generic image file types.
package-x-generic	The icon used for generic package file types.
text-html	The icon used for HTML text file types.
text-x-generic	The icon used for generic text file types.
text-x-generic-template	The icon used for generic text templates.
text-x-script	The icon used for script file types, such as shell scripts.
video-x-generic	The icon used for generic video file types.
x-office-address-book	The icon used for generic address book file types.
x-office-calendar	The icon used for generic calendar file types.
x-office-document	The icon used for generic document and letter file types.
x-office-presentation	The icon used for generic presentation file types.
x-office-spreadsheet	The icon used for generic spreadsheet file types.

Table 11. Standard Place Icons
Name	Description
folder	The standard folder icon used to represent directories on local filesystems, mail folders, and other hierarchical groups.
folder-remote	The icon used for normal directories on a remote filesystem.
network-server	The icon used for individual host machines under the “Network Servers” place in the file manager.
network-workgroup	The icon for the “Network Servers” place in the desktop's file manager, and workgroups within the network.
start-here	The icon used by the desktop's main menu for accessing places, applications, and other features.
user-bookmarks	The icon for the user's special “Bookmarks” place.
user-desktop	The icon for the special “Desktop” directory of the user.
user-home	The icon for the special “Home” directory of the user.
user-trash	The icon for the user's “Trash” place in the desktop's file manager.

Table 12. Standard Status Icons
Name	Description
appointment-missed	The icon used when an appointment was missed.
appointment-soon	The icon used when an appointment will occur soon.
audio-volume-high	The icon used to indicate high audio volume.
audio-volume-low	The icon used to indicate low audio volume.
audio-volume-medium	The icon used to indicate medium audio volume.
audio-volume-muted	The icon used to indicate the muted state for audio playback.
battery-caution	The icon used when the battery is below 40%.
battery-low	The icon used when the battery is below 20%.
dialog-error	The icon used when a dialog is opened to explain an error condition to the user.
dialog-information	The icon used when a dialog is opened to give information to the user that may be pertinent to the requested action.
dialog-password	The icon used when a dialog requesting the authentication credentials for a user is opened.
dialog-question	The icon used when a dialog is opened to ask a simple question of the user.
dialog-warning	The icon used when a dialog is opened to warn the user of impending issues with the requested action.
folder-drag-accept	The icon used for a folder while an object is being dragged onto it, that is of a type that the directory can contain.
folder-open	The icon used for folders, while their contents are being displayed within the same window. This icon would normally be shown in a tree or list view, next to the main view of a folder's contents.
folder-visiting	The icon used for folders, while their contents are being displayed in another window. This icon would typically be used when using multiple windows to navigate the hierarchy, such as in Nautilus's spatial mode.
image-loading	The icon used when another image is being loaded, such as thumnails for larger images in the file manager.
image-missing	The icon used when another image could not be loaded.
mail-attachment	The icon used for an electronic mail that contains attachments.
mail-unread	The icon used for an electronic mail that is unread.
mail-read	The icon used for an electronic mail that is read.
mail-replied	The icon used for an electronic mail that has been replied to.
mail-signed	The icon used for an electronic mail that contains a signature.
mail-signed-verified	The icon used for an electronic mail that contains a signature which has also been verified by the security system.
media-playlist-repeat	The icon for the repeat mode of a media player.
media-playlist-shuffle	The icon for the shuffle mode of a media player.
network-error	The icon used when an error occurs trying to intialize the network connection of the computing device. This icon should be two computers, one in the background, with the screens of both computers, colored black, and with the theme's style element for errors, overlayed on top of the icon.
network-idle	The icon used when no data is being transmitted or received, while the computing device is connected to a network. This icon should be two computers, one in the background, with the screens of both computers, colored black.
network-offline	The icon used when the computing device is disconnected from the network. This icon should be a computer in the background, with a screen colored black, and the theme's icon element to show that a device is not accessible, in the foreground.
network-receive	The icon used when data is being received, while the computing device is connected to a network. This icon should be two computers, one in the background, with its screen colored green, and the screen of the computer in the foreground, colored black.
network-transmit	The icon used when data is being transmitted, while the computing device is connected to a network. This icon should be two computers, one in the background, with its screen colored black, and the screen of the computer in the foreground, colored green.
network-transmit-receive	The icon used data is being both transmitted and received simultaneously, while the computing device is connected to a network. This icon should be two computers, one in the background, with the screens of both computers, colored green.
printer-error	The icon used when an error occurs while attempting to print. This icon should be the theme's printer device icon, with the theme's style element for errors, overlayed on top of the icon.
printer-printing	The icon used while a print job is successfully being spooled to a printing device. This icon should be the theme's printer device icon, with a document emerging from the printing device.
security-high	The icon used to indicate that the security level of a connection is known to be secure, using strong encryption and a valid certificate.
security-medium	The icon used to indicate that the security level of a connection is presumed to be secure, using strong encryption, and a certificate that could not be automatically verified, but which the user has chosen to trust.
security-low	The icon used to indicate that the security level of a connection is presumed to be insecure, either by using weak encryption, or by using a certificate that the could not be automatically verified, and which the user has not chosent to trust.
software-update-available	The icon used when an update is available for software installed on the computing device, through the system software update program.
software-update-urgent	The icon used when an urgent update is available through the system software update program.
sync-error	The icon used when an error occurs while attempting to synchronize data from the computing device, to another device.
sync-synchronizing	The icon used while data is successfully synchronizing to another device.
task-due	The icon used when a task is due soon.
task-past-due	The icon used when a task that was due, has been left incomplete.
user-available	The icon used when a user on a chat network is available to initiate a conversation with.
user-away	The icon used when a user on a chat network is away from their keyboard and the chat program.
user-idle	The icon used when a user on a chat network has not been an active participant in any chats on the network, for an extended period of time.
user-offline	The icon used when a user on a chat network is not available.
user-trash-full	The icon for the user's “Trash” in the desktop's file manager, when there are items in the “Trash” waiting for disposal or recovery.
weather-clear	The icon used while the weather for a region is “clear skies”.
weather-clear-night	The icon used while the weather for a region is “clear skies” during the night.
weather-few-clouds	The icon used while the weather for a region is “partly cloudy”.
weather-few-clouds-night	The icon used while the weather for a region is “partly cloudy” during the night.
weather-fog	The icon used while the weather for a region is “foggy”.
weather-overcast	The icon used while the weather for a region is “overcast”.
weather-severe-alert	The icon used while a sever weather alert is in effect for a region.
weather-showers	The icon used while rain showers are occurring in a region.
weather-showers-scattered	The icon used while scattered rain showers are occurring in a region.
weather-snow	The icon used while snow showers are occurring in a region.
weather-storm	The icon used while storms are occurring in a region. 
"""

ISO_3166 = """\
A1 Anonymous Proxy
A2 Satellite Provider
O1 Other Country
AD Andorra
AE United Arab Emirates
AF Afghanistan
AG Antigua and Barbuda
AI Anguilla
AL Albania
AM Armenia
AO Angola
AP Asia/Pacific Region
AQ Antarctica
AR Argentina
AS American Samoa
AT Austria
AU Australia
AW Aruba
AX Aland Islands
AZ Azerbaijan
BA Bosnia and Herzegovina
BB Barbados
BD Bangladesh
BE Belgium
BF Burkina Faso
BG Bulgaria
BH Bahrain
BI Burundi
BJ Benin
BL Saint Bartelemey
BM Bermuda
BN Brunei Darussalam
BO Bolivia
BQ Bonaire  Saint Eustatius and Saba
BR Brazil
BS Bahamas
BT Bhutan
BV Bouvet Island
BW Botswana
BY Belarus
BZ Belize
CA Canada
CC Cocos (Keeling) Islands
CD Congo  The Democratic Republic of the
CF Central African Republic
CG Congo
CH Switzerland
CI Cote d'Ivoire
CK Cook Islands
CL Chile
CM Cameroon
CN China
CO Colombia
CR Costa Rica
CU Cuba
CV Cape Verde
CW Curacao
CX Christmas Island
CY Cyprus
CZ Czech Republic
DE Germany
DJ Djibouti
DK Denmark
DM Dominica
DO Dominican Republic
DZ Algeria
EC Ecuador
EE Estonia
EG Egypt
EH Western Sahara
ER Eritrea
ES Spain
ET Ethiopia
EU Europe
FI Finland
FJ Fiji
FK Falkland Islands (Malvinas)
FM Micronesia  Federated States of
FO Faroe Islands
FR France
GA Gabon
GB United Kingdom
GD Grenada
GE Georgia
GF French Guiana
GG Guernsey
GH Ghana
GI Gibraltar
GL Greenland
GM Gambia
GN Guinea
GP Guadeloupe
GQ Equatorial Guinea
GR Greece
GS South Georgia and the South Sandwich Islands
GT Guatemala
GU Guam
GW Guinea-Bissau
GY Guyana
HK Hong Kong
HM Heard Island and McDonald Islands
HN Honduras
HR Croatia
HT Haiti
HU Hungary
ID Indonesia
IE Ireland
IL Israel
IM Isle of Man
IN India
IO British Indian Ocean Territory
IQ Iraq
IR Iran  Islamic Republic of
IS Iceland
IT Italy
JE Jersey
JM Jamaica
JO Jordan
JP Japan
KE Kenya
KG Kyrgyzstan
KH Cambodia
KI Kiribati
KM Comoros
KN Saint Kitts and Nevis
KP Korea  Democratic People's Republic of
KR Korea  Republic of
KW Kuwait
KY Cayman Islands
KZ Kazakhstan
LA Lao People's Democratic Republic
LB Lebanon
LC Saint Lucia
LI Liechtenstein
LK Sri Lanka
LR Liberia
LS Lesotho
LT Lithuania
LU Luxembourg
LV Latvia
LY Libyan Arab Jamahiriya
MA Morocco
MC Monaco
MD Moldova  Republic of
ME Montenegro
MF Saint Martin
MG Madagascar
MH Marshall Islands
MK Macedonia
ML Mali
MM Myanmar
MN Mongolia
MO Macao
MP Northern Mariana Islands
MQ Martinique
MR Mauritania
MS Montserrat
MT Malta
MU Mauritius
MV Maldives
MW Malawi
MX Mexico
MY Malaysia
MZ Mozambique
NA Namibia
NC New Caledonia
NE Niger
NF Norfolk Island
NG Nigeria
NI Nicaragua
NL Netherlands
NO Norway
NP Nepal
NR Nauru
NU Niue
NZ New Zealand
OM Oman
PA Panama
PE Peru
PF French Polynesia
PG Papua New Guinea
PH Philippines
PK Pakistan
PL Poland
PM Saint Pierre and Miquelon
PN Pitcairn
PR Puerto Rico
PS Palestinian Territory
PT Portugal
PW Palau
PY Paraguay
QA Qatar
RE Reunion
RO Romania
RS Serbia
RU Russian Federation
RW Rwanda
SA Saudi Arabia
SB Solomon Islands
SC Seychelles
SD Sudan
SE Sweden
SG Singapore
SH Saint Helena
SI Slovenia
SJ Svalbard and Jan Mayen
SK Slovakia
SL Sierra Leone
SM San Marino
SN Senegal
SO Somalia
SR Suriname
SS South Sudan
ST Sao Tome and Principe
SV El Salvador
SX Sint Maarten
SY Syrian Arab Republic
SZ Swaziland
TC Turks and Caicos Islands
TD Chad
TF French Southern Territories
TG Togo
TH Thailand
TJ Tajikistan
TK Tokelau
TL Timor-Leste
TM Turkmenistan
TN Tunisia
TO Tonga
TR Turkey
TT Trinidad and Tobago
TV Tuvalu
TW Taiwan
TZ Tanzania  United Republic of
UA Ukraine
UG Uganda
UM United States Minor Outlying Islands
US United States
UY Uruguay
UZ Uzbekistan
VA Holy See (Vatican City State)
VC Saint Vincent and the Grenadines
VE Venezuela
VG Virgin Islands  British
VI Virgin Islands  U.S.
VN Vietnam
VU Vanuatu
WF Wallis and Futuna
WS Samoa
YE Yemen
YT Mayotte
ZA South Africa
ZM Zambia
ZW Zimbabwe"""

# About the following code:
#
# Author: Jiří Janoušek <janousek.jiri@gmail.com>
#
# To the extent possible under law, author has waived all
# copyright and related or neighboring rights to this file.
# http://creativecommons.org/publicdomain/zero/1.0/
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS "AS IS" AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

from gi.repository import Gtk, Pango, Gdk

clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)

def on_row_activated(view, path, column):
	model = view.get_model()
	iter = model.get_iter(path)
	icon = model.get(iter, 0)[0]
	clipboard.set_text(icon, -1)

notebook = Gtk.Notebook(hexpand=True, vexpand=True)

for line in SPEC_DATA.splitlines():
	if not line.strip():
		pass
	elif line.startswith("Table"):
		label = line.split(".")[1].strip()
		prefix = "Standard"
		suffix = "Icons"
		label = label[len(prefix) + 1 : 0 - len(suffix) - 1]
		model = Gtk.ListStore(str, str)
		view = Gtk.TreeView(model)
		view.connect("row-activated", on_row_activated)
		renderer = Gtk.CellRendererPixbuf()
		column = Gtk.TreeViewColumn("Icon", renderer, icon_name=0)
		column.set_sort_column_id(0)
		view.append_column(column)
		renderer = Gtk.CellRendererText()
		column = Gtk.TreeViewColumn("Name", renderer, text=0)
		column.set_sort_column_id(0)
		view.append_column(column)
		renderer = Gtk.CellRendererText(wrap_mode=Pango.WrapMode.WORD)
		column = Gtk.TreeViewColumn("Description", renderer, text=1)
		column.set_sort_column_id(1)
		view.append_column(column)
		scroll = Gtk.ScrolledWindow()
		scroll.add(view)
		notebook.append_page(scroll, Gtk.Label.new(label))
	elif line.startswith("Name"):
		pass
	else:
		try:
			i = line.index("\t")
			name = line[:i]
			desc = line[i + 1:]
			model.append((name, desc))
			
			if name == "flag-aa":
				for line in ISO_3166.splitlines():
					name = "flag-" + line[:2].lower()
					desc = line[3:]
					model.append((name, desc))
				
		except ValueError:
			print(line)

text = """Based on document \
<a href="http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html">Icon \
Naming Specification</a> by <a href="mailto:dobey.pwns@gmail.com">Rodney Dawes</a>.\nDouble click \
a row to copy an icon name to the clipboard."""
legend = Gtk.Label(hexpand=True, use_markup=True, label=text)

grid = Gtk.Grid(orientation=Gtk.Orientation.VERTICAL)
grid.add(legend)
grid.add(notebook)

win = Gtk.Window(title="Icon Naming Specification")
win.set_default_size(600, 600)
win.connect("delete-event", Gtk.main_quit)
win.add(grid)
win.show_all()
Gtk.main()
